1package org.bouncycastle.asn1; 2 3import java.io.IOException; 4 5/** 6 * DER NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. 7 */ 8public class DERNumericString 9 extends DERObject 10 implements DERString 11{ 12 String string; 13 14 /** 15 * return a Numeric string from the passed in object 16 * 17 * @exception IllegalArgumentException if the object cannot be converted. 18 */ 19 public static DERNumericString getInstance( 20 Object obj) 21 { 22 if (obj == null || obj instanceof DERNumericString) 23 { 24 return (DERNumericString)obj; 25 } 26 27 if (obj instanceof ASN1OctetString) 28 { 29 return new DERNumericString(((ASN1OctetString)obj).getOctets()); 30 } 31 32 if (obj instanceof ASN1TaggedObject) 33 { 34 return getInstance(((ASN1TaggedObject)obj).getObject()); 35 } 36 37 throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); 38 } 39 40 /** 41 * return an Numeric String from a tagged object. 42 * 43 * @param obj the tagged object holding the object we want 44 * @param explicit true if the object is meant to be explicitly 45 * tagged false otherwise. 46 * @exception IllegalArgumentException if the tagged object cannot 47 * be converted. 48 */ 49 public static DERNumericString getInstance( 50 ASN1TaggedObject obj, 51 boolean explicit) 52 { 53 return getInstance(obj.getObject()); 54 } 55 56 /** 57 * basic constructor - with bytes. 58 */ 59 public DERNumericString( 60 byte[] string) 61 { 62 char[] cs = new char[string.length]; 63 64 for (int i = 0; i != cs.length; i++) 65 { 66 cs[i] = (char)(string[i] & 0xff); 67 } 68 69 this.string = new String(cs); 70 } 71 72 /** 73 * basic constructor - with string. 74 */ 75 public DERNumericString( 76 String string) 77 { 78 this.string = string; 79 } 80 81 public String getString() 82 { 83 return string; 84 } 85 86 public byte[] getOctets() 87 { 88 char[] cs = string.toCharArray(); 89 byte[] bs = new byte[cs.length]; 90 91 for (int i = 0; i != cs.length; i++) 92 { 93 bs[i] = (byte)cs[i]; 94 } 95 96 return bs; 97 } 98 99 void encode( 100 DEROutputStream out) 101 throws IOException 102 { 103 out.writeEncoded(NUMERIC_STRING, this.getOctets()); 104 } 105 106 public int hashCode() 107 { 108 return this.getString().hashCode(); 109 } 110 111 public boolean equals( 112 Object o) 113 { 114 if (!(o instanceof DERNumericString)) 115 { 116 return false; 117 } 118 119 DERNumericString s = (DERNumericString)o; 120 121 return this.getString().equals(s.getString()); 122 } 123} 124