DERGeneralString.java revision 4c111300c39cb2e27f07fc2ae3b00e23ed4443b2
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
22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        throw new IllegalArgumentException("illegal object in getInstance: "
23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                + obj.getClass().getName());
24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public static DERGeneralString getInstance(
27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1TaggedObject obj,
28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        boolean explicit)
29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1Primitive o = obj.getObject();
316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        if (explicit || o instanceof DERGeneralString)
336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            return getInstance(o);
356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        else
376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            return new DERGeneralString(((ASN1OctetString)o).getOctets());
396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    DERGeneralString(byte[] string)
43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        this.string = string;
45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public DERGeneralString(String string)
48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        this.string = Strings.toByteArray(string);
50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public String getString()
53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return Strings.fromByteArray(string);
55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
56c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
57c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public String toString()
58c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return getString();
60c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
61c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public byte[] getOctets()
63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return Arrays.clone(string);
65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    boolean isConstructed()
684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return false;
704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    int encodedLength()
734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return 1 + StreamUtil.calculateBodyLength(string.length) + string.length;
754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    void encode(ASN1OutputStream out)
78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        throws IOException
79b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        out.writeEncoded(BERTags.GENERAL_STRING, string);
81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public int hashCode()
84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return Arrays.hashCode(string);
86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    boolean asn1Equals(ASN1Primitive o)
89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (!(o instanceof DERGeneralString))
91b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return false;
93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        DERGeneralString s = (DERGeneralString)o;
954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return Arrays.areEqual(string, s.string);
97b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
99