package org.bouncycastle.asn1.x509;

import java.io.IOException;
import java.util.Hashtable;
import java.util.Vector;

import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1Encoding;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.DEROctetString;

Generator for X.509 extensions
/** * Generator for X.509 extensions */
public class ExtensionsGenerator { private Hashtable extensions = new Hashtable(); private Vector extOrdering = new Vector();
Reset the generator
/** * Reset the generator */
public void reset() { extensions = new Hashtable(); extOrdering = new Vector(); }
Add an extension with the given oid and the passed in value to be included in the OCTET STRING associated with the extension.
Params:
  • oid – OID for the extension.
  • critical – true if critical, false otherwise.
  • value – the ASN.1 object to be included in the extension.
/** * Add an extension with the given oid and the passed in value to be included * in the OCTET STRING associated with the extension. * * @param oid OID for the extension. * @param critical true if critical, false otherwise. * @param value the ASN.1 object to be included in the extension. */
public void addExtension( ASN1ObjectIdentifier oid, boolean critical, ASN1Encodable value) throws IOException { this.addExtension(oid, critical, value.toASN1Primitive().getEncoded(ASN1Encoding.DER)); }
Add an extension with the given oid and the passed in byte array to be wrapped in the OCTET STRING associated with the extension.
Params:
  • oid – OID for the extension.
  • critical – true if critical, false otherwise.
  • value – the byte array to be wrapped.
/** * Add an extension with the given oid and the passed in byte array to be wrapped in the * OCTET STRING associated with the extension. * * @param oid OID for the extension. * @param critical true if critical, false otherwise. * @param value the byte array to be wrapped. */
public void addExtension( ASN1ObjectIdentifier oid, boolean critical, byte[] value) { if (extensions.containsKey(oid)) { throw new IllegalArgumentException("extension " + oid + " already added"); } extOrdering.addElement(oid); extensions.put(oid, new Extension(oid, critical, new DEROctetString(value))); }
Add a given extension.
Params:
  • extension – the full extension value.
/** * Add a given extension. * * @param extension the full extension value. */
public void addExtension( Extension extension) { if (extensions.containsKey(extension.getExtnId())) { throw new IllegalArgumentException("extension " + extension.getExtnId() + " already added"); } extOrdering.addElement(extension.getExtnId()); extensions.put(extension.getExtnId(), extension); }
Return true if there are no extension present in this generator.
Returns:true if empty, false otherwise
/** * Return true if there are no extension present in this generator. * * @return true if empty, false otherwise */
public boolean isEmpty() { return extOrdering.isEmpty(); }
Generate an Extensions object based on the current state of the generator.
Returns: an X09Extensions object.
/** * Generate an Extensions object based on the current state of the generator. * * @return an X09Extensions object. */
public Extensions generate() { Extension[] exts = new Extension[extOrdering.size()]; for (int i = 0; i != extOrdering.size(); i++) { exts[i] = (Extension)extensions.get(extOrdering.elementAt(i)); } return new Extensions(exts); } }