1 package org.bouncycastle.asn1; 2 3 import java.io.IOException; 4 5 import org.bouncycastle.util.Arrays; 6 import org.bouncycastle.util.Strings; 7 8 /** 9 * DER T61String (also the teletex string) 10 */ 11 public class DERT61String 12 extends ASN1Primitive 13 implements ASN1String 14 { 15 private byte[] string; 16 17 /** 18 * return a T61 string from the passed in object. 19 * 20 * @exception IllegalArgumentException if the object cannot be converted. 21 */ 22 public static DERT61String getInstance( 23 Object obj) 24 { 25 if (obj == null || obj instanceof DERT61String) 26 { 27 return (DERT61String)obj; 28 } 29 30 if (obj instanceof byte[]) 31 { 32 try 33 { 34 return (DERT61String)fromByteArray((byte[])obj); 35 } 36 catch (Exception e) 37 { 38 throw new IllegalArgumentException("encoding error in getInstance: " + e.toString()); 39 } 40 } 41 42 throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); 43 } 44 45 /** 46 * return an T61 String from a tagged object. 47 * 48 * @param obj the tagged object holding the object we want 49 * @param explicit true if the object is meant to be explicitly 50 * tagged false otherwise. 51 * @exception IllegalArgumentException if the tagged object cannot 52 * be converted. 53 */ 54 public static DERT61String getInstance( 55 ASN1TaggedObject obj, 56 boolean explicit) 57 { 58 ASN1Primitive o = obj.getObject(); 59 60 if (explicit || o instanceof DERT61String) 61 { 62 return getInstance(o); 63 } 64 else 65 { 66 return new DERT61String(ASN1OctetString.getInstance(o).getOctets()); 67 } 68 } 69 70 /** 71 * basic constructor - with bytes. 72 */ 73 DERT61String( 74 byte[] string) 75 { 76 this.string = string; 77 } 78 79 /** 80 * basic constructor - with string. 81 */ 82 public DERT61String( 83 String string) 84 { 85 // BEGIN android-changed 86 this.string = Strings.toByteArray(string); 87 // END android-changed 88 } 89 90 public String getString() 91 { 92 // BEGIN android-changed 93 return Strings.fromByteArray(string); 94 // END android-changed 95 } 96 97 public String toString() 98 { 99 return getString(); 100 } 101 102 boolean isConstructed() 103 { 104 return false; 105 } 106 107 int encodedLength() 108 { 109 return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; 110 } 111 112 void encode( 113 ASN1OutputStream out) 114 throws IOException 115 { 116 out.writeEncoded(BERTags.T61_STRING, string); 117 } 118 119 public byte[] getOctets() 120 { 121 return Arrays.clone(string); 122 } 123 124 boolean asn1Equals( 125 ASN1Primitive o) 126 { 127 if (!(o instanceof DERT61String)) 128 { 129 return false; 130 } 131 132 return Arrays.areEqual(string, ((DERT61String)o).string); 133 } 134 135 public int hashCode() 136 { 137 return Arrays.hashCode(string); 138 } 139 } 140