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 tests.security.cert;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.tests.support.cert.TestUtils;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayInputStream;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.math.BigInteger;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Principal;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.PublicKey;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertificateException;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertificateFactory;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertificateParsingException;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.X509Certificate;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.X509Extension;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Collection;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Date;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.List;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Set;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.security.auth.x500.X500Principal;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(X509Certificate.class)
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class X509Certificate2Test extends junit.framework.TestCase {
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for X.509 Certificate provider
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "toString",
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_toString() throws Exception {
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Regression for HARMONY-3384
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CertificateFactory certFact = CertificateFactory.getInstance("X509");
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        X509Certificate pemCert = (X509Certificate) certFact
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .generateCertificate(new ByteArrayInputStream(TestUtils
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .getX509Certificate_v3()));
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // extension value is empty sequence
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] extnValue = pemCert.getExtensionValue("2.5.29.35");
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(Arrays
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .equals(new byte[] {0x04, 0x02, 0x30, 0x00}, extnValue));
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull(pemCert.toString());
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // End regression for HARMONY-3384
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.cert.X509Certificate#X509Certificate()
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "X509Certificate",
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_X509Certificate() {
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyX509Certificate s = null;
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new MyX509Certificate();
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception " + e.getMessage());
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("X.509", s.getType());
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "checkValidity",
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "checkValidity",
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.util.Date.class}
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getBasicConstraints",
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getIssuerDN",
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getIssuerUniqueID",
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getKeyUsage",
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getNotAfter",
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getNotBefore",
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getSerialNumber",
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getSigAlgName",
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getSigAlgOID",
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getSigAlgParams",
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getSignature",
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getSubjectDN",
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getSubjectUniqueID",
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getTBSCertificate",
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getVersion",
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testAbstractMethods() {
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyX509Certificate s = new MyX509Certificate();
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.checkValidity();
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.checkValidity(new Date());
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getBasicConstraints();
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getIssuerDN();
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getIssuerUniqueID();
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getKeyUsage();
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getNotAfter();
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getNotBefore();
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getSerialNumber();
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getSigAlgName();
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getSigAlgOID();
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getSigAlgParams();
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getSignature();
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getSubjectDN();
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getSubjectUniqueID();
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getTBSCertificate();
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getVersion();
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception " + e.getMessage());
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // Base64 encoded form of ASN.1 DER encoded X.509 Certificate
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // (see RFC 3280 at http://www.ietf.org/rfc/rfc3280.txt)
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // (generated by using of classes from
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // org.apache.harmony.security.x509 package)
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static String base64cert =
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        "MIIByzCCATagAwIBAgICAiswCwYJKoZIhvcNAQEFMB0xGzAZBgNVBAoT"
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "EkNlcnRpZmljYXRlIElzc3VlcjAeFw0wNjA0MjYwNjI4MjJaFw0zMzAz"
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "MDExNjQ0MDlaMB0xGzAZBgNVBAoTEkNlcnRpZmljYXRlIElzc3VlcjCB"
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAkLGLsPdSPDMyP1OUOKu"
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "U3cvbNK5RGaQ3bXc5aDjvApx43BcaoXgt6YD/5yXz0OsIooj5yA37bY"
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "JGcVrvFD5FMPdDd3vjNPQOep0MzG4CdbkaZde5SigPabOMQYS4oUyLBx"
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "W3LGG0mUODe5AGGqtqXU0GlKg4K2je6cCtookCUCAwEAAaMeMBwwGgYD"
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "VR0RAQH/BBAwDoEMcmZjQDgyMi5OYW1lMAsGCSqGSIb3DQEBBQOBgQBZ"
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "pVXj01dOpqnZErUQb50j8lJD1dIaz1eJTvJCSadj7ziV1VtnnapI07c"
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "XEa7ONzcHQTYTG10poHfOK/a0BaULF3GlctDESilwQYbW5BdfpAlZpbH"
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "AFLcUDh6Eq50kc0A/anh/j3mgBNuvbIMo7hHNnZB6k/prswm2BszyLD"
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "yw==";
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static String base64certCorrect =
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        "-----BEGIN CERTIFICATE-----\n"
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a"
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF"
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE"
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD"
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAYGBFUdIAAwZwYDVR0RAQH/B"
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG"
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY"
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG"
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "CCsGAQUFBwMBBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB"
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw"
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE"
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h"
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd"
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1"
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwGByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP"
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n"
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "-----END CERTIFICATE-----";
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private X509Certificate cert;
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static String base64certTampered = "-----BEGIN CERTIFICATE-----\n"
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a"
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF"
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE"
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD"
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAyGBFUdIAAwZwYDVR0RAQH/B"
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG"
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY"
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG"
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "CCsGAQUFBwMBBggrBgEFBQcDAQYIKxYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB"
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw"
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE"
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h"
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd"
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1"
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwHByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP"
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n"
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        + "-----END CERTIFICATE-----";
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // Base64 encoded form of ASN.1 DER encoded X.509 CRL
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // (see RFC 3280 at http://www.ietf.org/rfc/rfc3280.txt)
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // (generated by using of classes from
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // org.apache.harmony.security.x509 package)
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static String base64crl =
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        "MIHXMIGXAgEBMAkGByqGSM44BAMwFTETMBEGA1UEChMKQ1JMIElzc3Vl"
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "chcNMDYwNDI3MDYxMzQ1WhcNMDYwNDI3MDYxNTI1WjBBMD8CAgIrFw0w"
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "NjA0MjcwNjEzNDZaMCowCgYDVR0VBAMKAQEwHAYDVR0YBBUYEzIwMDYw"
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "NDI3MDYxMzQ1LjQ2OFqgDzANMAsGA1UdFAQEBAQEBDAJBgcqhkjOOAQD"
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "AzAAMC0CFQCk0t0DTyu82QpajbBlxX9uXvUDSgIUSBN4g+xTEeexs/0k"
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + "9AkjBhjF0Es=";
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // has stub implementation for abstract methods
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static class MyX509Certificate extends X509Certificate implements
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            X509Extension {
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private static final long serialVersionUID = -7196694072296607007L;
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkValidity() {
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkValidity(Date date) {
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public int getVersion() {
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return 3;
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public BigInteger getSerialNumber() {
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Principal getIssuerDN() {
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Principal getSubjectDN() {
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Date getNotBefore() {
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Date getNotAfter() {
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public byte[] getTBSCertificate() {
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public byte[] getSignature() {
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getSigAlgName() {
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getSigAlgOID() {
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public byte[] getSigAlgParams() {
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean[] getIssuerUniqueID() {
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean[] getSubjectUniqueID() {
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean[] getKeyUsage() {
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public int getBasicConstraints() {
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return 0;
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void verify(PublicKey key) {
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void verify(PublicKey key, String sigProvider) {
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String toString() {
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return "";
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public PublicKey getPublicKey() {
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public byte[] getEncoded() {
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Set<String> getNonCriticalExtensionOIDs() {
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Set<String> getCriticalExtensionOIDs() {
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public byte[] getExtensionValue(String oid) {
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean hasUnsupportedCriticalExtension() {
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.cert.X509Certificate#getType()
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getType",
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetType() {
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("X.509", new MyX509Certificate().getType());
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.cert.X509Certificate#getIssuerX500Principal()
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getIssuerX500Principal",
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetIssuerX500Principal() {
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // return valid encoding
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyX509Certificate cert = new MyX509Certificate() {
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            private static final long serialVersionUID = 638659908323741165L;
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public byte[] getEncoded() {
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return TestUtils.getX509Certificate_v1();
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        };
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(new X500Principal("CN=Z"), cert.getIssuerX500Principal());
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.cert.X509Certificate#getSubjectX500Principal()
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getSubjectX500Principal",
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetSubjectX500Principal() {
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // return valid encoding
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyX509Certificate cert = new MyX509Certificate() {
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            private static final long serialVersionUID = -3625913637413840694L;
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public byte[] getEncoded() {
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return TestUtils.getX509Certificate_v1();
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        };
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(new X500Principal("CN=Y"), cert.getSubjectX500Principal());
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CertificateException
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.cert.X509Certificate#getExtendedKeyUsage()
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify CertificateParsingException.",
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getExtendedKeyUsage",
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetExtendedKeyUsage() throws CertificateException {
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(new MyX509Certificate().getExtendedKeyUsage());
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        List<String> l = cert.getExtendedKeyUsage();
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull(l);
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            l.clear();
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            l.add("Test");
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (l.size() > 0) {
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                l.remove(0);
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.cert.X509Certificate#getSubjectAlternativeNames()
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getSubjectAlternativeNames",
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetSubjectAlternativeNames()
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws CertificateParsingException {
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(new MyX509Certificate().getSubjectAlternativeNames());
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Collection<List<?>> coll = cert.getSubjectAlternativeNames();
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //getSubjectAlternativeNames method is not supported
5082f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        assertNotNull(coll);
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            coll.clear();
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (coll.size() > 0) {
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                coll.remove(0);
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(coll.size() < 10);
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.cert.X509Certificate#getIssuerAlternativeNames()
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify CertificateParsingException.",
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getIssuerAlternativeNames",
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testGetIssuerAlternativeNames()
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws CertificateParsingException {
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(new MyX509Certificate().getIssuerAlternativeNames());
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Collection<List<?>> coll = cert.getIssuerAlternativeNames();
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // getIssuerAlternativeNames returns null.
5442f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        assertNotNull(coll);
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            coll.clear();
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (coll.size() > 0) {
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                coll.remove(0);
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(coll.size() < 10);
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            clazz = CertificateException.class,
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "CertificateException",
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testCerficateException() {
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            CertificateFactory cf = CertificateFactory.getInstance("X.509");
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ByteArrayInputStream bais = new ByteArrayInputStream(
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    base64certTampered.getBytes());
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            cert = (X509Certificate) cf.generateCertificate(bais);
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (CertificateException e) {
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            CertificateFactory cf = CertificateFactory.getInstance("X.509");
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ByteArrayInputStream bais = new ByteArrayInputStream(base64cert
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getBytes());
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            cert = (X509Certificate) cf.generateCertificate(bais);
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (CertificateException e) {
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setUp() throws Exception {
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.setUp();
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CertificateFactory cf = CertificateFactory.getInstance("X.509");
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream bais = new ByteArrayInputStream(base64certCorrect
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getBytes());
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        cert = (X509Certificate) cf.generateCertificate(bais);
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull(cert);
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
599