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 Project/**
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @author Vladimir N. Molotkov
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @version $Revision$
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.security.cert;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.AndroidOnly;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.KnownFailure;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayInputStream;
372f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Projectimport java.io.IOException;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectStreamException;
392f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Projectimport java.security.InvalidAlgorithmParameterException;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.InvalidKeyException;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.NoSuchAlgorithmException;
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.NoSuchProviderException;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Provider;
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.PublicKey;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Security;
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.SignatureException;
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.Certificate;
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertificateEncodingException;
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertificateException;
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertificateFactory;
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays;
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.tests.support.cert.MyCertificate;
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.tests.support.cert.MyFailingCertificate;
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.tests.support.cert.TestUtils;
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.testframework.serialization.SerializationTest;
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Tests for <code>Certificate</code> fields and methods
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(Certificate.class)
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class CertificateTest extends TestCase {
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Meaningless cert encoding just for testing purposes
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static final byte[] testEncoding = new byte[] { (byte) 1, (byte) 2,
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            (byte) 3, (byte) 4, (byte) 5 };
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // Tests
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for <code>Certificate(String type)</code> method<br>
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Certificate",
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testCertificate() {
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(Arrays.equals(testEncoding, c1.getEncoded()));
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("TEST", c1.getPublicKey().getAlgorithm());
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(Arrays.equals(
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    new byte[] { (byte) 1, (byte) 2, (byte) 3 }, c1
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            .getPublicKey().getEncoded()));
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("TEST_FORMAT", c1.getPublicKey().getFormat());
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("TEST_TYPE", c1.getType());
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (CertificateEncodingException e) {
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected CertificateEncodingException " + e.getMessage());
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for <code>hashCode()</code> method<br>
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: returns hash of the <code>Certificate</code> instance
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CertificateEncodingException
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "hashCode",
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testHashCode() throws CertificateEncodingException {
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c2 = new MyCertificate("TEST_TYPE", testEncoding);
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(c1.hashCode() == c2.hashCode());
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(c1.hashCode() == new MyCertificate("TEST_TYPE", cert
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getEncoded()).hashCode());
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(c1.hashCode() == cert.hashCode());
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for <code>hashCode()</code> method<br>
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: hash code of equal objects should be the same
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "hashCode",
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testHashCodeEqualsObject() {
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c2 = new MyCertificate("TEST_TYPE", testEncoding);
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue((c1.hashCode() == c2.hashCode()) && c1.equals(c2));
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(cert.equals(c1));
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for <code>getType()</code> method<br>
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: returns this certificate type
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getType",
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testGetType() {
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("TEST_TYPE", c1.getType());
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #1 for <code>equals(Object)</code> method<br>
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: object equals to itself
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies positive case.",
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "equals",
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Object.class}
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEqualsObject01() {
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(c1.equals(c1));
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for <code>equals(Object)</code> method<br>
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: object equals to other <code>Certificate</code>
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instance with the same state
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies positive case.",
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "equals",
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Object.class}
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEqualsObject02() {
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c2 = new MyCertificate("TEST_TYPE", testEncoding);
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(c1.equals(c2) && c2.equals(c1));
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for <code>equals(Object)</code> method<br>
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: object not equals to <code>null</code>
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies equals method with null as a parameter.",
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "equals",
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Object.class}
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEqualsObject03() {
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(c1.equals(null));
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for <code>equals(Object)</code> method<br>
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: object not equals to other which is not
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instance of <code>Certificate</code>
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies negative case.",
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "equals",
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Object.class}
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEqualsObject04() {
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(c1.equals("TEST_TYPE"));
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // the following tests just call methods
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // that are abstract in <code>Certificate</code>
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // (So they just like signature tests)
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This test just calls <code>getEncoded()</code> method<br>
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CertificateException
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Can not verify CertificateEncodingException. indirectly tested",
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getEncoded",
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @KnownFailure("Assertion does not evaluate to true... Works in javax.Certificate")
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testGetEncoded() throws CertificateException {
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull(c1.getEncoded());
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(Arrays.equals(TestUtils.rootCert.getBytes(),cert.getEncoded()));
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2582f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        byte[] b = TestUtils.rootCert.getBytes();
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b[4] = (byte) 200;
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CertificateFactory cf = CertificateFactory.getInstance("X.509");
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream stream = new ByteArrayInputStream(b);
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        cert = cf.generateCertificate(stream);
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (CertificateException e) {
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //ok
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This test just calls <code>verify(PublicKey)</code> method<br>
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws InvalidKeyException
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CertificateException
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchAlgorithmException
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchProviderException
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SignatureException
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies only null as a parameter.",
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "verify",
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.PublicKey.class}
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testVerifyPublicKey()
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throws InvalidKeyException,
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project               CertificateException,
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project               NoSuchAlgorithmException,
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project               NoSuchProviderException,
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project               SignatureException {
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c1.verify(null);
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This test just calls <code>verify(PublicKey,String)</code> method<br>
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws InvalidKeyException
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CertificateException
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchAlgorithmException
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchProviderException
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SignatureException
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies only null as parameters.",
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "verify",
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.PublicKey.class, java.lang.String.class}
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testVerifyPublicKeyString()
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throws InvalidKeyException,
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project               CertificateException,
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project               NoSuchAlgorithmException,
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project               NoSuchProviderException,
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project               SignatureException {
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c1.verify(null, null);
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This test just calls <code>toString()</code> method<br>
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "toString",
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testToString() {
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c1.toString();
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This test just calls <code>testGetPublicKey()</code> method<br>
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getPublicKey",
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testGetPublicKey() {
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c1.getPublicKey();
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This test just calls <code>writeReplace()</code> method<br>
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify ObjectStreamException.",
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "writeReplace",
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testWriteReplace() {
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyCertificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Object obj = c1.writeReplace();
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(obj.toString().contains(
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "java.security.cert.Certificate$CertificateRep"));
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (ObjectStreamException e) {
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected ObjectStreamException " + e.getMessage());
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class MyModifiablePublicKey implements PublicKey {
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private PublicKey key;
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private boolean modifiedAlgo;
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private String algo;
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private String format;
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private boolean modifiedFormat;
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private boolean modifiedEncoding;
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private byte[] encoding;
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MyModifiablePublicKey(PublicKey k) {
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super();
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            this.key = k;
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getAlgorithm() {
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (modifiedAlgo) {
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return algo;
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return key.getAlgorithm();
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getFormat() {
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (modifiedFormat) {
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return this.format;
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return key.getFormat();
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public byte[] getEncoded() {
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (modifiedEncoding) {
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return this.encoding;
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return key.getEncoded();
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public long getSerVerUID() {
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return key.serialVersionUID;
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setAlgorithm(String myAlgo) {
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            modifiedAlgo = true;
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            this.algo = myAlgo;
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setFormat(String myFormat) {
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            modifiedFormat = true;
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            format = myFormat;
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setEncoding(byte[] myEncoded) {
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            modifiedEncoding = true;
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            encoding = myEncoded;
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private Certificate cert;
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private Provider wrongProvider;
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private Provider useFulProvider;
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setUp() throws Exception {
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.setUp();
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestUtils.initCertPathSSCertChain();
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        cert = TestUtils.rootCertificateSS;
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CertificateFactory cf = CertificateFactory.getInstance("X.509");
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        wrongProvider = cf.getProvider();
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        useFulProvider = Security.getProviders("Signature.sha1WithRSAEncryption")[0];
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This test just calls <code>verify(PublicKey,String)</code> method<br>
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws InvalidKeyException
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CertificateException
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchAlgorithmException
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchProviderException
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SignatureException
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Test fails: ClassCastException when SignatureException is expected",
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "verify",
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.PublicKey.class, java.lang.String.class}
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testVerifyPublicKeyString2() throws InvalidKeyException,
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            CertificateException, NoSuchAlgorithmException,
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            NoSuchProviderException, SignatureException {
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // real test
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        cert.verify(cert.getPublicKey(), useFulProvider.getName());
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Exception tests
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            cert.verify(cert.getPublicKey(), "UnknownProvider");
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NoSuchProviderException e) {
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4882f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        // This test has side effects affecting all other tests running later
4892f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        // on in the same vm instance. Maybe a better way would be to first add
4902f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        // a new provider, test if it works, then remove it and test if the
4912f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        // exception is thrown.
4922f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        //
4932f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        // Security.removeProvider(wrongProvider.getName());
4942f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        //
4952f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        // try {
4962f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        //     cert.verify(cert.getPublicKey(), wrongProvider.getName());
4972f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        // } catch (NoSuchAlgorithmException e) {
4982f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        //     // ok
4992f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        // }
5002f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        //
5012f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        // Security.insertProviderAt(wrongProvider, oldPosition);
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        PublicKey k = cert.getPublicKey();
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyModifiablePublicKey tamperedKey = new MyModifiablePublicKey(k);
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        tamperedKey.setAlgorithm("wrongAlgo");
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            cert.verify(tamperedKey, provs[0].getName());
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SignatureException e) {
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            cert.verify(c1.getPublicKey(), provs[0].getName());
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (InvalidKeyException e) {
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        */
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This test just calls <code>verify(PublicKey)</code> method<br>
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws InvalidKeyException
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws CertificateException
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchAlgorithmException
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NoSuchProviderException
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SignatureException
5302f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project     * @throws IOException
5312f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project     * @throws InvalidAlgorithmParameterException
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
5352f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        notes = "Can't test exception for cases where the algorithm is unknown",
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "verify",
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.PublicKey.class}
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testVerifyPublicKey2() throws InvalidKeyException,
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            CertificateException, NoSuchAlgorithmException,
5432f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project            NoSuchProviderException, SignatureException, InvalidAlgorithmParameterException, IOException {
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Certificate c1 = new MyCertificate("TEST_TYPE", testEncoding);
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c1.verify(null);
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        cert.verify(cert.getPublicKey());
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        PublicKey k = cert.getPublicKey();
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyModifiablePublicKey changedEncoding = new MyModifiablePublicKey(k);
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        changedEncoding
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .setEncoding(new byte[cert.getEncoded().length - 1]);
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            cert.verify(c1.getPublicKey());
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("expected InvalidKeyException");
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (InvalidKeyException e) {
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            cert.verify(changedEncoding);
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Exception expected");
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ok
5682f099e24f514429c5c4d7d1502e32add5ad50ac6The Android Open Source Project        }
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This test just calls <code>writeReplace()</code> method<br>
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "writeReplace",
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testWriteReplace2() {
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyCertificate c1 = new MyFailingCertificate("TEST_TYPE", testEncoding);
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Object obj = c1.writeReplace();
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (ObjectStreamException e) {
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //ok
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests serialization/deserialization compatibility.
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies serialization/deserialization compatibility. And tests default constructor",
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "!SerializationSelf",
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "writeReplace",
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "Certificate.CertificateRep.readResolve",
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSerializationSelf() throws Exception {
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestUtils.initCertPathSSCertChain();
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SerializationTest.verifySelf(TestUtils.rootCertificateSS);
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests serialization/deserialization compatibility with RI.
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies serialization/deserialization compatibility.",
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "!SerializationGolden",
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "writeReplace",
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "Certificate.CertificateRep.readResolve",
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("Gets security providers with specific signature algorithm: " +
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            "Security.getProviders(\"Signature.sha1WithRSAEncryption\")")
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void testSerializationCompatibility() throws Exception {
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //create test file (once)
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        SerializationTest.createGoldenFile("device/dalvik/libcore/security/src/test/resources/serialization", this, TestUtils.rootCertificateSS);
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        TestUtils.initCertPathSSCertChain();
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SerializationTest.verifyGolden(this, TestUtils.rootCertificateSS);
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
656