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
7b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1EncodableVector;
84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
96e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1OctetString;
114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1Sequence;
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.ASN1TaggedObject;
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERBoolean;
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERObjectIdentifier;
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.DERSequence;
17b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom/**
194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @deprecated use Extensions
204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */
21b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallampublic class X509Extensions
224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Object
23b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
24b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
25b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Subject Directory Attributes
266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * @deprecated use X509Extension value.
27b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier SubjectDirectoryAttributes = new ASN1ObjectIdentifier("2.5.29.9");
29b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
30b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Subject Key Identifier
326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
33b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier SubjectKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.14");
35b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
36b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Key Usage
386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier KeyUsage = new ASN1ObjectIdentifier("2.5.29.15");
41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
42b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Private Key Usage Period
446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier PrivateKeyUsagePeriod = new ASN1ObjectIdentifier("2.5.29.16");
47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Subject Alternative Name
506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier SubjectAlternativeName = new ASN1ObjectIdentifier("2.5.29.17");
53b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Issuer Alternative Name
566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
57b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier IssuerAlternativeName = new ASN1ObjectIdentifier("2.5.29.18");
59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Basic Constraints
626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier BasicConstraints = new ASN1ObjectIdentifier("2.5.29.19");
65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * CRL Number
686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
69b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier CRLNumber = new ASN1ObjectIdentifier("2.5.29.20");
71b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
72b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Reason code
746e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
75b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier ReasonCode = new ASN1ObjectIdentifier("2.5.29.21");
77b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
78b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
796e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Hold Instruction Code
806e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
81b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
826e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier InstructionCode = new ASN1ObjectIdentifier("2.5.29.23");
83b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
84b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
856e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Invalidity Date
866e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
87b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
886e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier InvalidityDate = new ASN1ObjectIdentifier("2.5.29.24");
89b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
90b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
916e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Delta CRL indicator
926e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
93b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
946e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier DeltaCRLIndicator = new ASN1ObjectIdentifier("2.5.29.27");
95b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
96b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
976e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Issuing Distribution Point
986e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
99b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1006e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier IssuingDistributionPoint = new ASN1ObjectIdentifier("2.5.29.28");
101b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
102b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1036e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Certificate Issuer
1046e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
105b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1066e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier CertificateIssuer = new ASN1ObjectIdentifier("2.5.29.29");
107b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
108b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1096e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Name Constraints
1106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
111b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier NameConstraints = new ASN1ObjectIdentifier("2.5.29.30");
113b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
114b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * CRL Distribution Points
1166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
117b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier CRLDistributionPoints = new ASN1ObjectIdentifier("2.5.29.31");
119b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
120b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Certificate Policies
1226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
123b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier CertificatePolicies = new ASN1ObjectIdentifier("2.5.29.32");
125b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
126b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Policy Mappings
1286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
129b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier PolicyMappings = new ASN1ObjectIdentifier("2.5.29.33");
131b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
132b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Authority Key Identifier
1346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
135b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier AuthorityKeyIdentifier = new ASN1ObjectIdentifier("2.5.29.35");
137b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
138b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Policy Constraints
1406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
141b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier PolicyConstraints = new ASN1ObjectIdentifier("2.5.29.36");
143b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
144b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
1456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * Extended Key Usage
1466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
147b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier ExtendedKeyUsage = new ASN1ObjectIdentifier("2.5.29.37");
149b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
150b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
151b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Freshest CRL
1526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
153b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier FreshestCRL = new ASN1ObjectIdentifier("2.5.29.46");
155b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
156b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
157b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Inhibit Any Policy
1586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
159b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier InhibitAnyPolicy = new ASN1ObjectIdentifier("2.5.29.54");
161b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
162b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
163b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Authority Info Access
1646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
165b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier AuthorityInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.1");
167b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
168b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
169b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Subject Info Access
1706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
171b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier SubjectInfoAccess = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.11");
173b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
174b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
175c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Logo Type
1766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
177c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
1786e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier LogoType = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.12");
179c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
180c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
181b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * BiometricInfo
1826e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
183b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1846e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier BiometricInfo = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.2");
185b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
186b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
187b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * QCStatements
1886e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
189b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
1906e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier QCStatements = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.3");
191b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
192c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
193c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Audit identity extension in attribute certificates.
1946e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
195c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
1966e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier AuditIdentity = new ASN1ObjectIdentifier("1.3.6.1.5.5.7.1.4");
197c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
198c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
199c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * NoRevAvail extension in attribute certificates.
2006e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
201c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
2026e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier NoRevAvail = new ASN1ObjectIdentifier("2.5.29.56");
203c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
204c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
205c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * TargetInformation extension in attribute certificates.
2066e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     *  @deprecated use X509Extension value.
207c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
2086e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier TargetInformation = new ASN1ObjectIdentifier("2.5.29.55");
209c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
210db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    private Hashtable               extensions = new Hashtable();
211db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    private Vector                  ordering = new Vector();
212b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
213b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public static X509Extensions getInstance(
214b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1TaggedObject obj,
215b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        boolean          explicit)
216b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
217b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return getInstance(ASN1Sequence.getInstance(obj, explicit));
218b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
219b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
220b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public static X509Extensions getInstance(
221b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Object  obj)
222b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
223b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (obj == null || obj instanceof X509Extensions)
224b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
225b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return (X509Extensions)obj;
226b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
227b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
228b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (obj instanceof ASN1Sequence)
229b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
230b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return new X509Extensions((ASN1Sequence)obj);
231b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
232b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
2334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        if (obj instanceof Extensions)
2344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
2354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return new X509Extensions((ASN1Sequence)((Extensions)obj).toASN1Primitive());
2364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
2374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
238b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (obj instanceof ASN1TaggedObject)
239b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
240b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return getInstance(((ASN1TaggedObject)obj).getObject());
241b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
242b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
243b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
244b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
245b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
246b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
247b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Constructor from ASN1Sequence.
248b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
249b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * the extensions are a list of constructed sequences, either with (OID, OctetString) or (OID, Boolean, OctetString)
250b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
251b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509Extensions(
252b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        ASN1Sequence  seq)
253b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
254b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Enumeration e = seq.getObjects();
255b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
256b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        while (e.hasMoreElements())
257b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
258b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            ASN1Sequence            s = ASN1Sequence.getInstance(e.nextElement());
259b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
260db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            if (s.size() == 3)
261b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            {
262db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom                extensions.put(s.getObjectAt(0), new X509Extension(DERBoolean.getInstance(s.getObjectAt(1)), ASN1OctetString.getInstance(s.getObjectAt(2))));
263b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            }
264db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            else if (s.size() == 2)
265b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            {
266db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom                extensions.put(s.getObjectAt(0), new X509Extension(false, ASN1OctetString.getInstance(s.getObjectAt(1))));
267b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            }
268b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            else
269b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            {
270db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom                throw new IllegalArgumentException("Bad sequence size: " + s.size());
271b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            }
272b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
273db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            ordering.addElement(s.getObjectAt(0));
274b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
275b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
276b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
277b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
278b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * constructor from a table of extensions.
279b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * <p>
280b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * it's is assumed the table contains OID/String pairs.
281b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
282b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509Extensions(
283b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Hashtable  extensions)
284b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
285b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        this(null, extensions);
286b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
287b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
288b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
289b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Constructor from a table of extensions with ordering.
290b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * <p>
291b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * It's is assumed the table contains OID/String pairs.
29270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom     * @deprecated use Extensions
293b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
294b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509Extensions(
295b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Vector      ordering,
296b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Hashtable   extensions)
297b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
298b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Enumeration e;
299b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
300b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (ordering == null)
301b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
302b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            e = extensions.keys();
303b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
304b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        else
305b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
306b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            e = ordering.elements();
307b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
308b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
309db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        while (e.hasMoreElements())
310db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        {
3114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            this.ordering.addElement(ASN1ObjectIdentifier.getInstance(e.nextElement()));
312db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        }
313db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
314db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        e = this.ordering.elements();
3156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
316b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        while (e.hasMoreElements())
317b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
3184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            ASN1ObjectIdentifier     oid = ASN1ObjectIdentifier.getInstance(e.nextElement());
319b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            X509Extension           ext = (X509Extension)extensions.get(oid);
3206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
321db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            this.extensions.put(oid, ext);
322b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
323b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
324b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
325b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
326b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * Constructor from two vectors
327b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
328b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @param objectIDs a vector of the object identifiers.
329b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @param values a vector of the extension values.
33070c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom     * @deprecated use Extensions
331b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
332b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509Extensions(
333b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Vector      objectIDs,
334b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Vector      values)
335b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
336b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        Enumeration e = objectIDs.elements();
337b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
338db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        while (e.hasMoreElements())
339db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        {
340db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            this.ordering.addElement(e.nextElement());
341db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        }
3426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
343b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        int count = 0;
344b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
345db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        e = this.ordering.elements();
3466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
347b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        while (e.hasMoreElements())
348b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
3496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            ASN1ObjectIdentifier     oid = (ASN1ObjectIdentifier)e.nextElement();
350b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            X509Extension           ext = (X509Extension)values.elementAt(count);
351b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
352db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            this.extensions.put(oid, ext);
353b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            count++;
354b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
355b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
356b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
357b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
358b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * return an Enumeration of the extension field's object ids.
359b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
360b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public Enumeration oids()
361b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
362db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return ordering.elements();
363b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
364b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
365b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
366b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * return the extension represented by the object identifier
367b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * passed in.
368b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
369b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * @return the extension if it's present, null otherwise.
370b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
371b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    public X509Extension getExtension(
3724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        DERObjectIdentifier oid)
3736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
374db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return (X509Extension)extensions.get(oid);
3756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
3766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
3776e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    /**
3786e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * @deprecated
3796e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * @param oid
3806e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * @return
3816e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     */
3826e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public X509Extension getExtension(
3834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier oid)
384b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
385db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return (X509Extension)extensions.get(oid);
386b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
387b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
388b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    /**
389b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * <pre>
390b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *     Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
391b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *
392b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *     Extension         ::=   SEQUENCE {
393b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *        extnId            EXTENSION.&amp;id ({ExtensionSet}),
394b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *        critical          BOOLEAN DEFAULT FALSE,
395b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     *        extnValue         OCTET STRING }
396b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     * </pre>
397b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam     */
3984c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
399b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
400c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        ASN1EncodableVector     vec = new ASN1EncodableVector();
401db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        Enumeration             e = ordering.elements();
402b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
403db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        while (e.hasMoreElements())
404c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        {
4054c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            ASN1ObjectIdentifier    oid = (ASN1ObjectIdentifier)e.nextElement();
406db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            X509Extension           ext = (X509Extension)extensions.get(oid);
407b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            ASN1EncodableVector     v = new ASN1EncodableVector();
408b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
409b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            v.add(oid);
410b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
411b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            if (ext.isCritical())
412b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            {
413b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                v.add(DERBoolean.TRUE);
414b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            }
415b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
416b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            v.add(ext.getValue());
417b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
418b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            vec.add(new DERSequence(v));
419b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
420c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
421b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return new DERSequence(vec);
422b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
423b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
424c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public boolean equivalent(
425c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        X509Extensions other)
426b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
427db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        if (extensions.size() != other.extensions.size())
428b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
429b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return false;
430b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
431b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
432db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        Enumeration     e1 = extensions.keys();
433b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
434c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        while (e1.hasMoreElements())
435b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
436db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            Object  key = e1.nextElement();
437c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
438db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            if (!extensions.get(key).equals(other.extensions.get(key)))
439b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            {
440b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                return false;
441b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            }
442b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
443b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
444b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return true;
445b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
4466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
447db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    public ASN1ObjectIdentifier[] getExtensionOIDs()
448db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    {
449db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return toOidArray(ordering);
450db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    }
451db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
452db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    public ASN1ObjectIdentifier[] getNonCriticalExtensionOIDs()
453db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    {
454db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return getExtensionOIDs(false);
455db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    }
456db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
457db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    public ASN1ObjectIdentifier[] getCriticalExtensionOIDs()
458db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    {
459db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return getExtensionOIDs(true);
460db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    }
461db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
462db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    private ASN1ObjectIdentifier[] getExtensionOIDs(boolean isCritical)
463db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    {
464db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        Vector oidVec = new Vector();
465db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
466db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        for (int i = 0; i != ordering.size(); i++)
467db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        {
468db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            Object oid = ordering.elementAt(i);
469db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
470db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            if (((X509Extension)extensions.get(oid)).isCritical() == isCritical)
471db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            {
472db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom                oidVec.addElement(oid);
473db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom            }
474db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        }
475db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom
476db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom        return toOidArray(oidVec);
477db9f6e2562dff550a3c62aeb7c96e72fc40d1a06Brian Carlstrom    }
4786e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
4796e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private ASN1ObjectIdentifier[] toOidArray(Vector oidVec)
4806e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
4816e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        ASN1ObjectIdentifier[] oids = new ASN1ObjectIdentifier[oidVec.size()];
4826e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
4836e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        for (int i = 0; i != oids.length; i++)
4846e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
4856e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            oids[i] = (ASN1ObjectIdentifier)oidVec.elementAt(i);
4866e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
4876e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return oids;
4886e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
489b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
490