1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.asn1;
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream;
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic abstract class ASN1Encodable
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    implements DEREncodable
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final String DER = "DER";
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final String BER = "BER";
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public byte[] getEncoded()
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throws IOException
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ASN1OutputStream        aOut = new ASN1OutputStream(bOut);
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        aOut.writeObject(this);
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return bOut.toByteArray();
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public byte[] getEncoded(
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String encoding)
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throws IOException
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (encoding.equals(DER))
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ByteArrayOutputStream   bOut = new ByteArrayOutputStream();
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            DEROutputStream         dOut = new DEROutputStream(bOut);
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            dOut.writeObject(this);
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return bOut.toByteArray();
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.getEncoded();
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Return the DER encoding of the object, null if the DER encoding can not be made.
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a DER byte array, null otherwise.
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public byte[] getDEREncoded()
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return this.getEncoded(DER);
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        catch (IOException e)
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int hashCode()
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.toASN1Object().hashCode();
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean equals(
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object  o)
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if ((o == null) || !(o instanceof DEREncodable))
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        DEREncodable other = (DEREncodable)o;
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.toASN1Object().equals(other.getDERObject());
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public DERObject getDERObject()
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.toASN1Object();
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract DERObject toASN1Object();
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
82