1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1; 2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.io.IOException; 4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.util.Arrays; 64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.util.Strings; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class DERGeneralString 94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends ASN1Primitive 104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom implements ASN1String 11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{ 124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom private byte[] string; 13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static DERGeneralString getInstance( 15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam Object obj) 16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (obj == null || obj instanceof DERGeneralString) 18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return (DERGeneralString) obj; 20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom if (obj instanceof byte[]) 2370c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 2470c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom try 2570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 2670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom return (DERGeneralString)fromByteArray((byte[])obj); 2770c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 2870c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom catch (Exception e) 2970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 3070c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom throw new IllegalArgumentException("encoding error in getInstance: " + e.toString()); 3170c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 3270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 3370c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throw new IllegalArgumentException("illegal object in getInstance: " 35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam + obj.getClass().getName()); 36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 37b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public static DERGeneralString getInstance( 39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam ASN1TaggedObject obj, 40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam boolean explicit) 41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1Primitive o = obj.getObject(); 436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (explicit || o instanceof DERGeneralString) 456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return getInstance(o); 476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else 496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return new DERGeneralString(((ASN1OctetString)o).getOctets()); 516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom DERGeneralString(byte[] string) 55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.string = string; 57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public DERGeneralString(String string) 60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.string = Strings.toByteArray(string); 62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public String getString() 65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return Strings.fromByteArray(string); 67b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 68c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 69c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public String toString() 70c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return getString(); 72c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 73c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public byte[] getOctets() 75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return Arrays.clone(string); 77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom boolean isConstructed() 804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return false; 824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int encodedLength() 854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; 874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom void encode(ASN1OutputStream out) 90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam throws IOException 91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom out.writeEncoded(BERTags.GENERAL_STRING, string); 93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam public int hashCode() 96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return Arrays.hashCode(string); 98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam 1004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom boolean asn1Equals(ASN1Primitive o) 101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam if (!(o instanceof DERGeneralString)) 103b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam { 104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam return false; 105b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 1064c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom DERGeneralString s = (DERGeneralString)o; 1074c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1084c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return Arrays.areEqual(string, s.string); 109b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam } 110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam} 111