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