*/
public static final DERObjectIdentifier PolicyConstraints = new DERObjectIdentifier("2.5.29.36");
+ /**
+ * Extended Key Usage
+ */
+ public static final DERObjectIdentifier ExtendedKeyUsage = new DERObjectIdentifier("2.5.29.37");
+
private Hashtable extensions = new Hashtable();
private Vector ordering = new Vector();
- private DERConstructedSequence seq;
+
+ public static X509Extensions getInstance(
+ ASN1TaggedObject obj,
+ boolean explicit)
+ {
+ return getInstance(ASN1Sequence.getInstance(obj, explicit));
+ }
+
+ public static X509Extensions getInstance(
+ Object obj)
+ {
+ if (obj == null || obj instanceof X509Extensions)
+ {
+ return (X509Extensions)obj;
+ }
+
+ if (obj instanceof ASN1Sequence)
+ {
+ return new X509Extensions((ASN1Sequence)obj);
+ }
+
+ if (obj instanceof ASN1TaggedObject)
+ {
+ return getInstance(((ASN1TaggedObject)obj).getObject());
+ }
+
+ throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
+ }
/**
* Constructor from DERConstructedSequence.
* the extensions are a list of constructed sequences, either with (OID, OctetString) or (OID, Boolean, OctetString)
*/
public X509Extensions(
- DERConstructedSequence seq)
+ ASN1Sequence seq)
{
- this.seq = seq;
-
Enumeration e = seq.getObjects();
while (e.hasMoreElements())
{
- DERConstructedSequence s = (DERConstructedSequence)e.nextElement();
+ ASN1Sequence s = (ASN1Sequence)e.nextElement();
Enumeration e1 = s.getObjects();
- if (s.getSize() == 3)
+ if (s.size() == 3)
{
extensions.put(s.getObjectAt(0), new X509Extension((DERBoolean)s.getObjectAt(1), (DEROctetString)s.getObjectAt(2)));
}
Vector ordering,
Hashtable extensions)
{
- this.seq = new DERConstructedSequence();
+ Enumeration e;
if (ordering == null)
{
- Enumeration e = extensions.keys();
-
- ordering = this.ordering;
+ e = extensions.keys();
+ }
+ else
+ {
+ e = ordering.elements();
+ }
- while (e.hasMoreElements())
- {
- this.ordering.addElement(e.nextElement());
- }
+ while (e.hasMoreElements())
+ {
+ this.ordering.addElement(e.nextElement());
}
- Enumeration e = ordering.elements();
+ e = this.ordering.elements();
while (e.hasMoreElements())
{
DERObjectIdentifier oid = (DERObjectIdentifier)e.nextElement();
X509Extension ext = (X509Extension)extensions.get(oid);
- DERConstructedSequence s = new DERConstructedSequence();
-
- s.addObject(oid);
-
- if (ext.isCritical())
- {
- s.addObject(new DERBoolean(true));
- }
-
- s.addObject(ext.getValue());
- seq.addObject(s);
+ this.extensions.put(oid, ext);
}
}
public DERObject getDERObject()
{
- return seq;
+ DEREncodableVector vec = new DEREncodableVector();
+ Enumeration e = ordering.elements();
+
+ while (e.hasMoreElements())
+ {
+ DERObjectIdentifier oid = (DERObjectIdentifier)e.nextElement();
+ X509Extension ext = (X509Extension)extensions.get(oid);
+ DEREncodableVector v = new DEREncodableVector();
+
+ v.add(oid);
+
+ if (ext.isCritical())
+ {
+ v.add(new DERBoolean(true));
+ }
+
+ v.add(ext.getValue());
+
+ vec.add(new DERSequence(v));
+ }
+
+ return new DERSequence(vec);
}
public int hashCode()