1 /**
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one or more
4 * contributor license agreements. See the NOTICE file distributed with
5 * this work for additional information regarding copyright ownership.
6 * The ASF licenses this file to You under the Apache License, Version 2.0
7 * (the "License"); you may not use this file except in compliance with
8 * the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 package org.apache.geronimo.util.asn1;
20
21 import java.io.IOException;
22
23 /**
24 * DER NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }.
25 */
26 public class DERNumericString
27 extends DERObject
28 implements DERString
29 {
30 String string;
31
32 /**
33 * return a Numeric string from the passed in object
34 *
35 * @exception IllegalArgumentException if the object cannot be converted.
36 */
37 public static DERNumericString getInstance(
38 Object obj)
39 {
40 if (obj == null || obj instanceof DERNumericString)
41 {
42 return (DERNumericString)obj;
43 }
44
45 if (obj instanceof ASN1OctetString)
46 {
47 return new DERNumericString(((ASN1OctetString)obj).getOctets());
48 }
49
50 if (obj instanceof ASN1TaggedObject)
51 {
52 return getInstance(((ASN1TaggedObject)obj).getObject());
53 }
54
55 throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
56 }
57
58 /**
59 * return an Numeric String from a tagged object.
60 *
61 * @param obj the tagged object holding the object we want
62 * @param explicit true if the object is meant to be explicitly
63 * tagged false otherwise.
64 * @exception IllegalArgumentException if the tagged object cannot
65 * be converted.
66 */
67 public static DERNumericString getInstance(
68 ASN1TaggedObject obj,
69 boolean explicit)
70 {
71 return getInstance(obj.getObject());
72 }
73
74 /**
75 * basic constructor - with bytes.
76 */
77 public DERNumericString(
78 byte[] string)
79 {
80 char[] cs = new char[string.length];
81
82 for (int i = 0; i != cs.length; i++)
83 {
84 cs[i] = (char)(string[i] & 0xff);
85 }
86
87 this.string = new String(cs);
88 }
89
90 /**
91 * basic constructor - with string.
92 */
93 public DERNumericString(
94 String string)
95 {
96 this.string = string;
97 }
98
99 public String getString()
100 {
101 return string;
102 }
103
104 public byte[] getOctets()
105 {
106 char[] cs = string.toCharArray();
107 byte[] bs = new byte[cs.length];
108
109 for (int i = 0; i != cs.length; i++)
110 {
111 bs[i] = (byte)cs[i];
112 }
113
114 return bs;
115 }
116
117 void encode(
118 DEROutputStream out)
119 throws IOException
120 {
121 out.writeEncoded(NUMERIC_STRING, this.getOctets());
122 }
123
124 public int hashCode()
125 {
126 return this.getString().hashCode();
127 }
128
129 public boolean equals(
130 Object o)
131 {
132 if (!(o instanceof DERNumericString))
133 {
134 return false;
135 }
136
137 DERNumericString s = (DERNumericString)o;
138
139 return this.getString().equals(s.getString());
140 }
141 }