1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @author Alexander Y. Kleymenov
208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.x509;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayInputStream;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.math.BigInteger;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.CertificateFactory;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.X509CRL;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.X509CRLEntry;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Date;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.List;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Set;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.Test;
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestSuite;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.ASN1GeneralizedTime;
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.asn1.ASN1Integer;
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x501.Name;
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.AlgorithmIdentifier;
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.CertificateList;
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.Extension;
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.Extensions;
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.GeneralName;
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.GeneralNames;
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.security.x509.TBSCertList;
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * CertificateListTest
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class CertificateListTest extends TestCase {
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // OID was taken from http://oid.elibel.tm.fr
578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static String algOID = "1.2.840.10040.4.3";
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //private static String algName         = "SHA1withDSA";
598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static byte[] algParams = { 1, 1, 0 }; // DER boolean false encoding
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static AlgorithmIdentifier signature;
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static byte[] signatureValue = new byte[10];
628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static {
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        signature = new AlgorithmIdentifier(algOID, algParams);
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static String issuerName = "O=Certificate Issuer";
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static Date thisUpdate = new Date();
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static Date nextUpdate;
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static {
728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        nextUpdate = new Date(thisUpdate.getTime() + 100000);
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static Extension crlEntryExtension;
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static {
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Invalidity Date Extension (rfc 3280)
79e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes        crlEntryExtension = new Extension("2.5.29.24",
808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                ASN1GeneralizedTime.getInstance().encode(new Date()));
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static Extensions crlEntryExtensions = new Extensions();
848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static {
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //*
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        crlEntryExtensions.addExtension(crlEntryExtension);
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // add the Certificate Issuer Extension to check if implementation
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // support indirect CRLs. As says rfc 3280 (p.62):
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // "If used by conforming CRL issuers, this extension MUST always be
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // critical. If an implementation ignored this extension it could not
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // correctly attribute CRL entries to certificates. This specification
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // RECOMMENDS that implementations recognize this extension."
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            crlEntryExtensions.addExtension(
96e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes                    new Extension("2.5.29.29", true,
978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            //*
988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            //ASN1OctetString.getInstance().encode(
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            GeneralNames.ASN1.encode(
1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                    new GeneralNames(Arrays.asList(
1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                            new GeneralName[] {
1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                                    new GeneralName(new Name("O=Cert Organization"))//new GeneralName(4, "O=Organization")
1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                            })
1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                    )
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            )
1068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            //)
1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            //*/
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    )
1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            );
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (Exception e) {
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.printStackTrace();
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //*/
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static Date revocationDate = new Date();
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static List revokedCertificates = Arrays.asList(
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new TBSCertList.RevokedCertificate[] {
1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new TBSCertList.RevokedCertificate(BigInteger.valueOf(555),
1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            revocationDate, null),//crlEntryExtensions),
1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new TBSCertList.RevokedCertificate(BigInteger.valueOf(666),
1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            revocationDate, crlEntryExtensions),
1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new TBSCertList.RevokedCertificate(BigInteger.valueOf(777),
1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            revocationDate, null),//crlEntryExtensions)
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            });
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static Extensions crlExtensions = new Extensions(
1278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            Arrays.asList(new Extension[] {
1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new Extension("2.5.29.20", // CRL Number Extension (rfc 3280)
1298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ASN1Integer.getInstance().encode(
1308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                    BigInteger.valueOf(4444).toByteArray())),
1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }));
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private CertificateList certificateList;
134e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes    private TBSCertList tbscertlist;
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private byte[] encoding;
136e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() throws java.lang.Exception {
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Name issuer = new Name(issuerName);
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
141e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            tbscertlist =
1428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new TBSCertList(2, signature, issuer, thisUpdate,
1438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            nextUpdate, revokedCertificates, crlExtensions);
144e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
145e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            certificateList =
1468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new CertificateList(tbscertlist, signature, signatureValue);
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            encoding = CertificateList.ASN1.encode(certificateList);
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            certificateList = (CertificateList)
1518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    CertificateList.ASN1.decode(encoding);
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.printStackTrace();
1558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("Unexpected IOException was thrown: " + e.getMessage());
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
158e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
159e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * CertificateList(TBSCertList tbsCertList, AlgorithmIdentifier
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * signatureAlgorithm, byte[] signatureValue) method testing.
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testCertificateList() {
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
166e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            AlgorithmIdentifier signature =
1678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new AlgorithmIdentifier(algOID, algParams);
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Name issuer = new Name(issuerName);
169e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            TBSCertList tbscl =
1708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new TBSCertList(signature, issuer, thisUpdate);
171e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            CertificateList cl =
1728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new CertificateList(tbscl, signature, new byte[] { 0 });
173e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            byte[] encoding = CertificateList.ASN1.encode(cl);
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            CertificateList.ASN1.decode(encoding);
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
177e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            tbscl = new TBSCertList(2, signature, issuer, thisUpdate,
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    nextUpdate, revokedCertificates, crlExtensions);
179e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
1808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            cl = new CertificateList(tbscl, signature, new byte[] { 0 });
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            encoding = CertificateList.ASN1.encode(cl);
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            CertificateList.ASN1.decode(encoding);
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.printStackTrace();
1878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("Unexpected IOException was thrown: " + e.getMessage());
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
190e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getTbsCertList() method testing.
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetTbsCertList() {
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned tbsCertList value is incorrect",
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                tbscertlist.equals(certificateList.getTbsCertList()));
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
198e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getSignatureAlgorithm() method testing.
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSignatureAlgorithm() {
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned signatureAlgorithm value is incorrect",
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                signature.equals(certificateList.getSignatureAlgorithm()));
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
206e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getSignatureValue() method testing.
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSignatureValue() {
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned signatureAlgorithm value is incorrect",
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Arrays.equals(signatureValue, certificateList.getSignatureValue()));
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSupportIndirectCRLs() throws Exception {
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        X509CRL crl = (X509CRL)
2178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                CertificateFactory.getInstance("X.509").generateCRL(
2188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        new ByteArrayInputStream(encoding));
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Set rcerts = crl.getRevokedCertificates();
2208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        System.out.println(">> rcerts:" + rcerts);
2218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        System.out.println("}>> " + rcerts.toArray()[0]);
2238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        System.out.println("}>> " + ((X509CRLEntry) rcerts.toArray()[0]).getCertificateIssuer());
2248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        System.out.println("}>> " + ((X509CRLEntry) rcerts.toArray()[1]).getCertificateIssuer());
2258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        System.out.println("}>> " + ((X509CRLEntry) rcerts.toArray()[2]).getCertificateIssuer());
2268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        System.out.println(">> " + crl.getRevokedCertificate(
2278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                BigInteger.valueOf(555)).getCertificateIssuer());
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
229e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static Test suite() {
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new TestSuite(CertificateListTest.class);
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
235