1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.io.IOException;
4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam/**
6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * A NULL object.
7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic abstract class ASN1Null
94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Primitive
10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
1170c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom    /**
1270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom     * @deprecated use DERNull.INSTANCE
1370c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom     */
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    // BEGIN android-changed
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /*package*/ ASN1Null()
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    // END android-changed
19b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static ASN1Null getInstance(Object o)
214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        if (o instanceof ASN1Null)
234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return (ASN1Null)o;
254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        if (o != null)
284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            try
304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                return ASN1Null.getInstance(ASN1Primitive.fromByteArray((byte[])o));
324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            catch (IOException e)
344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                throw new IllegalArgumentException("failed to construct NULL from byte[]: " + e.getMessage());
364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            catch (ClassCastException e)
384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                throw new IllegalArgumentException("unknown object in getInstance(): " + o.getClass().getName());
404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return null;
444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public int hashCode()
47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
48c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        return -1;
49b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
51c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    boolean asn1Equals(
524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1Primitive o)
53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
54c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        if (!(o instanceof ASN1Null))
55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return false;
57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return true;
60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
61b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    abstract void encode(ASN1OutputStream out)
63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        throws IOException;
64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public String toString()
66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
67c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom         return "NULL";
68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
70