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