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.DERObjectIdentifier; 114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.DEROctetString; 124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 13c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom/** 14c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * Generator for X.509 extensions 154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @deprecated use org.bouncycastle.asn1.x509.ExtensionsGenerator 16c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */ 17c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompublic class X509ExtensionsGenerator 18c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom{ 19c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom private Hashtable extensions = new Hashtable(); 20c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom private Vector extOrdering = new Vector(); 21c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 22c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom /** 23c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * Reset the generator 24c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */ 25c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public void reset() 26c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 27c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom extensions = new Hashtable(); 28c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom extOrdering = new Vector(); 29c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 30c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 31c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom /** 324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @deprecated use ASN1ObjectIdentifier 334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */ 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void addExtension( 354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom DERObjectIdentifier oid, 364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom boolean critical, 374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1Encodable value) 384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom addExtension(new ASN1ObjectIdentifier(oid.getId()), critical, value); 404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom /** 434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @deprecated use ASN1ObjectIdentifier 444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */ 454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void addExtension( 464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom DERObjectIdentifier oid, 474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom boolean critical, 484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom byte[] value) 494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom addExtension(new ASN1ObjectIdentifier(oid.getId()), critical, value); 514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom /** 54c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * Add an extension with the given oid and the passed in value to be included 55c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * in the 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 ASN.1 object to be included in the extension. 60c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */ 61c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public void addExtension( 624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1ObjectIdentifier oid, 63c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom boolean critical, 644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1Encodable value) 65c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 66c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom try 67c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom this.addExtension(oid, critical, value.toASN1Primitive().getEncoded(ASN1Encoding.DER)); 69c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 70c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom catch (IOException e) 71c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 72c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom throw new IllegalArgumentException("error encoding value: " + e); 73c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 74c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 75c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 76c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom /** 77c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * Add an extension with the given oid and the passed in byte array to be wrapped in the 78c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * OCTET STRING associated with the extension. 79c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * 80c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @param oid OID for the extension. 81c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @param critical true if critical, false otherwise. 82c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @param value the byte array to be wrapped. 83c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */ 84c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public void addExtension( 854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1ObjectIdentifier oid, 86c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom boolean critical, 87c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom byte[] value) 88c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 89c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom if (extensions.containsKey(oid)) 90c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 91c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom throw new IllegalArgumentException("extension " + oid + " already added"); 92c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 93c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 94c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom extOrdering.addElement(oid); 95c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom extensions.put(oid, new X509Extension(critical, new DEROctetString(value))); 96c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 97c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 98c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom /** 99c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * Return true if there are no extension present in this generator. 100c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * 101c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @return true if empty, false otherwise 102c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */ 103c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public boolean isEmpty() 104c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 105c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return extOrdering.isEmpty(); 106c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 107c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 108c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom /** 109c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * Generate an X509Extensions object based on the current state of the generator. 110c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * 111c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * @return an X09Extensions object. 112c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */ 113c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public X509Extensions generate() 114c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 115c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return new X509Extensions(extOrdering, extensions); 116c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 117c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom} 118