X509CertSelectorTest.java revision adc854b798c1cfe3bfd4c27d68d5cee38ca617da
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.security.cert;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.BrokenTest;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.KnownFailure;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestLevel;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargetNew;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargetClass;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidAlgorithmParameterException;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Principal;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.PublicKey;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SignatureException;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPath;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPathBuilder;
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPathBuilderException;
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertStore;
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateEncodingException;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateException;
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateExpiredException;
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateFactory;
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateNotYetValidException;
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateParsingException;
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CollectionCertStoreParameters;
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.PKIXBuilderParameters;
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.PKIXCertPathBuilderResult;
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.TrustAnchor;
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.X509CRL;
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.X509CertSelector;
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.X509Certificate;
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ArrayList;
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays;
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Calendar;
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection;
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collections;
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Date;
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashSet;
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Iterator;
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List;
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set;
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.auth.x500.X500Principal;
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.provider.cert.X509CertImpl;
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.cert.MyCRL;
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.cert.TestUtils;
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.TestKeyPair;
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Boolean;
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Integer;
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1OctetString;
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Oid;
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Sequence;
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Type;
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x501.Name;
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.CertificatePolicies;
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.GeneralName;
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.GeneralNames;
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.GeneralSubtree;
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.GeneralSubtrees;
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.NameConstraints;
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.ORAddress;
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.OtherName;
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.PolicyInformation;
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x509.PrivateKeyUsagePeriod;
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * X509CertSelectorTest
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project@TestTargetClass(X509CertSelector.class)
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class X509CertSelectorTest extends TestCase {
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addSubjectAlternativeName(int, byte[])
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.PARTIAL,
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "IOException checking missed",
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addSubjectAlternativeName",
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, byte[].class}
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addSubjectAlternativeNameLintLbyte_array() throws IOException {
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression for HARMONY-2487
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] types = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < types.length; i++) {
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new X509CertSelector().addSubjectAlternativeName(types[i],
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        (byte[]) null);
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("No expected NullPointerException for type: " + i);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NullPointerException e) {
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addSubjectAlternativeName(int, String)
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.PARTIAL,
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "Verifies IOException.",
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addSubjectAlternativeName",
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, java.lang.String.class}
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addSubjectAlternativeNameLintLjava_lang_String() {
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression for HARMONY-727
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] types = { 0, 2, 3, 4, 5, 6, 7, 8 };
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < types.length; i++) {
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new X509CertSelector().addSubjectAlternativeName(types[i],
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "0xDFRF");
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IOException expected");
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IOException e) {
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addPathToName(int, byte[])
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.PARTIAL,
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "Verifies NullPointerException.",
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addPathToName",
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, byte[].class}
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addPathToNameLintLbyte_array() throws IOException {
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression for HARMONY-2487
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] types = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < types.length; i++) {
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new X509CertSelector().addPathToName(types[i], (byte[]) null);
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("No expected NullPointerException for type: " + i);
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NullPointerException e) {
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addPathToName(int, String)
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.PARTIAL,
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "Verifies IOException.",
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addPathToName",
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, java.lang.String.class}
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addPathToNameLintLjava_lang_String() {
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression for HARMONY-724
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int type = 0; type <= 8; type++) {
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new X509CertSelector().addPathToName(type, (String) null);
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IOException expected!");
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IOException ioe) {
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // expected
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#X509CertSelector()
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "X509CertSelector",
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_X509CertSelector() {
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = null;
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector = new X509CertSelector();
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception " + e.getMessage());
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(-1, selector.getBasicConstraints());
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.getMatchAllSubjectAltNames());
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#clone()
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "clone",
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_clone() throws Exception {
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector1 = (X509CertSelector) selector.clone();
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getMatchAllSubjectAltNames(), selector1
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getMatchAllSubjectAltNames());
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getAuthorityKeyIdentifier(), selector1
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getAuthorityKeyIdentifier());
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getBasicConstraints(), selector1
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getBasicConstraints());
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getCertificate(), selector1.getCertificate());
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getCertificateValid(), selector1
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getCertificateValid());
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getExtendedKeyUsage(), selector1
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getExtendedKeyUsage());
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getIssuer(), selector1.getIssuer());
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getIssuerAsBytes(), selector1.getIssuerAsBytes());
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getIssuerAsString(), selector1
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getIssuerAsString());
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getKeyUsage(), selector1.getKeyUsage());
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getNameConstraints(), selector1
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getNameConstraints());
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getPathToNames(), selector1.getPathToNames());
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getPolicy(), selector1.getPolicy());
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getPrivateKeyValid(), selector1
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getPrivateKeyValid());
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getSerialNumber(), selector1.getSerialNumber());
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getSubject(), selector1.getSubject());
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getSubjectAlternativeNames(), selector1
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectAlternativeNames());
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getSubjectAsBytes(), selector1
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectAsBytes());
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getSubjectAsString(), selector1
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectAsString());
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getSubjectKeyIdentifier(), selector1
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectKeyIdentifier());
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getSubjectPublicKey(), selector1
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectPublicKey());
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getSubjectPublicKeyAlgID(), selector1
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectPublicKeyAlgID());
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector = null;
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.clone();
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getAuthorityKeyIdentifier()
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getAuthorityKeyIdentifier",
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getAuthorityKeyIdentifier() {
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] akid1 = new byte[] { 4, 5, 1, 2, 3, 4, 5 }; // random value
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] akid2 = new byte[] { 4, 5, 5, 4, 3, 2, 1 }; // random value
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getAuthorityKeyIdentifier());
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(akid1);
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned keyID should be equal to specified", Arrays
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(akid1, selector.getAuthorityKeyIdentifier()));
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned keyID should be equal to specified", Arrays
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(akid1, selector.getAuthorityKeyIdentifier()));
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned keyID should differ", Arrays.equals(akid2,
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.getAuthorityKeyIdentifier()));
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getBasicConstraints()
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getBasicConstraints",
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getBasicConstraints() {
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] validValues = { 2, 1, 0, 1, 2, 3, 10, 20 };
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setBasicConstraints(validValues[i]);
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(validValues[i], selector.getBasicConstraints());
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getCertificate()
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getCertificate",
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getCertificate() throws CertificateException {
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory certFact = CertificateFactory.getInstance("X509");
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509Certificate cert1 = (X509Certificate) certFact
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .generateCertificate(new ByteArrayInputStream(TestUtils
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getX509Certificate_v3()));
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509Certificate cert2 = (X509Certificate) certFact
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .generateCertificate(new ByteArrayInputStream(TestUtils
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getX509Certificate_v1()));
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert1);
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(cert1, selector.getCertificate());
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert2);
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(cert2, selector.getCertificate());
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(null);
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getCertificate());
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getCertificateValid()
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getCertificateValid",
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getCertificateValid() {
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100);
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200);
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date3 = Calendar.getInstance().getTime();
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getCertificateValid());
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(date1);
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned date should be equal to specified", date1
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getCertificateValid()));
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.getCertificateValid().setTime(200);
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned date should be equal to specified", date1
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getCertificateValid()));
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned date should differ", date2.equals(selector
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getCertificateValid()));
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(date3);
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned date should be equal to specified", date3
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getCertificateValid()));
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(null);
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getCertificateValid());
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getExtendedKeyUsage()
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getExtendedKeyUsage",
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getExtendedKeyUsage() {
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> ku = new HashSet<String>(Arrays
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .asList(new String[] { "1.3.6.1.5.5.7.3.1",
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.2", "1.3.6.1.5.5.7.3.3",
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.4", "1.3.6.1.5.5.7.3.8",
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.9", "1.3.6.1.5.5.7.3.5",
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.6", "1.3.6.1.5.5.7.3.7" }));
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getExtendedKeyUsage());
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setExtendedKeyUsage(ku);
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "The returned extendedKeyUsage should be equal to specified",
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ku.equals(selector.getExtendedKeyUsage()));
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.getExtendedKeyUsage().add("KRIBLEGRABLI");
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("The returned Set should be immutable.");
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedOperationException e) {
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getIssuer()
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getIssuer",
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getIssuer() {
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal("O=First Org.");
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal("O=Second Org.");
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getIssuer());
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer(iss1);
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned issuer should be equal to specified", iss1,
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.getIssuer());
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned issuer should differ", iss2.equals(selector
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getIssuer()));
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getIssuerAsBytes()
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getIssuerAsBytes",
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getIssuerAsBytes() {
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                116, 32, 79, 114, 103, 46 };
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                110, 100, 32, 79, 114, 103, 46 };
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal(name1);
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal(name2);
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("Selector should return null", selector
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getIssuerAsBytes());
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer(iss1);
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("The returned issuer should be equal to specified",
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Arrays.equals(name1, selector.getIssuerAsBytes()));
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertFalse("The returned issuer should differ", name2
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .equals(selector.getIssuerAsBytes()));
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer(iss2);
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("The returned issuer should be equal to specified",
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Arrays.equals(name2, selector.getIssuerAsBytes()));
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getIssuerAsString()
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getIssuerAsString",
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getIssuerAsString() {
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name1 = "O=First Org.";
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name2 = "O=Second Org.";
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal(name1);
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal(name2);
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getIssuerAsString());
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer(iss1);
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned issuer should be equal to specified", name1,
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.getIssuerAsString());
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned issuer should differ", name2.equals(selector
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getIssuerAsString()));
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer(iss2);
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned issuer should be equal to specified", name2,
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.getIssuerAsString());
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getKeyUsage()
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getKeyUsage",
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getKeyUsage() {
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean[] ku = new boolean[] { true, false, true, false, true, false,
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                true, false, true };
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getKeyUsage());
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setKeyUsage(ku);
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned date should be equal to specified", Arrays
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(ku, selector.getKeyUsage()));
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean[] result = selector.getKeyUsage();
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result[0] = !result[0];
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned keyUsage should be equal to specified", Arrays
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(ku, selector.getKeyUsage()));
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getMatchAllSubjectAltNames()
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getMatchAllSubjectAltNames",
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getMatchAllSubjectAltNames() {
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The matchAllNames initially should be true", selector
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getMatchAllSubjectAltNames());
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setMatchAllSubjectAltNames(false);
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The value should be false", selector
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getMatchAllSubjectAltNames());
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getNameConstraints()
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getNameConstraints",
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getNameConstraints() throws IOException {
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName[] name_constraints = new GeneralName[] {
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(1, "822.Name"),
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(1, "rfc@822.Name"),
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(2, "Name.org"),
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(2, "dNS.Name.org"),
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(6, "http://Resource.Id"),
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(6, "http://uniform.Resource.Id"),
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(7, "1.1.1.1"),
555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        1, 1, 1, 1, 1 }), };
558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < name_constraints.length; i++) {
562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralSubtree subtree = new GeneralSubtree(name_constraints[i]);
563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralSubtrees subtrees = new GeneralSubtrees();
564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            subtrees.addSubtree(subtree);
565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NameConstraints constraints = new NameConstraints(subtrees,
566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    subtrees);
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setNameConstraints(constraints.getEncoded());
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(Arrays.equals(constraints.getEncoded(), selector
569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getNameConstraints()));
570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getPathToNames()
575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getPathToNames",
580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getPathToNames() {
583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san0 = new GeneralName(new OtherName("1.2.3.4.5",
585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new byte[] { 1, 2, 0, 1 }));
586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san1 = new GeneralName(1, "rfc@822.Name");
587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san2 = new GeneralName(2, "dNSName");
588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san3 = new GeneralName(new ORAddress());
589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san4 = new GeneralName(new Name("O=Organization"));
590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san6 = new GeneralName(6, "http://uniform.Resource.Id");
591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san7 = new GeneralName(7, "1.1.1.1");
592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san8 = new GeneralName(8, "1.2.3.4444.55555");
593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans1 = new GeneralNames();
595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san0);
596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san1);
597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san2);
598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san3);
599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san4);
600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san6);
601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san7);
602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san8);
603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans2 = new GeneralNames();
604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans2.addName(san0);
605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert1 = new TestCert(sans1);
607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert2 = new TestCert(sans2);
608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509CertSelector selector = new X509CertSelector();
609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setMatchAllSubjectAltNames(true);
610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setPathToNames(null);
612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Any certificate should match in the case of null "
613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + "subjectAlternativeNames criteria.", selector
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .match(cert1)
615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && selector.match(cert2));
616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<List<?>> sans = sans1.getPairsList();
618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setPathToNames(sans);
620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<List<?>> col = selector.getPathToNames();
622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Iterator<List<?>> i = col.iterator();
623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            while (i.hasNext()) {
624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Object o = i.next();
625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (!(o instanceof List)) {
626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("expected a List");
627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getPolicy()
638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getPolicy",
643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getPolicy() throws IOException {
646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] policies1 = new String[] { "1.3.6.1.5.5.7.3.1",
647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.2", "1.3.6.1.5.5.7.3.3", "1.3.6.1.5.5.7.3.4",
648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.8", "1.3.6.1.5.5.7.3.9", "1.3.6.1.5.5.7.3.5",
649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.6", "1.3.6.1.5.5.7.3.7" };
650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] policies2 = new String[] { "1.3.6.7.3.1" };
652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p1 = new HashSet<String>(Arrays.asList(policies1));
654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p2 = new HashSet<String>(Arrays.asList(policies2));
655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(null);
659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getPolicy());
660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p1);
662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned date should be equal to specified", p1, selector.getPolicy());
663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p2);
665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned date should be equal to specified", p2, selector.getPolicy());
666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getPrivateKeyValid()
670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getPrivateKeyValid",
675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getPrivateKeyValid() {
678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100);
679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200);
680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getPrivateKeyValid());
683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(date1);
684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned date should be equal to specified", date1
685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getPrivateKeyValid()));
686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.getPrivateKeyValid().setTime(200);
687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned date should be equal to specified", date1
688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getPrivateKeyValid()));
689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned date should differ", date2.equals(selector
690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getPrivateKeyValid()));
691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSerialNumber()
695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSerialNumber",
700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSerialNumber() {
703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser1 = new BigInteger("10000");
704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser2 = new BigInteger("10001");
705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getSerialNumber());
708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(ser1);
709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned serial number should be equal to specified",
710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ser1, selector.getSerialNumber());
711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned serial number should differ", ser2
712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getSerialNumber()));
713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubject()
717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubject",
722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubject() {
725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal("O=First Org.");
726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal("O=Second Org.");
727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getSubject());
730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub1);
731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned subject should be equal to specified", sub1,
732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.getSubject());
733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned subject should differ", sub2.equals(selector
734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubject()));
735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectAlternativeNames()
739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectAlternativeNames",
744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectAlternativeNames() {
747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san1 = new GeneralName(1, "rfc@822.Name");
749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san2 = new GeneralName(2, "dNSName");
750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans = new GeneralNames();
752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans.addName(san1);
753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans.addName(san2);
754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert_1 = new TestCert(sans);
756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509CertSelector selector = new X509CertSelector();
757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("Selector should return null", selector
759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getSubjectAlternativeNames());
760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectAlternativeNames(sans.getPairsList());
762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("The certificate should match the selection criteria.",
763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    selector.match(cert_1));
764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.getSubjectAlternativeNames().clear();
765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("The modification of initialization object "
766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + "should not affect the modification "
767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + "of internal object.", selector.match(cert_1));
768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectAsBytes()
776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectAsBytes",
781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectAsBytes() {
784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                116, 32, 79, 114, 103, 46 };
788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                110, 100, 32, 79, 114, 103, 46 };
792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("Selector should return null", selector
799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getSubjectAsBytes());
800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(sub1);
801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("The returned issuer should be equal to specified",
802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Arrays.equals(name1, selector.getSubjectAsBytes()));
803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertFalse("The returned issuer should differ", name2
804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .equals(selector.getSubjectAsBytes()));
805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(sub2);
806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("The returned issuer should be equal to specified",
807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Arrays.equals(name2, selector.getSubjectAsBytes()));
808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectAsString()
815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectAsString",
820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectAsString() {
823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name1 = "O=First Org.";
824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name2 = "O=Second Org.";
825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getSubjectAsString());
830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub1);
831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned subject should be equal to specified",
832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                name1, selector.getSubjectAsString());
833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned subject should differ", name2.equals(selector
834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectAsString()));
835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub2);
836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned subject should be equal to specified",
837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                name2, selector.getSubjectAsString());
838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectKeyIdentifier()
842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectKeyIdentifier",
847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectKeyIdentifier() {
850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid1 = new byte[] { 1, 2, 3, 4, 5 }; // random value
851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid2 = new byte[] { 4, 5, 5, 4, 3, 2, 1 }; // random value
852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector
855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectKeyIdentifier());
856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(skid1);
857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned keyID should be equal to specified", Arrays
858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(skid1, selector.getSubjectKeyIdentifier()));
859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.getSubjectKeyIdentifier()[0]++;
860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned keyID should be equal to specified", Arrays
861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(skid1, selector.getSubjectKeyIdentifier()));
862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned keyID should differ", Arrays.equals(skid2,
863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.getSubjectKeyIdentifier()));
864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectPublicKey()
868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectPublicKey",
873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectPublicKey() throws Exception {
876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // SubjectPublicKeyInfo ::= SEQUENCE {
878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // algorithm AlgorithmIdentifier,
879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // subjectPublicKey BIT STRING }
880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] enc = { 0x30, 0x0E, // SEQUENCE
881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x30, 0x07, // SEQUENCE
882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x06, 0x02, 0x03, 0x05,// OID
883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x01, 0x01, 0x07, // ANY
884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x03, 0x03, 0x01, 0x01, 0x06, // subjectPublicKey
885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(enc);
890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey key = selector.getSubjectPublicKey();
891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("0.3.5", key.getAlgorithm());
892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("X.509", key.getFormat());
893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(Arrays.equals(enc, key.getEncoded()));
894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(key.toString());
895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        key = new MyPublicKey();
897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(key);
899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey keyActual = selector.getSubjectPublicKey();
900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(key, keyActual);
901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(key.getAlgorithm(), keyActual.getAlgorithm());
902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectPublicKeyAlgID()
906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectPublicKeyAlgID",
911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectPublicKeyAlgID() {
914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] validOIDs = { "0.0.20", "1.25.0", "2.0.39", "0.2.10", "1.35.15",
917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "2.17.89" };
918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector
920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectPublicKeyAlgID());
921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validOIDs.length; i++) {
923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setSubjectPublicKeyAlgID(validOIDs[i]);
925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertEquals(validOIDs[i], selector.getSubjectPublicKeyAlgID());
926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IOException e) {
927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                System.out.println("t = " + e.getMessage());
928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //fail("Unexpected exception " + e.getMessage());
929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pkaid1 = "1.2.840.113549.1.1.1"; // RSA encryption (source:
933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // http://asn1.elibel.tm.fr)
934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pkaid2 = "1.2.840.113549.1.1.2"; // MD2 with RSA encryption
935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // (source:
936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // http://asn1.elibel.tm.fr)
937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectPublicKeyAlgID(pkaid1);
940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned oid should be equal to specified", pkaid1
944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getSubjectPublicKeyAlgID()));
945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned oid should differ", pkaid2.equals(selector
946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectPublicKeyAlgID()));
947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#match(java.security.cert.Certificate)
951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "match",
956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.security.cert.Certificate.class}
957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_matchLjava_security_cert_Certificate()
959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(null));
962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory certFact = CertificateFactory.getInstance("X509");
964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509Certificate cert1 = (X509Certificate) certFact
965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .generateCertificate(new ByteArrayInputStream(TestUtils
966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getX509Certificate_v3()));
967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509Certificate cert2 = (X509Certificate) certFact
969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .generateCertificate(new ByteArrayInputStream(TestUtils
970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getX509Certificate_v1()));
971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert1);
973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert1));
974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert2));
975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert2);
977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert1));
978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert2));
979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setAuthorityKeyIdentifier(byte[])
983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setAuthorityKeyIdentifier",
988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setAuthorityKeyIdentifierLB$() throws CertificateException {
991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] akid1 = new byte[] { 1, 2, 3, 4, 5 }; // random value
994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] akid2 = new byte[] { 5, 4, 3, 2, 1 }; // random value
995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(akid1);
996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(akid2);
997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(null);
999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getAuthorityKeyIdentifier());
1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(akid1);
1006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should not match the selection criteria.",
1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(akid2);
1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should not match the selection criteria.",
1014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        akid2[0]++;
1017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setBasicConstraints(int)
1023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setBasicConstraints",
1028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class}
1029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setBasicConstraintsLint() {
1031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] invalidValues = { -3, -4, -5, 1000000000 };
1033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
1034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
1035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setBasicConstraints(-3);
1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException expected");
1037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
1038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // expected
1039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] validValues = { -2, -1, 0, 1, 2, 3, 10, 20 };
1043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
1044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setBasicConstraints(validValues[i]);
1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(validValues[i], selector.getBasicConstraints());
1046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setCertificate(java.security.cert.Certificate)
1051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1055adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setCertificate",
1056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.security.cert.X509Certificate.class}
1057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setCertificateLjava_security_cert_X509Certificate()
1059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert("same certificate");
1062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert("other certificate");
1063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(null);
1066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match in the case of null "
1067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "certificateEquals criteria.", selector.match(cert1)
1068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert1);
1070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert2);
1075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(null);
1078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getCertificate());
1079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setCertificateValid(java.util.Date)
1083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setCertificateValid",
1088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Date.class}
1089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setCertificateValidLjava_util_Date()
1091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100);
1095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200);
1096adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(date1);
1097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(date2);
1098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(null);
1100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getCertificateValid());
1101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(date1);
1102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(date2);
1107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        date2.setTime(300);
1108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setExtendedKeyUsage(Set<String>)
1114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setExtendedKeyUsage",
1119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Set.class}
1120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setExtendedKeyUsageLjava_util_Set()
1122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> ku1 = new HashSet<String>(Arrays
1124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .asList(new String[] { "1.3.6.1.5.5.7.3.1",
1125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.2", "1.3.6.1.5.5.7.3.3",
1126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.4", "1.3.6.1.5.5.7.3.8",
1127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.9", "1.3.6.1.5.5.7.3.5",
1128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.6", "1.3.6.1.5.5.7.3.7" }));
1129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> ku2 = new HashSet<String>(Arrays.asList(new String[] {
1130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.1", "1.3.6.1.5.5.7.3.2", "1.3.6.1.5.5.7.3.3",
1131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.4", "1.3.6.1.5.5.7.3.8", "1.3.6.1.5.5.7.3.9",
1132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.5", "1.3.6.1.5.5.7.3.6" }));
1133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(ku1);
1134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(ku2);
1135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setExtendedKeyUsage(null);
1140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "extendedKeyUsage criteria.", selector.match(cert1)
1145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setExtendedKeyUsage(ku1);
1148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(ku1, selector.getExtendedKeyUsage());
1152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setExtendedKeyUsage(ku2);
1155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(ku2, selector.getExtendedKeyUsage());
1159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setIssuer(byte[])
1163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setIssuer",
1168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setIssuerLB$() throws CertificateException {
1171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
1172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
1173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
1174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                116, 32, 79, 114, 103, 46 };
1175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
1176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
1177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
1178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                110, 100, 32, 79, 114, 103, 46 };
1179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal(name1);
1180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal(name2);
1181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(iss1);
1182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(iss2);
1183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer((byte[]) null);
1188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null issuer criteria.", selector.match(cert1)
1193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer(name1);
1196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer(name2);
1205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setIssuer(java.lang.String)
1214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setIssuer",
1219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.lang.String.class}
1220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setIssuerLjava_lang_String() throws CertificateException {
1222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name1 = "O=First Org.";
1224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name2 = "O=Second Org.";
1225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal(name1);
1226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal(name2);
1227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(iss1);
1228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(iss2);
1229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer((String) null);
1234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null issuer criteria.", selector.match(cert1)
1239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer(name1);
1242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer(name2);
1251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setIssuer(javax.security.auth.x500.X500Principal)
1260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setIssuer",
1265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {javax.security.auth.x500.X500Principal.class}
1266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setIssuerLjavax_security_auth_x500_X500Principal()
1268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal("O=First Org.");
1270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal("O=Second Org.");
1271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(iss1);
1272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(iss2);
1273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer((X500Principal) null);
1276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null issuer criteria.", selector.match(cert1)
1278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer(iss1);
1280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer(iss2);
1285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setKeyUsage(boolean)
1291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setKeyUsage",
1296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {boolean[].class}
1297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setKeyUsageZ() throws CertificateException {
1299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean[] ku1 = new boolean[] { true, true, true, true, true, true,
1300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                true, true, true };
1301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // decipherOnly is disallowed
1302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean[] ku2 = new boolean[] { true, true, true, true, true, true,
1303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                true, true, false };
1304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(ku1);
1305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(ku2);
1306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert3 = new TestCert((boolean[]) null);
1307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setKeyUsage(null);
1311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "keyUsage criteria.", selector.match(cert1)
1313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setKeyUsage(ku1);
1315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate which does not have a keyUsage extension "
1320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "implicitly allows all keyUsage values.", selector
1321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .match(cert3));
1322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setKeyUsage(ku2);
1323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ku2[0] = !ku2[0];
1324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setMatchAllSubjectAltNames(boolean)
1330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setMatchAllSubjectAltNames",
1335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {boolean.class}
1336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setMatchAllSubjectAltNamesZ() {
1338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert = new TestCert();
1339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert));
1342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(null));
1344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setNameConstraints(byte[]
1348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        bytes)
1349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setNameConstraints",
1354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setNameConstraintsLB$() throws IOException {
1357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName[] name_constraints = new GeneralName[] {
1358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(1, "822.Name"),
1359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(1, "rfc@822.Name"),
1360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(2, "Name.org"),
1361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(2, "dNS.Name.org"),
1362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(6, "http://Resource.Id"),
1364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(6, "http://uniform.Resource.Id"),
1365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(7, "1.1.1.1"),
1366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new GeneralName(new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        1, 1, 1, 1, 1 }), };
1369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < name_constraints.length; i++) {
1373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralSubtree subtree = new GeneralSubtree(name_constraints[i]);
1374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralSubtrees subtrees = new GeneralSubtrees();
1375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            subtrees.addSubtree(subtree);
1376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NameConstraints constraints = new NameConstraints(subtrees,
1377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    subtrees);
1378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setNameConstraints(constraints.getEncoded());
1379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(Arrays.equals(constraints.getEncoded(), selector
1380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getNameConstraints()));
1381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setPathToNames(Collection<List<?>>)
1386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setPathToNames",
1391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Collection.class}
1392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setPathToNamesLjava_util_Collection() {
1394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san0 = new GeneralName(new OtherName("1.2.3.4.5",
1396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new byte[] { 1, 2, 0, 1 }));
1397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san1 = new GeneralName(1, "rfc@822.Name");
1398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san2 = new GeneralName(2, "dNSName");
1399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san3 = new GeneralName(new ORAddress());
1400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san4 = new GeneralName(new Name("O=Organization"));
1401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san6 = new GeneralName(6, "http://uniform.Resource.Id");
1402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san7 = new GeneralName(7, "1.1.1.1");
1403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san8 = new GeneralName(8, "1.2.3.4444.55555");
1404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans1 = new GeneralNames();
1406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san0);
1407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san1);
1408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san2);
1409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san3);
1410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san4);
1411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san6);
1412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san7);
1413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san8);
1414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans2 = new GeneralNames();
1415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans2.addName(san0);
1416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert1 = new TestCert(sans1);
1418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert2 = new TestCert(sans2);
1419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509CertSelector selector = new X509CertSelector();
1420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setMatchAllSubjectAltNames(true);
1421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setPathToNames(null);
1423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Any certificate should match in the case of null "
1424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + "subjectAlternativeNames criteria.", selector
1425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .match(cert1)
1426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && selector.match(cert2));
1427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<List<?>> sans = sans1.getPairsList();
1429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setPathToNames(sans);
1431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<List<?>> col = selector.getPathToNames();
1433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Iterator<List<?>> i = col.iterator();
1434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            while (i.hasNext()) {
1435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Object o = i.next();
1436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (!(o instanceof List)) {
1437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("expected a List");
1438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
1439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
1443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setPolicy(Set<String>)
1449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setPolicy",
1454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Set.class}
1455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setPolicyLjava_util_Set() throws IOException {
1457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] policies1 = new String[] { "1.3.6.1.5.5.7.3.1",
1458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.2", "1.3.6.1.5.5.7.3.3", "1.3.6.1.5.5.7.3.4",
1459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.8", "1.3.6.1.5.5.7.3.9", "1.3.6.1.5.5.7.3.5",
1460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.6", "1.3.6.1.5.5.7.3.7" };
1461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] policies2 = new String[] { "1.3.6.7.3.1" };
1463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p1 = new HashSet<String>(Arrays.asList(policies1));
1465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p2 = new HashSet<String>(Arrays.asList(policies2));
1466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(policies1);
1470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(policies2);
1471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(null);
1473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "privateKeyValid criteria.", selector.match(cert1)
1475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p1);
1478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p2);
1484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setPrivateKeyValid(java.util.Date)
1492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setPrivateKeyValid",
1497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Date.class}
1498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setPrivateKeyValidLjava_util_Date()
1500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100000000);
1502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200000000);
1503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date3 = new Date(300000000);
1504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date4 = new Date(150000000);
1505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date5 = new Date(250000000);
1506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(date1, date2);
1507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(date2, date3);
1508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(null);
1512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "privateKeyValid criteria.", selector.match(cert1)
1514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(date4);
1516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(date5);
1521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        date5.setTime(date4.getTime());
1522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSerialNumber(java.math.BigInteger)
1528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSerialNumber",
1533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.math.BigInteger.class}
1534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSerialNumberLjava_math_BigInteger()
1536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser1 = new BigInteger("10000");
1538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser2 = new BigInteger("10001");
1539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(ser1);
1540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(ser2);
1541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(null);
1544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "serialNumber criteria.", selector.match(cert1)
1546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(ser1);
1548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(ser2);
1553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubject(byte[])
1559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubject",
1564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectLB$() throws CertificateException {
1567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
1568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
1569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
1570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                116, 32, 79, 114, 103, 46 };
1571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
1572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
1573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
1574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                110, 100, 32, 79, 114, 103, 46 };
1575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
1576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
1577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sub1);
1578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sub2);
1579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject((byte[]) null);
1584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null issuer criteria.", selector.match(cert1)
1589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(name1);
1592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(name2);
1601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubject(java.lang.String)
1610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubject",
1615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.lang.String.class}
1616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectLjava_lang_String() throws CertificateException {
1618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name1 = "O=First Org.";
1619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name2 = "O=Second Org.";
1620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
1621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
1622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sub1);
1623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sub2);
1624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject((String) null);
1628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null subject criteria.", selector
1633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .match(cert1)
1634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(name1);
1637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(name2);
1646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubject(javax.security.auth.x500.X500Principal)
1655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubject",
1660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {javax.security.auth.x500.X500Principal.class}
1661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectLjavax_security_auth_x500_X500Principal()
1663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal("O=First Org.");
1665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal("O=Second Org.");
1666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sub1);
1667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sub2);
1668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject((X500Principal) null);
1671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null subjcet criteria.", selector
1673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .match(cert1)
1674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub1);
1676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub2);
1681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubjectAlternativeNames(Collection<List<?>>)
1687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubjectAlternativeNames",
1692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Collection.class}
1693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectAlternativeNamesLjava_util_Collection() {
1695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san0 = new GeneralName(new OtherName("1.2.3.4.5",
1698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new byte[] { 1, 2, 0, 1 }));
1699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san1 = new GeneralName(1, "rfc@822.Name");
1700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san2 = new GeneralName(2, "dNSName");
1701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san3 = new GeneralName(new ORAddress());
1702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san4 = new GeneralName(new Name("O=Organization"));
1703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san6 = new GeneralName(6, "http://uniform.Resource.Id");
1704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san7 = new GeneralName(7, "1.1.1.1");
1705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san8 = new GeneralName(8, "1.2.3.4444.55555");
1706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans1 = new GeneralNames();
1708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san0);
1709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san1);
1710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san2);
1711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san3);
1712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san4);
1713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san6);
1714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san7);
1715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san8);
1716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans2 = new GeneralNames();
1717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans2.addName(san0);
1718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert1 = new TestCert(sans1);
1720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert2 = new TestCert(sans2);
1721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509CertSelector selector = new X509CertSelector();
1722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setMatchAllSubjectAltNames(true);
1723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectAlternativeNames(null);
1725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Any certificate should match in the case of null "
1726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + "subjectAlternativeNames criteria.", selector
1727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .match(cert1)
1728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && selector.match(cert2));
1729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<List<?>> sans = sans1.getPairsList();
1731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectAlternativeNames(sans);
1733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<List<?>> col = selector.getSubjectAlternativeNames();
1735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Iterator<List<?>> i = col.iterator();
1736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            while (i.hasNext()) {
1737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Object o = i.next();
1738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (!(o instanceof List)) {
1739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("expected a List");
1740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
1741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
1745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubjectKeyIdentifier(byte[])
1751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubjectKeyIdentifier",
1756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectKeyIdentifierLB$() throws CertificateException {
1759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid1 = new byte[] { 1, 2, 3, 4, 5 }; // random value
1760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid2 = new byte[] { 5, 4, 3, 2, 1 }; // random value
1761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(skid1);
1762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(skid2);
1763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(null);
1766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "serialNumber criteria.", selector.match(cert1)
1768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(skid1);
1770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(skid2);
1775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        skid2[0]++;
1776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubjectPublicKey(byte[])
1782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubjectPublicKey",
1787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectPublicKeyLB$() throws Exception {
1790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //SubjectPublicKeyInfo  ::=  SEQUENCE  {
1792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //    algorithm            AlgorithmIdentifier,
1793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //    subjectPublicKey     BIT STRING  }
1794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] enc = { 0x30, 0x0E, // SEQUENCE
1795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x30, 0x07, // SEQUENCE
1796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x06, 0x02, 0x03, 0x05,//OID
1797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x01, 0x01, 0x07, //ANY
1798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x03, 0x03, 0x01, 0x01, 0x06, // subjectPublicKey
1799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
1800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(enc);
1804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey key = selector.getSubjectPublicKey();
1805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("0.3.5", key.getAlgorithm());
1806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("X.509", key.getFormat());
1807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(Arrays.equals(enc, key.getEncoded()));
1808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(key.toString());
1809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubjectPublicKey(java.security.PublicKey key)
1813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubjectPublicKey",
1818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.security.PublicKey.class}
1819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectPublicKeyLjava_security_PublicKey()
1821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey pkey1 = null;
1823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey pkey2 = null;
1824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pkey1 = new TestKeyPair("RSA").getPublic();
1826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pkey2 = new TestKeyPair("DSA").getPublic();
1827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
1828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected Exception was thrown: " + e.getMessage());
1829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(pkey1);
1832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(pkey2);
1833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey((PublicKey) null);
1836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "subjectPublicKey criteria.", selector.match(cert1)
1838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(pkey1);
1840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(pkey2);
1845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubjectPublicKeyAlgID(java.lang.String)
1851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubjectPublicKeyAlgID",
1856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.lang.String.class}
1857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectPublicKeyAlgIDLjava_lang_String()
1859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pkaid1 = "1.2.840.113549.1.1.1"; // RSA (source:
1863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // http://asn1.elibel.tm.fr)
1864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pkaid2 = "1.2.840.10040.4.1"; // DSA (source:
1865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // http://asn1.elibel.tm.fr)
1866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey pkey1;
1867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey pkey2;
1868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pkey1 = new TestKeyPair("RSA").getPublic();
1870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pkey2 = new TestKeyPair("DSA").getPublic();
1871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
1872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
1873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected Exception was thrown: " + e.getMessage());
1874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
1875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(pkey1);
1877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(pkey2);
1878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectPublicKeyAlgID(null);
1881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "subjectPublicKeyAlgID criteria.", selector.match(cert1)
1887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] validOIDs = { "0.0.20", "1.25.0", "2.0.39", "0.2.10", "1.35.15",
1890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "2.17.89", "2.5.29.16", "2.5.29.17", "2.5.29.30", "2.5.29.32",
1891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "2.5.29.37" };
1892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validOIDs.length; i++) {
1894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
1895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setSubjectPublicKeyAlgID(validOIDs[i]);
1896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertEquals(validOIDs[i], selector.getSubjectPublicKeyAlgID());
1897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IOException e) {
1898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Unexpected exception " + e.getMessage());
1899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] invalidOIDs = { "0.20", "1.25", "2.39", "3.10"};
1903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidOIDs.length; i++) {
1904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
1905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setSubjectPublicKeyAlgID(invalidOIDs[i]);
1906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IOException wasn't thrown for " + invalidOIDs[i]);
1907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IOException e) {
1908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectPublicKeyAlgID(pkaid1);
1913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectPublicKeyAlgID(pkaid2);
1922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#toString()
1931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "toString",
1936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
1937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toString() {
1939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(selector.toString());
1941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public class MyPublicKey implements PublicKey {
1944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static final long serialVersionUID = 2899528375354645752L;
1945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public MyPublicKey() {
1947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super();
1948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getAlgorithm() {
1951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return "PublicKey";
1952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getFormat() {
1955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return "Format";
1956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getEncoded() {
1959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new byte[0];
1960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public long getSerVerUID() {
1963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return serialVersionUID;
1964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private class TestCert extends X509Certificate {
1968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static final long serialVersionUID = 176676115254260405L;
1970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /* Stuff fields */
1972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected String equalCriteria = null; // to simplify method equals()
1973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected BigInteger serialNumber = null;
1975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected X500Principal issuer = null;
1977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected X500Principal subject = null;
1979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected byte[] keyIdentifier = null;
1981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Date date = null;
1983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Date notBefore = null;
1985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Date notAfter = null;
1987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected PublicKey key = null;
1989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected boolean[] keyUsage = null;
1991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected List<String> extKeyUsage = null;
1993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected int pathLen = 1;
1995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected GeneralNames sans = null;
1997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected byte[] encoding = null;
1999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected String[] policies = null;
2001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Collection<List<?>> collection = null;
2003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected NameConstraints nameConstraints = null;
2005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /* Stuff methods */
2007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert() {
2008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(GeneralNames sans) {
2011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setSubjectAlternativeNames(sans);
2012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(NameConstraints nameConstraints) {
2015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.nameConstraints = nameConstraints;
2016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Collection<List<?>> collection) {
2019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setCollection(collection);
2020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(String equalCriteria) {
2023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setEqualCriteria(equalCriteria);
2024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(String[] policies) {
2027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setPolicies(policies);
2028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(BigInteger serial) {
2031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setSerialNumber(serial);
2032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(X500Principal principal) {
2035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setIssuer(principal);
2036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setSubject(principal);
2037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(byte[] array) {
2040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setKeyIdentifier(array);
2041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Date date) {
2044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setDate(date);
2045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Date notBefore, Date notAfter) {
2048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setPeriod(notBefore, notAfter);
2049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(PublicKey key) {
2052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setPublicKey(key);
2053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2055adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(boolean[] keyUsage) {
2056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setKeyUsage(keyUsage);
2057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Set<String> extKeyUsage) {
2060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setExtendedKeyUsage(extKeyUsage);
2061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(int pathLen) {
2064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.pathLen = pathLen;
2065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setSubjectAlternativeNames(GeneralNames sans) {
2068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.sans = sans;
2069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setCollection(Collection<List<?>> collection) {
2072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.collection = collection;
2073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setPolicies(String[] policies) {
2076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.policies = policies;
2077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setExtendedKeyUsage(Set<String> extKeyUsage) {
2080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.extKeyUsage = (extKeyUsage == null) ? null : new ArrayList<String>(
2081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    extKeyUsage);
2082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setKeyUsage(boolean[] keyUsage) {
2085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.keyUsage = (keyUsage == null) ? null : (boolean[]) keyUsage
2086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .clone();
2087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setPublicKey(PublicKey key) {
2090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.key = key;
2091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setPeriod(Date notBefore, Date notAfter) {
2094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.notBefore = notBefore;
2095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.notAfter = notAfter;
2096adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setSerialNumber(BigInteger serial) {
2099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.serialNumber = serial;
2100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setEqualCriteria(String equalCriteria) {
2103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.equalCriteria = equalCriteria;
2104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setIssuer(X500Principal issuer) {
2107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.issuer = issuer;
2108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setSubject(X500Principal subject) {
2111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.subject = subject;
2112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setKeyIdentifier(byte[] subjectKeyID) {
2115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.keyIdentifier = (byte[]) subjectKeyID.clone();
2116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setDate(Date date) {
2119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.date = new Date(date.getTime());
2120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setEncoding(byte[] encoding) {
2123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.encoding = encoding;
2124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /* Method implementations */
2127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean equals(Object cert) {
2128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (cert == null) {
2129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return false;
2130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((equalCriteria == null)
2132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    || (((TestCert) cert).equalCriteria == null)) {
2133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return false;
2134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
2135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return equalCriteria.equals(((TestCert) cert).equalCriteria);
2136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String toString() {
2140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (equalCriteria != null) {
2141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return equalCriteria;
2142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return "";
2144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void checkValidity() throws CertificateExpiredException,
2147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateNotYetValidException {
2148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void checkValidity(Date date)
2151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws CertificateExpiredException,
2152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateNotYetValidException {
2153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (this.date == null) {
2154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new CertificateExpiredException();
2155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int result = this.date.compareTo(date);
2157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (result > 0) {
2158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new CertificateExpiredException();
2159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (result < 0) {
2161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new CertificateNotYetValidException();
2162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int getVersion() {
2166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 3;
2167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public BigInteger getSerialNumber() {
2170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return (serialNumber == null) ? new BigInteger("1111")
2171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    : serialNumber;
2172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Principal getIssuerDN() {
2175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return issuer;
2176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public X500Principal getIssuerX500Principal() {
2179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return issuer;
2180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Principal getSubjectDN() {
2183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return subject;
2184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public X500Principal getSubjectX500Principal() {
2187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return subject;
2188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Date getNotBefore() {
2191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Date getNotAfter() {
2195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getTBSCertificate() throws CertificateEncodingException {
2199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getSignature() {
2203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getSigAlgName() {
2207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getSigAlgOID() {
2211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getSigAlgParams() {
2215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean[] getIssuerUniqueID() {
2219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean[] getSubjectUniqueID() {
2223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean[] getKeyUsage() {
2227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return keyUsage;
2228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public List<String> getExtendedKeyUsage()
2231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws CertificateParsingException {
2232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return extKeyUsage;
2233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int getBasicConstraints() {
2236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return pathLen;
2237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void verify(PublicKey key) throws CertificateException,
2240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                NoSuchAlgorithmException, InvalidKeyException,
2241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                NoSuchProviderException, SignatureException {
2242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void verify(PublicKey key, String sigProvider)
2245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws CertificateException, NoSuchAlgorithmException,
2246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                InvalidKeyException, NoSuchProviderException,
2247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SignatureException {
2248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public PublicKey getPublicKey() {
2251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return key;
2252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getEncoded() throws CertificateEncodingException {
2255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return encoding;
2256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Set<String> getNonCriticalExtensionOIDs() {
2259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Set<String> getCriticalExtensionOIDs() {
2263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getExtensionValue(String oid) {
2267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (("2.5.29.14".equals(oid)) || ("2.5.29.35".equals(oid))) {
2269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Extension value is represented as an OctetString
2270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(keyIdentifier);
2271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.16".equals(oid)) {
2273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                PrivateKeyUsagePeriod pkup = new PrivateKeyUsagePeriod(
2274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        notBefore, notAfter);
2275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                byte[] encoded = pkup.getEncoded();
2276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(encoded);
2277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (("2.5.29.37".equals(oid)) && (extKeyUsage != null)) {
2279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ASN1Oid[] oa = new ASN1Oid[extKeyUsage.size()];
2280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String[] val = new String[extKeyUsage.size()];
2281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Iterator it = extKeyUsage.iterator();
2282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                int id = 0;
2283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                while (it.hasNext()) {
2284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    oa[id] = ASN1Oid.getInstanceForString();
2285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    val[id++] = (String) it.next();
2286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
2287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(
2288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        new ASN1Sequence(oa).encode(val));
2289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.19".equals(oid)) {
2291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(
2292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        new ASN1Sequence(new ASN1Type[] {
2293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                ASN1Boolean.getInstance(),
2294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                ASN1Integer.getInstance() })
2295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                .encode(new Object[] {
2296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                        new Boolean(pathLen != 1),
2297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                        BigInteger.valueOf(pathLen)
2298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                                .toByteArray() }));
2299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.17".equals(oid) && (sans != null)) {
2301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (sans.getNames() == null) {
2302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    return null;
2303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
2304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(
2305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        GeneralNames.ASN1.encode(sans));
2306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.32".equals(oid) && (policies != null)
2308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && (policies.length > 0)) {
2309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Certificate Policies Extension (as specified in rfc 3280)
2310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificatePolicies certificatePolicies = new CertificatePolicies();
2311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                for (int i = 0; i < policies.length; i++) {
2312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    PolicyInformation policyInformation = new PolicyInformation(
2313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            policies[i]);
2314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    certificatePolicies.addPolicyInformation(policyInformation);
2315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
2316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(
2317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        certificatePolicies.getEncoded());
2318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.30".equals(oid) && (nameConstraints != null)) { //
2320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Name
2321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Constraints
2322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Extension
2323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // (as
2324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // specified
2325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // in
2326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // rfc
2327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // 3280)
2328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(
2329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        nameConstraints.getEncoded());
2330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean hasUnsupportedCriticalExtension() {
2336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
2337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public X509Certificate rootCertificate;
2342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public X509Certificate endCertificate;
2344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public MyCRL crl;
2346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private X509CertSelector theCertSelector;
2348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private CertPathBuilder builder;
2350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Certificate:
2353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Data:
2354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Version: 3 (0x2)
2355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Serial Number: 0 (0x0)
2356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Signature Algorithm: sha1WithRSAEncryption
2357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Issuer: C=AN, ST=Android, O=Android, OU=Android, CN=Android/emailAddress=android
2358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Validity
2359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Not Before: Dec  9 16:35:30 2008 GMT
2360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Not After : Dec  9 16:35:30 2011 GMT
2361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Subject: C=AN, ST=Android, O=Android, OU=Android, CN=Android/emailAddress=android
2362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Subject Public Key Info:
2363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Public Key Algorithm: rsaEncryption
2364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            RSA Public Key: (1024 bit)
2365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Modulus (1024 bit):
2366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    00:c5:fb:5e:68:37:82:1d:58:ed:cb:31:8c:08:7f:
2367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    51:31:4c:68:40:8c:4d:07:a1:0e:18:36:02:6b:89:
2368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    92:c1:cf:88:1e:cf:00:22:00:8c:37:e8:6a:76:94:
2369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    71:53:81:78:e1:48:94:fa:16:61:93:eb:a0:ee:62:
2370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    9d:6a:d2:2c:b8:77:9d:c9:36:d5:d9:1c:eb:26:3c:
2371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    43:66:4d:7b:1c:1d:c7:a1:37:66:e2:84:54:d3:ed:
2372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    21:dd:01:1c:ec:9b:0c:1e:35:e9:37:15:9d:2b:78:
2373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    a8:3b:11:3a:ee:c2:de:55:44:4c:bd:40:8d:e5:52:
2374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    b0:fc:53:33:73:4a:e5:d0:df
2375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Exponent: 65537 (0x10001)
2376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509v3 extensions:
2377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509v3 Subject Key Identifier:
2378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                4B:E3:22:14:AD:0A:14:46:B7:52:31:8B:AB:9E:5A:62:F3:98:37:80
2379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509v3 Authority Key Identifier:
2380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                keyid:4B:E3:22:14:AD:0A:14:46:B7:52:31:8B:AB:9E:5A:62:F3:98:37:80
2381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                DirName:/C=AN/ST=Android/O=Android/OU=Android/CN=Android/emailAddress=android
2382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                serial:00
2383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509v3 Basic Constraints:
2385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CA:TRUE
2386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Signature Algorithm: sha1WithRSAEncryption
2387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        72:4f:12:8a:4e:61:b2:9a:ba:58:17:0b:55:96:f5:66:1c:a8:
2388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ba:d1:0f:8b:9b:2d:ab:a8:00:ac:7f:99:7d:f6:0f:d7:85:eb:
2389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        75:4b:e5:42:37:71:46:b1:4a:b0:1b:17:e4:f9:7c:9f:bd:20:
2390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        75:35:9f:27:8e:07:95:e8:34:bd:ab:e4:10:5f:a3:7b:4c:56:
2391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        69:d4:d0:f1:e9:74:15:2d:7f:77:f0:38:77:eb:8a:99:f3:a9:
2392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        88:f0:63:58:07:b9:5a:61:f8:ff:11:e7:06:a1:d1:f8:85:fb:
2393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        99:1c:f5:cb:77:86:36:cd:43:37:99:09:c2:9a:d8:f2:28:05:
2394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        06:0c
2395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final String rootCert = "-----BEGIN CERTIFICATE-----\n" +
2398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "MIIDGzCCAoSgAwIBAgIBADANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJBTjEQ\n" +
2399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "MA4GA1UECBMHQW5kcm9pZDEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5k\n" +
2400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "cm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEWMBQGCSqGSIb3DQEJARYHYW5kcm9pZDAe\n" +
2401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "Fw0wODEyMDkxNjM1MzBaFw0xMTEyMDkxNjM1MzBaMG0xCzAJBgNVBAYTAkFOMRAw\n" +
2402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "DgYDVQQIEwdBbmRyb2lkMRAwDgYDVQQKEwdBbmRyb2lkMRAwDgYDVQQLEwdBbmRy\n" +
2403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "b2lkMRAwDgYDVQQDEwdBbmRyb2lkMRYwFAYJKoZIhvcNAQkBFgdhbmRyb2lkMIGf\n" +
2404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDF+15oN4IdWO3LMYwIf1ExTGhAjE0H\n" +
2405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "oQ4YNgJriZLBz4gezwAiAIw36Gp2lHFTgXjhSJT6FmGT66DuYp1q0iy4d53JNtXZ\n" +
2406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "HOsmPENmTXscHcehN2bihFTT7SHdARzsmwweNek3FZ0reKg7ETruwt5VREy9QI3l\n" +
2407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "UrD8UzNzSuXQ3wIDAQABo4HKMIHHMB0GA1UdDgQWBBRL4yIUrQoURrdSMYurnlpi\n" +
2408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "85g3gDCBlwYDVR0jBIGPMIGMgBRL4yIUrQoURrdSMYurnlpi85g3gKFxpG8wbTEL\n" +
2409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "MAkGA1UEBhMCQU4xEDAOBgNVBAgTB0FuZHJvaWQxEDAOBgNVBAoTB0FuZHJvaWQx\n" +
2410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "EDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWQxFjAUBgkqhkiG9w0B\n" +
2411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "CQEWB2FuZHJvaWSCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBy\n" +
2412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "TxKKTmGymrpYFwtVlvVmHKi60Q+Lmy2rqACsf5l99g/Xhet1S+VCN3FGsUqwGxfk\n" +
2413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "+XyfvSB1NZ8njgeV6DS9q+QQX6N7TFZp1NDx6XQVLX938Dh364qZ86mI8GNYB7la\n" +
2414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "Yfj/EecGodH4hfuZHPXLd4Y2zUM3mQnCmtjyKAUGDA==\n" +
2415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    "-----END CERTIFICATE-----";
2416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final String rootPrivateKey =
2418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "-----BEGIN RSA PRIVATE KEY-----\n" +
2419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "Proc-Type: 4,ENCRYPTED\n" +
2420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "DEK-Info: DES-EDE3-CBC,D9682F66FDA316E5\n" +
2421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "\n" +
2422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "8lGaQPlUZ/iHhdldB//xfNUrZ3RAkBthzKg+n9HBJsjztXXAZ40NGYZmgvpgnfmr\n" +
2423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "7ZJxHxYHFc3GAmBBk9v+/dA8E5yWJa71roffWMQUuFNfGzHhGTOxvNC04W7yAajs\n" +
2424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "CPuyI+xnAAo73F7NVTiqX3NVgu4bB8RVxJyToMe4M289oh93YvxWQ4buVTf0ErJ8\n" +
2425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "Yc8+0ugpfXjGfRhL36qj6B1CcV7NMdXAVExrGlTf0TWT9wVbiROk4XaoaFuWh17h\n" +
2426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "11NEDjsKQ8T4M9kRdC+tKfST8sLik1Pq6jRLIKeX8GQd7tV1IWVZ3KcQBJwu9zLq\n" +
2427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "Hi0GTSF7IWCdwXjDyniMQiSbkmHNP+OnVyhaqew5Ooh0uOEQq/KWFewXg7B3VMr0\n" +
2428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "l6U8sBX9ODGeW0wVdNopvl17udCkV0xm3S+MRZDnZiTlAXwKx/a/gyf5R5XYp3S0\n" +
2429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "0eqrfy2o6Ax4hRkwcNJ2KMeLQNIiYYWKABQj5/i4TYZV6npCIXOnQEkXa9DmqyUE\n" +
2430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "qB7eFj5FcXeqQ8ERmsLveWArsLDn2NNPdv5EaKIs2lrvwoKYeYF7hrKNpifq+QqS\n" +
2431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "u1kN+KHjibcF42EAUozNVmkHsW8VqlywAs4MsMwxU0D57cVGWycuSedraKhc0D6j\n" +
2432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "a4pQOWWY3ZMLoAA1ZmHG9cjDPqcJt0rqk5AhSBRmGVUccfkP7dk9KyJQizro87LI\n" +
2433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "u7zWwMIqTfmlhyfAP0AWjrt/bMN9heGByVA55xkyCdSEVaC5gsIfmGpNy4u+wbZ9\n" +
2434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "rSWVuTfAbjW0n0FW+CDS1LgdjXNkeAP2Uvc1QgVRCPdA23WniLFFJQ==\n" +
2435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         "-----END RSA PRIVATE KEY-----";
2436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Certificate:
2439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Data:
2440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Version: 3 (0x2)
2441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Serial Number: 1 (0x1)
2442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Signature Algorithm: sha1WithRSAEncryption
2443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Issuer: C=AN, ST=Android, O=Android, OU=Android, CN=Android/emailAddress=android
2444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Validity
2445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Not Before: Dec  9 16:40:35 2008 GMT
2446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Not After : Dec  9 16:40:35 2009 GMT
2447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Subject: C=AN, ST=Android, L=Android, O=Android, OU=Android, CN=Android Certificate/emailAddress=android
2448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Subject Public Key Info:
2449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Public Key Algorithm: rsaEncryption
2450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            RSA Public Key: (1024 bit)
2451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Modulus (1024 bit):
2452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    00:b8:e3:de:c7:a9:40:47:2c:2a:6f:f5:2a:f4:cd:
2453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    f2:2d:40:fa:15:3f:1c:37:66:73:a5:67:4d:5b:a0:
2454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    b6:b1:dd:dc:bf:01:c7:e2:c1:48:1a:8f:1c:ce:ec:
2455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    b0:a2:55:29:9a:1b:3a:6e:cc:7b:d7:65:ae:0b:05:
2456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    34:03:8a:af:db:f0:dc:01:80:92:03:b4:13:e5:d6:
2457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fd:79:66:7f:c3:1a:62:d5:5e:3d:c0:19:a4:42:15:
2458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    47:19:e6:f0:c8:b7:e2:7b:82:a2:c7:3d:df:ac:8c:
2459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    d5:bc:39:b8:e5:93:ac:3f:af:30:b7:cc:00:a8:00:
2460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    f3:38:23:b0:97:0e:92:b1:1b
2461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Exponent: 65537 (0x10001)
2462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509v3 extensions:
2463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509v3 Basic Constraints:
2464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CA:FALSE
2465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Netscape Comment:
2466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                OpenSSL Generated Certificate
2467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509v3 Subject Key Identifier:
2468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                88:4D:EC:16:26:A7:76:F5:26:43:BC:34:99:DF:D5:EA:7B:F8:5F:DE
2469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509v3 Authority Key Identifier:
2470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                keyid:4B:E3:22:14:AD:0A:14:46:B7:52:31:8B:AB:9E:5A:62:F3:98:37:80
2471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Signature Algorithm: sha1WithRSAEncryption
2473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        55:73:95:e6:4c:40:fc:fd:52:8a:5f:83:15:49:73:ca:f3:d8:
2474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        5f:bb:d6:f5:2e:90:e6:7f:c3:7d:4d:27:d3:45:c6:53:9b:aa:
2475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        e3:32:99:40:b3:a9:d3:14:7d:d5:e6:a7:70:95:30:6e:dc:8c:
2476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        7b:48:e1:98:d1:65:7a:eb:bf:b0:5c:cd:c2:eb:31:5e:b6:e9:
2477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        df:56:95:bc:eb:79:74:27:5b:6d:c8:55:63:09:d3:f9:e2:40:
2478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ba:b4:a2:c7:2c:cb:b1:3a:c2:d8:0c:21:31:ee:68:7e:97:ce:
2479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        98:22:2e:c6:cf:f0:1a:11:04:ca:9a:06:de:98:48:85:ac:6c:
2480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        6f:98
2481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final String  endCert =
2483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "-----BEGIN CERTIFICATE-----\n" +
2484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "MIIC6jCCAlOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJBTjEQ\n" +
2485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "MA4GA1UECBMHQW5kcm9pZDEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5k\n" +
2486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "cm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEWMBQGCSqGSIb3DQEJARYHYW5kcm9pZDAe\n" +
2487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "Fw0wODEyMDkxNjQwMzVaFw0wOTEyMDkxNjQwMzVaMIGLMQswCQYDVQQGEwJBTjEQ\n" +
2488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "MA4GA1UECBMHQW5kcm9pZDEQMA4GA1UEBxMHQW5kcm9pZDEQMA4GA1UEChMHQW5k\n" +
2489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "cm9pZDEQMA4GA1UECxMHQW5kcm9pZDEcMBoGA1UEAxMTQW5kcm9pZCBDZXJ0aWZp\n" +
2490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "Y2F0ZTEWMBQGCSqGSIb3DQEJARYHYW5kcm9pZDCBnzANBgkqhkiG9w0BAQEFAAOB\n" +
2491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "jQAwgYkCgYEAuOPex6lARywqb/Uq9M3yLUD6FT8cN2ZzpWdNW6C2sd3cvwHH4sFI\n" +
2492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "Go8czuywolUpmhs6bsx712WuCwU0A4qv2/DcAYCSA7QT5db9eWZ/wxpi1V49wBmk\n" +
2493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "QhVHGebwyLfie4Kixz3frIzVvDm45ZOsP68wt8wAqADzOCOwlw6SsRsCAwEAAaN7\n" +
2494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQg\n" +
2495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "Q2VydGlmaWNhdGUwHQYDVR0OBBYEFIhN7BYmp3b1JkO8NJnf1ep7+F/eMB8GA1Ud\n" +
2496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "IwQYMBaAFEvjIhStChRGt1Ixi6ueWmLzmDeAMA0GCSqGSIb3DQEBBQUAA4GBAFVz\n" +
2497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "leZMQPz9UopfgxVJc8rz2F+71vUukOZ/w31NJ9NFxlObquMymUCzqdMUfdXmp3CV\n" +
2498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "MG7cjHtI4ZjRZXrrv7BczcLrMV626d9WlbzreXQnW23IVWMJ0/niQLq0oscsy7E6\n" +
2499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "wtgMITHuaH6XzpgiLsbP8BoRBMqaBt6YSIWsbG+Y\n" +
2500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "-----END CERTIFICATE-----";
2501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final String endPrivateKey =
2503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "-----BEGIN RSA PRIVATE KEY-----\n" +
2504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "Proc-Type: 4,ENCRYPTED\n" +
2505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "DEK-Info: DES-EDE3-CBC,E20AAB000D1D90B1\n" +
2506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "\n" +
2507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "cWrCb6eHuwb6/gnbX12Va47qSpFW0j99Lq2eEj0fqLdlwA6+KvD3/U+Nj4ldaAQ4\n" +
2508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "rYryQv0MJu/kT9z/mJbBI4NwunX/9vXttyuh8s07sv8AqdHCylYR9miz61Q0LkLR\n" +
2509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "9H9D8NWMgMnuVhlj+NUXlkF+Jfriu5xkIqeYDhN8c3/AMawQoNdW/pWmgz0BfFIP\n" +
2510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "DUxszfXHx5mfSMoRdC2YZGlFdsONSO7s14Ayz8+pKD0PzSARXtTEJ5+mELCnhFsw\n" +
2511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "R7zYYwD+9WjL702bjYQxwRS5Sk1Z/VAxLFfjdtlUFSi6VLGIG+jUnM1RF91KtJY1\n" +
2512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "bJOQrlHw9/wyH75y9sXUrVpil4qH9shILHgu4A0VaL7IpIFjWS9vPY7SvwqRlbk7\n" +
2513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "QPhxoIpiNzjzjEa7PG6nSqy8mRzJP0OLWzRUoMWJn6ntf+oj7CzaaIgFrrwRGOCQ\n" +
2514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "BYibTTMZ/paxKDvZ9Lcl8a6uRvi2II2/F63bPcTcILsKDsBdQp93Evanw1QKXdGi\n" +
2515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "jb4b0Y1LYZM0jl7z2TSBZ27HyHKp4jMQP9q9mujEKInjzSB+gsRGfP6++OilrR2U\n" +
2516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "Y7kN2o/ufnPHltel0pUWOHr45IyK8zowgXWtKVl9U+VRwr2thGbdqkRGk55KjJK4\n" +
2517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "Q+OfwvIKHgvn/4cN/BGIA/52eyY//bTFk6ePGY2vlQK4mvB7MeSxtxoCGxdCYQru\n" +
2518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "wI28rOHyQ1cdx141yxlKVSIcxBVZHm8sfh9PHeKMKuaOgc8kfx+Qh8IghFHyJ+yg\n" +
2519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "PboNF9/PiM/glaaBzY2OKTYQKY6LiTetZiI6RdLE7Y+SFwG7Wwo5dg==\n" +
2520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        "-----END RSA PRIVATE KEY-----";
2521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void setupEnvironment() throws Exception {
2523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // create certificates and CRLs
2524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory cf = CertificateFactory.getInstance("X.509");
2525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ByteArrayInputStream bi = new ByteArrayInputStream(rootCert.getBytes());
2526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        rootCertificate = (X509Certificate) cf.generateCertificate(bi);
2527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        bi = new ByteArrayInputStream(endCert.getBytes());
2528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        endCertificate = (X509Certificate) cf.generateCertificate(bi);
2529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger revokedSerialNumber = BigInteger.valueOf(1);
2531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        crl = new MyCRL("X.509");
2532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        X509CRL rootCRL = X509CRL;
2533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        X509CRL interCRL = X509CRLExample.createCRL(interCert, interPair
2534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//                .getPrivate(), revokedSerialNumber);
2535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // create CertStore to support path building
2537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        List<Object> list = new ArrayList<Object>();
2538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.add(rootCertificate);
2540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.add(endCertificate);
2541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        CollectionCertStoreParameters params = new CollectionCertStoreParameters(
2543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//                list);
2544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        CertStore store = CertStore.getInstance("Collection", params);
2545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//
2546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector = new X509CertSelector();
2547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setCertificate(endCertificate);
2548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setIssuer(endCertificate.getIssuerX500Principal()
2549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getEncoded());
2550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     // build the path
2552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        builder = CertPathBuilder.getInstance("PKIX");
2553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private CertPath buildCertPath() throws InvalidAlgorithmParameterException {
2557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PKIXCertPathBuilderResult result = null;
2558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PKIXBuilderParameters buildParams = new PKIXBuilderParameters(
2559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Collections.singleton(new TrustAnchor(rootCertificate, null)),
2560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                theCertSelector);
2561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result = (PKIXCertPathBuilderResult) builder
2563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        .build(buildParams);
2564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(CertPathBuilderException e) {
2565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return result.getCertPath();
2568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addPathToName(int, byte[])
2572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
2574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
2575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "Verifies Exception",
2576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addPathToName",
2577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, byte[].class}
2578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
2579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addPathToNameLintLbyte_array2() throws Exception {
2580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestUtils.initCertPathSSCertChain();
2581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setupEnvironment();
2582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName name = new GeneralName(1, "822.Name");
2583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(name.getEncoded());
2584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] b = new byte[name.getEncoded().length];
2585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        b = name.getEncoded();
2586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        b[name.getEncoded().length-3] = (byte) 200;
2587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            theCertSelector.addPathToName(1, b);
2590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(1, name.getEncodedName());
2597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertPath p = buildCertPath();
2599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(p);
2600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        name = new GeneralName(new Name("O=Android"));
2604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        theCertSelector.addPathToName(4, endCertificate.getSubjectDN().getName());
2605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(4, TestUtils.rootCertificateSS.getIssuerX500Principal().getEncoded());
2606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        p = TestUtils.buildCertPathSSCertChain();
2608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(p);
2609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addPathToName(int, String)
2613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
2615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
2616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "Verifies IOException.",
2617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addPathToName",
2618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, java.lang.String.class}
2619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
2620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addPathToNameLintLjava_lang_String2() throws Exception {
2621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setupEnvironment();
2622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName name = new GeneralName(1, "822.Name");
2624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(name.getEncoded());
2625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] b = new byte[name.getEncoded().length];
2626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        b = name.getEncoded();
2627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        b[name.getEncoded().length-3] = (byte) 200;
2628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(1, new String(b));
2631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(1, new String(name.getEncodedName()));
2638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertPath p = buildCertPath();
2641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(p);
2642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(1, rootCertificate.getIssuerX500Principal().getName());
2645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //p = buildCertPath();
2647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //assertNotNull(p);
2648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addSubjectAlternativeName(int, byte[])
2652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
2654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
2655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "IOException checking missed",
2656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addSubjectAlternativeName",
2657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, byte[].class}
2658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
2659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addSubjectAlternativeNameLintLbyte_array2()
2660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws Exception {
2661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName san0 = new GeneralName(new OtherName("1.2.3.4.5",
2664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new byte[] {1, 2, 0, 1}));
2665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName san1 = new GeneralName(1, "rfc@822.Name");
2666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName san2 = new GeneralName(2, "dNSName");
2667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans1 = new GeneralNames();
2669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans1.addName(san0);
2670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans1.addName(san1);
2671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans1.addName(san2);
2672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
2674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(0, san0.getEncodedName());
2676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(1, san1.getEncodedName());
2677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(2, san2.getEncodedName());
2678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans2 = new GeneralNames();
2680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans2.addName(san0);
2681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sans1);
2683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sans2);
2684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert1));
2686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert2));
2687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectAlternativeNames(null);
2689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName name = new GeneralName(new Name("O=Android"));
2691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.addSubjectAlternativeName(0, name.getEncodedName());
2693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addSubjectAlternativeName(int, String)
2701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
2703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
2704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
2705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addSubjectAlternativeName",
2706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, java.lang.String.class}
2707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
2708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addSubjectAlternativeNameLintLjava_lang_String2() throws Exception{
2709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName san6 = new GeneralName(6, "http://uniform.Resource.Id");
2710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName san2 = new GeneralName(2, "dNSName");
2711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans1 = new GeneralNames();
2713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans1.addName(san6);
2714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans1.addName(san2);
2715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
2717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(6, "http://uniform.Resource.Id");
2719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(2, "dNSName");
2720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans2 = new GeneralNames();
2722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans2.addName(san2);
2723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sans1);
2725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sans2);
2726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert1));
2728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert2));
2729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectAlternativeNames(null);
2731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName name = new GeneralName(new Name("O=Android"));
2733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.addSubjectAlternativeName(0, (name.toString()));
2735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
2741