1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.security.cert;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayInputStream;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.math.BigInteger;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.InvalidKeyException;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.NoSuchAlgorithmException;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.NoSuchProviderException;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Principal;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.PublicKey;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.SignatureException;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CRL;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CRLException;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.X509CRLEntry;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.X509Extension;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Date;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Set;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.security.auth.x500.X500Principal;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.internal.nls.Messages;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Abstract base class for X.509 certificate revocation lists (CRL).
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * More information regarding CRL can be found in RFC 2459,
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "Internet X.509 Public Key Infrastructure Certificate and CRL Profile" at <a
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * href
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ="http://www.ietf.org/rfc/rfc2459.txt">http://www.ietf.org/rfc/rfc2459.txt
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </a>.
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic abstract class X509CRL extends CRL implements X509Extension {
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Creates a new {@code X509CRL} instance.
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected X509CRL() {
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super("X.509"); //$NON-NLS-1$
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns whether the specified object equals to this instance.
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param other
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to compare.
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return {@code true} if the specified object is equal to this, otherwise
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         {@code false}.
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean equals(Object other) {
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (other == this) {
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return true;
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!(other instanceof X509CRL)) {
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        X509CRL obj = (X509CRL) other;
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return Arrays.equals(getEncoded(), obj.getEncoded());
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (CRLException e) {
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the hashcode of this CRL instance.
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the hashcode.
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int hashCode() {
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int res = 0;
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            byte[] array = getEncoded();
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (int i=0; i<array.length; i++) {
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                res += array[i] & 0xFF;
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return res;
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (CRLException e) {
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return 0;
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns this CRL in ASN.1 DER encoded form.
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this CRL in ASN.1 DER encoded form.
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CRLException
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if encoding fails.
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract byte[] getEncoded() throws CRLException;
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Verifies this CRL by verifying that this CRL was signed with the
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * corresponding private key to the specified public key.
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param key
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the public key to verify this CRL with.
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CRLException
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if encoding or decoding fails.
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchAlgorithmException
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a needed algorithm is not present.
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws InvalidKeyException
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the specified key is invalid.
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchProviderException
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if no provider can be found.
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SignatureException
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if errors occur on signatures.
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract void verify(PublicKey key)
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                     throws CRLException, NoSuchAlgorithmException,
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            InvalidKeyException, NoSuchProviderException,
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            SignatureException;
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Verifies this CRL by verifying that this CRL was signed with the
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * corresponding private key to the specified public key. The signature
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * verification engine of the specified provider will be used.
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param key
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the public key to verify this CRL with.
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param sigProvider
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the name of the provider for the signature algorithm.
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CRLException
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if encoding decoding fails.
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchAlgorithmException
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a needed algorithm is not present.
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws InvalidKeyException
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the specified key is invalid.
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchProviderException
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the specified provider cannot be found.
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SignatureException
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if errors occur on signatures.
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract void verify(PublicKey key, String sigProvider)
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                     throws CRLException, NoSuchAlgorithmException,
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            InvalidKeyException, NoSuchProviderException,
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            SignatureException;
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the version number of this CRL.
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the version number of this CRL.
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract int getVersion();
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <b>Do not use</b>, use {@link #getIssuerX500Principal()} instead. Returns
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the issuer as an implementation specific Principal object.
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the issuer distinguished name.
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract Principal getIssuerDN();
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the issuer distinguished name of this CRL.
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the issuer distinguished name of this CRL.
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public X500Principal getIssuerX500Principal() {
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO if there is no X.509 certificate provider installed
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // should we try to access Harmony X509CRLImpl via classForName?
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            CertificateFactory factory = CertificateFactory
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getInstance("X.509"); //$NON-NLS-1$
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            X509CRL crl = (X509CRL) factory
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .generateCRL(new ByteArrayInputStream(getEncoded()));
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return crl.getIssuerX500Principal();
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new RuntimeException(Messages.getString("security.59"), e); //$NON-NLS-1$
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the {@code thisUpdate} value of this CRL.
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the {@code thisUpdate} value of this CRL.
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract Date getThisUpdate();
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the {@code nextUpdate} value of this CRL.
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the {@code nextUpdate} value of this CRL, or {@code null} if none
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         is present.
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract Date getNextUpdate();
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the CRL entry with the specified certificate serial number.
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param serialNumber
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the certificate serial number to search for a CRL entry.
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the entry for the specified certificate serial number, or {@code
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         null} if not found.
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract X509CRLEntry getRevokedCertificate(BigInteger serialNumber);
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the CRL entry for the specified certificate.
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param certificate
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the certificate to search a CRL entry for.
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the entry for the specified certificate, or {@code null} if not
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         found.
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public X509CRLEntry getRevokedCertificate(X509Certificate certificate) {
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (certificate == null) {
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return getRevokedCertificate(certificate.getSerialNumber());
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the set of revoked certificates.
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the set of revoked certificates, or {@code null} if no revoked
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         certificates are in this CRL.
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract Set<? extends X509CRLEntry> getRevokedCertificates();
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the {@code tbsCertList} information of this CRL in DER encoded
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * form.
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the CRL information in DER encoded form.
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CRLException
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if encoding fails.
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract byte[] getTBSCertList() throws CRLException;
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the signature bytes of this CRL.
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the signature bytes of this CRL.
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract byte[] getSignature();
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the name of the signature algorithm.
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the name of the signature algorithm.
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract String getSigAlgName();
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the OID of the signature algorithm.
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the OID of the signature algorithm.
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract String getSigAlgOID();
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the parameters of the signature algorithm in DER encoded form.
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the parameters of the signature algorithm in DER encoded form, or
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         {@code null} if not present.
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract byte[] getSigAlgParams();
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
280