1c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompackage org.bouncycastle.asn1.x509;
2c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
3c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport java.io.IOException;
4c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport java.util.Hashtable;
5c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport java.util.Vector;
6c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Encodable;
84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Encoding;
94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.DEROctetString;
114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
12c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom/**
13c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * Generator for X.509 extensions
144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @deprecated use org.bouncycastle.asn1.x509.ExtensionsGenerator
15c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */
16c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompublic class X509ExtensionsGenerator
17c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom{
18c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    private Hashtable extensions = new Hashtable();
19c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    private Vector extOrdering = new Vector();
20c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
21c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
22c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Reset the generator
23c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
24c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public void reset()
25c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
26c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        extensions = new Hashtable();
27c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        extOrdering = new Vector();
28c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
29c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
30c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
31c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Add an extension with the given oid and the passed in value to be included
32c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * in the OCTET STRING associated with the extension.
33c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
34c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @param oid  OID for the extension.
35c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @param critical  true if critical, false otherwise.
36c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @param value the ASN.1 object to be included in the extension.
37c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
38c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public void addExtension(
394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier oid,
40c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        boolean             critical,
414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1Encodable       value)
42c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
43c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        try
44c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        {
454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            this.addExtension(oid, critical, value.toASN1Primitive().getEncoded(ASN1Encoding.DER));
46c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        }
47c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        catch (IOException e)
48c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        {
49c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom            throw new IllegalArgumentException("error encoding value: " + e);
50c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        }
51c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
52c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
53c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
54c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Add an extension with the given oid and the passed in byte array to be wrapped in the
55c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * OCTET STRING associated with the extension.
56c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
57c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @param oid OID for the extension.
58c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @param critical true if critical, false otherwise.
59c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @param value the byte array to be wrapped.
60c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
61c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public void addExtension(
624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier oid,
63c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        boolean             critical,
64c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        byte[]              value)
65c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
66c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        if (extensions.containsKey(oid))
67c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        {
68c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom            throw new IllegalArgumentException("extension " + oid + " already added");
69c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        }
70c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
71c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        extOrdering.addElement(oid);
72c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        extensions.put(oid, new X509Extension(critical, new DEROctetString(value)));
73c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
74c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
75c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
76c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Return true if there are no extension present in this generator.
77c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
78c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @return true if empty, false otherwise
79c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
80c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public boolean isEmpty()
81c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
82c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        return extOrdering.isEmpty();
83c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
84c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
85c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
86c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Generate an X509Extensions object based on the current state of the generator.
87c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
88c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @return  an X09Extensions object.
89c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
90c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public X509Extensions generate()
91c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
92c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        return new X509Extensions(extOrdering, extensions);
93c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
94c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom}
95