1b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampackage org.bouncycastle.asn1.x509;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
36e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport java.util.Enumeration;
46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport java.util.Hashtable;
56e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport java.util.Vector;
66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
7d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Rootimport org.bouncycastle.asn1.ASN1Boolean;
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector;
94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1OctetString;
124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence;
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject;
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERSequence;
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom/**
184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @deprecated use Extensions
194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */
20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class X509Extensions
214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Object
22b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Subject Directory Attributes
256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * @deprecated use X509Extension value.
26b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier SubjectDirectoryAttributes = new ASN1ObjectIdentifier("2.5.29.9");
28b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Subject Key Identifier
316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
32b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier SubjectKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.14");
34b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Key Usage
376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
38b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier KeyUsage = new ASN1ObjectIdentifier("2.5.29.15");
40b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Private Key Usage Period
436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier PrivateKeyUsagePeriod = new ASN1ObjectIdentifier("2.5.29.16");
46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Subject Alternative Name
496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier SubjectAlternativeName = new ASN1ObjectIdentifier("2.5.29.17");
52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Issuer Alternative Name
556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier IssuerAlternativeName = new ASN1ObjectIdentifier("2.5.29.18");
58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Basic Constraints
616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier BasicConstraints = new ASN1ObjectIdentifier("2.5.29.19");
64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * CRL Number
676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
68b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier CRLNumber = new ASN1ObjectIdentifier("2.5.29.20");
70b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Reason code
736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
74b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier ReasonCode = new ASN1ObjectIdentifier("2.5.29.21");
76b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
786e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Hold Instruction Code
796e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
80b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
816e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier InstructionCode = new ASN1ObjectIdentifier("2.5.29.23");
82b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
846e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Invalidity Date
856e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
86b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
876e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier InvalidityDate = new ASN1ObjectIdentifier("2.5.29.24");
88b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
906e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Delta CRL indicator
916e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
92b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
936e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier DeltaCRLIndicator = new ASN1ObjectIdentifier("2.5.29.27");
94b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
966e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Issuing Distribution Point
976e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
98b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
996e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier IssuingDistributionPoint = new ASN1ObjectIdentifier("2.5.29.28");
100b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1026e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Certificate Issuer
1036e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
104b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1056e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier CertificateIssuer = new ASN1ObjectIdentifier("2.5.29.29");
106b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1086e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Name Constraints
1096e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
110b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier NameConstraints = new ASN1ObjectIdentifier("2.5.29.30");
112b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * CRL Distribution Points
1156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
116b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier CRLDistributionPoints = new ASN1ObjectIdentifier("2.5.29.31");
118b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Certificate Policies
1216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
122b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier CertificatePolicies = new ASN1ObjectIdentifier("2.5.29.32");
124b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Policy Mappings
1276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
128b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier PolicyMappings = new ASN1ObjectIdentifier("2.5.29.33");
130b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
131b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Authority Key Identifier
1336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
134b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier AuthorityKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.35");
136b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
137b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Policy Constraints
1396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
140b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier PolicyConstraints = new ASN1ObjectIdentifier("2.5.29.36");
142b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
143b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Extended Key Usage
1456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
146b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier ExtendedKeyUsage = new ASN1ObjectIdentifier("2.5.29.37");
148b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
149b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
150b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Freshest CRL
1516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
152b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier FreshestCRL = new ASN1ObjectIdentifier("2.5.29.46");
154b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
155b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
156b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Inhibit Any Policy
1576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
158b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1596e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier InhibitAnyPolicy = new ASN1ObjectIdentifier("2.5.29.54");
160b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
161b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
162b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Authority Info Access
1636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
164b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier AuthorityInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.1");
166b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
167b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
168b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Subject Info Access
1696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
170b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1716e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier SubjectInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.11");
172b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
173b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
174c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Logo Type
1756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
176c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
1776e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier LogoType = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.12");
178c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
179c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
180b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * BiometricInfo
1816e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
182b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1836e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier BiometricInfo = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.2");
184b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
185b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
186b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * QCStatements
1876e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
188b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1896e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier QCStatements = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.3");
190b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
191c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
192c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Audit identity extension in attribute certificates.
1936e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
194c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
1956e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier AuditIdentity = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.4");
196c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
197c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
198c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * NoRevAvail extension in attribute certificates.
1996e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
200c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
2016e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier NoRevAvail = new ASN1ObjectIdentifier("2.5.29.56");
202c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
203c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
204c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * TargetInformation extension in attribute certificates.
2056e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
206c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
2076e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier TargetInformation = new ASN1ObjectIdentifier("2.5.29.55");
208c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
209db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    private Hashtable               extensions = new Hashtable();
210db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    private Vector                  ordering = new Vector();
211b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
212b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public static X509Extensions getInstance(
213b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1TaggedObject obj,
214b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        boolean          explicit)
215b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
216b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return getInstance(ASN1Sequence.getInstance(obj, explicit));
217b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
218b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
219b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public static X509Extensions getInstance(
220b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Object  obj)
221b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
222b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (obj == null || obj instanceof X509Extensions)
223b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
224b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return (X509Extensions)obj;
225b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
226b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
227b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (obj instanceof ASN1Sequence)
228b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
229b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return new X509Extensions((ASN1Sequence)obj);
230b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
231b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
2324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        if (obj instanceof Extensions)
2334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
2344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return new X509Extensions((ASN1Sequence)((Extensions)obj).toASN1Primitive());
2354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
2364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
237b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (obj instanceof ASN1TaggedObject)
238b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
239b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return getInstance(((ASN1TaggedObject)obj).getObject());
240b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
241b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
242b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
243b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
244b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
245b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
246b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Constructor from ASN1Sequence.
247b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
248b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * the extensions are a list of constructed sequences, either with (OID, OctetString) or (OID, Boolean, OctetString)
249b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
250b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509Extensions(
251b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1Sequence  seq)
252b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
253b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Enumeration e = seq.getObjects();
254b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
255b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        while (e.hasMoreElements())
256b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
257b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            ASN1Sequence            s = ASN1Sequence.getInstance(e.nextElement());
258b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
259db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            if (s.size() == 3)
260b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            {
261d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root                extensions.put(s.getObjectAt(0), new X509Extension(ASN1Boolean.getInstance(s.getObjectAt(1)), ASN1OctetString.getInstance(s.getObjectAt(2))));
262b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            }
263db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            else if (s.size() == 2)
264b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            {
265db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom                extensions.put(s.getObjectAt(0), new X509Extension(false, ASN1OctetString.getInstance(s.getObjectAt(1))));
266b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            }
267b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            else
268b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            {
269db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom                throw new IllegalArgumentException("Bad sequence size: " + s.size());
270b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            }
271b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
272db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            ordering.addElement(s.getObjectAt(0));
273b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
274b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
275b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
276b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
277b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * constructor from a table of extensions.
278b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * <p>
279b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * it's is assumed the table contains OID/String pairs.
280b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
281b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509Extensions(
282b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Hashtable  extensions)
283b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
284b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this(null, extensions);
285b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
286b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
287b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
288b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Constructor from a table of extensions with ordering.
289b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * <p>
290b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * It's is assumed the table contains OID/String pairs.
29170c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom     * @deprecated use Extensions
292b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
293b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509Extensions(
294b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Vector      ordering,
295b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Hashtable   extensions)
296b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
297b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Enumeration e;
298b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
299b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (ordering == null)
300b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
301b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            e = extensions.keys();
302b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
303b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        else
304b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
305b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            e = ordering.elements();
306b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
307b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
308db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        while (e.hasMoreElements())
309db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        {
3104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            this.ordering.addElement(ASN1ObjectIdentifier.getInstance(e.nextElement()));
311db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        }
312db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
313db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        e = this.ordering.elements();
3146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
315b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        while (e.hasMoreElements())
316b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
3174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            ASN1ObjectIdentifier     oid = ASN1ObjectIdentifier.getInstance(e.nextElement());
318b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            X509Extension           ext = (X509Extension)extensions.get(oid);
3196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
320db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            this.extensions.put(oid, ext);
321b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
322b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
323b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
324b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
325b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Constructor from two vectors
326b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
327b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @param objectIDs a vector of the object identifiers.
328b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @param values a vector of the extension values.
32970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom     * @deprecated use Extensions
330b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
331b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509Extensions(
332b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Vector      objectIDs,
333b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Vector      values)
334b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
335b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Enumeration e = objectIDs.elements();
336b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
337db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        while (e.hasMoreElements())
338db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        {
339db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            this.ordering.addElement(e.nextElement());
340db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        }
3416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
342b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        int count = 0;
343b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
344db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        e = this.ordering.elements();
3456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
346b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        while (e.hasMoreElements())
347b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
3486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            ASN1ObjectIdentifier     oid = (ASN1ObjectIdentifier)e.nextElement();
349b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            X509Extension           ext = (X509Extension)values.elementAt(count);
350b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
351db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            this.extensions.put(oid, ext);
352b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            count++;
353b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
354b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
355b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
356b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
357b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * return an Enumeration of the extension field's object ids.
358b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
359b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public Enumeration oids()
360b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
361db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return ordering.elements();
362b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
363b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
364b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
365b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * return the extension represented by the object identifier
366b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * passed in.
367b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
368b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @return the extension if it's present, null otherwise.
369b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
370b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509Extension getExtension(
3714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier oid)
372b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
373db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return (X509Extension)extensions.get(oid);
374b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
375b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
376b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
377b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * <pre>
378b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *     Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
379b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
380b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *     Extension         ::=   SEQUENCE {
381b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *        extnId            EXTENSION.&amp;id ({ExtensionSet}),
382b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *        critical          BOOLEAN DEFAULT FALSE,
383b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *        extnValue         OCTET STRING }
384b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * </pre>
385b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
3864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
387b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
388c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        ASN1EncodableVector     vec = new ASN1EncodableVector();
389db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        Enumeration             e = ordering.elements();
390b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
391db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        while (e.hasMoreElements())
392c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        {
3934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            ASN1ObjectIdentifier    oid = (ASN1ObjectIdentifier)e.nextElement();
394db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            X509Extension           ext = (X509Extension)extensions.get(oid);
395b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            ASN1EncodableVector     v = new ASN1EncodableVector();
396b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
397b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            v.add(oid);
398b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
399b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            if (ext.isCritical())
400b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            {
401d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root                v.add(ASN1Boolean.TRUE);
402b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            }
403b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
404b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            v.add(ext.getValue());
405b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
406b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            vec.add(new DERSequence(v));
407b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
408c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
409b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return new DERSequence(vec);
410b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
411b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
412c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public boolean equivalent(
413c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        X509Extensions other)
414b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
415db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        if (extensions.size() != other.extensions.size())
416b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
417b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return false;
418b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
419b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
420db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        Enumeration     e1 = extensions.keys();
421b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
422c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        while (e1.hasMoreElements())
423b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
424db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            Object  key = e1.nextElement();
425c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
426db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            if (!extensions.get(key).equals(other.extensions.get(key)))
427b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            {
428b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                return false;
429b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            }
430b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
431b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
432b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return true;
433b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
4346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
435db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    public ASN1ObjectIdentifier[] getExtensionOIDs()
436db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    {
437db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return toOidArray(ordering);
438db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    }
439db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
440db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    public ASN1ObjectIdentifier[] getNonCriticalExtensionOIDs()
441db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    {
442db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return getExtensionOIDs(false);
443db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    }
444db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
445db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    public ASN1ObjectIdentifier[] getCriticalExtensionOIDs()
446db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    {
447db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return getExtensionOIDs(true);
448db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    }
449db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
450db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    private ASN1ObjectIdentifier[] getExtensionOIDs(boolean isCritical)
451db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    {
452db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        Vector oidVec = new Vector();
453db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
454db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        for (int i = 0; i != ordering.size(); i++)
455db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        {
456db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            Object oid = ordering.elementAt(i);
457db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
458db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            if (((X509Extension)extensions.get(oid)).isCritical() == isCritical)
459db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            {
460db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom                oidVec.addElement(oid);
461db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            }
462db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        }
463db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
464db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return toOidArray(oidVec);
465db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    }
4666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
4676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private ASN1ObjectIdentifier[] toOidArray(Vector oidVec)
4686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
4696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        ASN1ObjectIdentifier[] oids = new ASN1ObjectIdentifier[oidVec.size()];
4706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
4716e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        for (int i = 0; i != oids.length; i++)
4726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
4736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            oids[i] = (ASN1ObjectIdentifier)oidVec.elementAt(i);
4746e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
4756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return oids;
4766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
477b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
478