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/**
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes* @author Alexander Y. Kleymenov
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.javax.security.cert;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayInputStream;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.CertificateFactory;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Calendar;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Date;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.cert.CertificateEncodingException;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.cert.CertificateException;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.cert.CertificateExpiredException;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.cert.CertificateNotYetValidException;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.security.cert.X509Certificate;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.Test;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestSuite;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class X509CertificateTest extends TestCase {
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes    // Testing data was generated by using of classes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // from org.apache.harmony.security.asn1 package encoded
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // by org.apache.harmony.misc.Base64 class.
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
52e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes    private static String base64cert =
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "-----BEGIN CERTIFICATE-----\n" +
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a" +
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF" +
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE" +
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD" +
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAYGBFUdIAAwZwYDVR0RAQH/B" +
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG" +
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY" +
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG" +
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "CCsGAQUFBwMBBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB" +
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw" +
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE" +
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h" +
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd" +
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1" +
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwGByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP" +
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n" +
70e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes        "-----END CERTIFICATE-----";
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private java.security.cert.X509Certificate cert;
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private javax.security.cert.X509Certificate tbt_cert;
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() throws Exception {
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ByteArrayInputStream bais =
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new ByteArrayInputStream(base64cert.getBytes());
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            CertificateFactory cf = CertificateFactory.getInstance("X.509");
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.cert = (java.security.cert.X509Certificate)
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                cf.generateCertificate(bais);
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.tbt_cert = X509Certificate.getInstance(cert.getEncoded());
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (java.security.cert.CertificateException e) {
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test pass..
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.cert = null;
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (javax.security.cert.CertificateException e) {
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test pass..
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.cert = null;
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getInstance(InputStream inStream) method testing.
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetInstance1() {
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ByteArrayInputStream bais =
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new ByteArrayInputStream(cert.getEncoded());
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            X509Certificate.getInstance(bais);
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (java.security.cert.CertificateEncodingException e) {
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.printStackTrace();
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected CertificateEncodingException was thrown.");
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (CertificateEncodingException e) {
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.printStackTrace();
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected CertificateEncodingException was thrown.");
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (CertificateException e) {
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test pass..
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-756
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            X509Certificate.getInstance((InputStream) null);
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected CertificateException");
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (CertificateException e) {
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //expected;
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getInstance(byte[] certData) method testing.
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetInstance2() {
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            X509Certificate.getInstance(cert.getEncoded());
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (java.security.cert.CertificateEncodingException e) {
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.printStackTrace();
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected CertificateEncodingException was thrown.");
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (CertificateException e) {
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test pass..
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-756
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            X509Certificate.getInstance((byte[]) null);
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected CertificateException");
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (CertificateException e) {
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //expected;
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * checkValidity() method testing.
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testCheckValidity1() {
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Date date = new Date();
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Date nb_date = tbt_cert.getNotBefore();
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Date na_date = tbt_cert.getNotAfter();
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            tbt_cert.checkValidity();
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertFalse("CertificateExpiredException expected",
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                            date.compareTo(na_date) > 0);
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertFalse("CertificateNotYetValidException expected",
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                            date.compareTo(nb_date) < 0);
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (CertificateExpiredException e) {
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Unexpected CertificateExpiredException was thrown",
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                            date.compareTo(na_date) > 0);
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (CertificateNotYetValidException e) {
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Unexpected CertificateNotYetValidException was thrown",
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                            date.compareTo(nb_date) < 0);
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * checkValidity(Date date) method testing.
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testCheckValidity2() {
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Date[] date = new Date[4];
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Calendar calendar = Calendar.getInstance();
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<date.length; i++) {
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            calendar.set(i*50, Calendar.JANUARY, 1);
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            date[i] = calendar.getTime();
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Date nb_date = tbt_cert.getNotBefore();
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Date na_date = tbt_cert.getNotAfter();
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<date.length; i++) {
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                tbt_cert.checkValidity(date[i]);
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertFalse("CertificateExpiredException expected",
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                date[i].compareTo(na_date) > 0);
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertFalse("CertificateNotYetValidException expected",
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                date[i].compareTo(nb_date) < 0);
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (CertificateExpiredException e) {
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Unexpected CertificateExpiredException was thrown",
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                date[i].compareTo(na_date) > 0);
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (CertificateNotYetValidException e) {
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Unexpected CertificateNotYetValidException "
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                + "was thrown", date[i].compareTo(nb_date) < 0);
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getVersion() method testing.
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetVersion() {
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("The version is not correct.",
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                tbt_cert.getVersion(), 2);
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getSerialNumber() method testing.
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSerialNumber() {
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("The serial number is not correct.",
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            tbt_cert.getSerialNumber(), cert.getSerialNumber());
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getIssuerDN() method testing.
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetIssuerDN() {
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("The issuer DN is not correct.",
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    tbt_cert.getIssuerDN(), cert.getIssuerDN());
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getSubjectDN() method testing.
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSubjectDN() {
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("The subject DN is not correct.",
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                tbt_cert.getSubjectDN(), cert.getSubjectDN());
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getNotBefore() method testing.
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetNotBefore() {
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("The NotBefore date is not correct.",
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                tbt_cert.getNotBefore(), cert.getNotBefore());
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getNotAfter() method testing.
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetNotAfter() {
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("The NotAfter date is not correct.",
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                tbt_cert.getNotAfter(), cert.getNotAfter());
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getSigAlgName() method testing.
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSigAlgName() {
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("The name of signature algorithm is not correct.",
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                tbt_cert.getSigAlgName(), cert.getSigAlgName());
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getSigAlgOID() method testing.
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSigAlgOID() {
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("The name of OID of signature algorithm is not correct.",
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                tbt_cert.getSigAlgOID(), cert.getSigAlgOID());
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getSigAlgParams() method testing.
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSigAlgParams() {
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (this.cert == null) {
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // The requested certificate type is not available.
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Test can not be applied.
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return;
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("The byte array with encoded algorithm parameters "
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + "is not correct.", Arrays.equals(tbt_cert.getSigAlgParams(),
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                    cert.getSigAlgParams()));
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static Test suite() {
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new TestSuite(X509CertificateTest.class);
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
341