X509CertSelectorTest.java revision 595db69d9b219f3d2d4598b5cb57c116cd157918
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
660595db69d9b219f3d2d4598b5cb57c116cd157918Jesse Wilson            selector.setPathToNames(sans);
6615c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson            selector.getPathToNames();
662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getPolicy()
670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getPolicy",
675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getPolicy() throws IOException {
678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] policies1 = new String[] { "1.3.6.1.5.5.7.3.1",
679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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",
680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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",
681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.6", "1.3.6.1.5.5.7.3.7" };
682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] policies2 = new String[] { "1.3.6.7.3.1" };
684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p1 = new HashSet<String>(Arrays.asList(policies1));
686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p2 = new HashSet<String>(Arrays.asList(policies2));
687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(null);
691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getPolicy());
692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p1);
694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned date should be equal to specified", p1, selector.getPolicy());
695f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p2);
697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned date should be equal to specified", p2, selector.getPolicy());
698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getPrivateKeyValid()
702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getPrivateKeyValid",
707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getPrivateKeyValid() {
710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100);
711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200);
712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getPrivateKeyValid());
715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(date1);
716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned date should be equal to specified", date1
717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getPrivateKeyValid()));
718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.getPrivateKeyValid().setTime(200);
719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned date should be equal to specified", date1
720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getPrivateKeyValid()));
721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned date should differ", date2.equals(selector
722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getPrivateKeyValid()));
723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSerialNumber()
727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSerialNumber",
732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSerialNumber() {
735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser1 = new BigInteger("10000");
736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser2 = new BigInteger("10001");
737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getSerialNumber());
740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(ser1);
741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned serial number should be equal to specified",
742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ser1, selector.getSerialNumber());
743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned serial number should differ", ser2
744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getSerialNumber()));
745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubject()
749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubject",
754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubject() {
757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal("O=First Org.");
758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal("O=Second Org.");
759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getSubject());
762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub1);
763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned subject should be equal to specified", sub1,
764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.getSubject());
765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned subject should differ", sub2.equals(selector
766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubject()));
767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectAlternativeNames()
771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectAlternativeNames",
776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectAlternativeNames() {
779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san1 = new GeneralName(1, "rfc@822.Name");
781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san2 = new GeneralName(2, "dNSName");
782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans = new GeneralNames();
784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans.addName(san1);
785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans.addName(san2);
786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert_1 = new TestCert(sans);
788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509CertSelector selector = new X509CertSelector();
789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("Selector should return null", selector
791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getSubjectAlternativeNames());
792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
793595db69d9b219f3d2d4598b5cb57c116cd157918Jesse Wilson            selector.setSubjectAlternativeNames(sans.getPairsList());
794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("The certificate should match the selection criteria.",
795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    selector.match(cert_1));
796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.getSubjectAlternativeNames().clear();
797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("The modification of initialization object "
798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + "should not affect the modification "
799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + "of internal object.", selector.match(cert_1));
800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectAsBytes()
808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectAsBytes",
813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectAsBytes() {
816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                116, 32, 79, 114, 103, 46 };
820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                110, 100, 32, 79, 114, 103, 46 };
824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("Selector should return null", selector
831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getSubjectAsBytes());
832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(sub1);
833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("The returned issuer should be equal to specified",
834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Arrays.equals(name1, selector.getSubjectAsBytes()));
835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertFalse("The returned issuer should differ", name2
836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .equals(selector.getSubjectAsBytes()));
837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(sub2);
838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("The returned issuer should be equal to specified",
839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Arrays.equals(name2, selector.getSubjectAsBytes()));
840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectAsString()
847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectAsString",
852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectAsString() {
855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name1 = "O=First Org.";
856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name2 = "O=Second Org.";
857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getSubjectAsString());
862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub1);
863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned subject should be equal to specified",
864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                name1, selector.getSubjectAsString());
865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned subject should differ", name2.equals(selector
866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectAsString()));
867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub2);
868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned subject should be equal to specified",
869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                name2, selector.getSubjectAsString());
870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectKeyIdentifier()
874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectKeyIdentifier",
879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectKeyIdentifier() {
882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid1 = new byte[] { 1, 2, 3, 4, 5 }; // random value
883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid2 = new byte[] { 4, 5, 5, 4, 3, 2, 1 }; // random value
884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector
887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectKeyIdentifier());
888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(skid1);
889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned keyID should be equal to specified", Arrays
890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(skid1, selector.getSubjectKeyIdentifier()));
891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.getSubjectKeyIdentifier()[0]++;
892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned keyID should be equal to specified", Arrays
893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(skid1, selector.getSubjectKeyIdentifier()));
894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned keyID should differ", Arrays.equals(skid2,
895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.getSubjectKeyIdentifier()));
896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectPublicKey()
900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectPublicKey",
905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectPublicKey() throws Exception {
908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // SubjectPublicKeyInfo ::= SEQUENCE {
910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // algorithm AlgorithmIdentifier,
911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // subjectPublicKey BIT STRING }
912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] enc = { 0x30, 0x0E, // SEQUENCE
913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x30, 0x07, // SEQUENCE
914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x06, 0x02, 0x03, 0x05,// OID
915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x01, 0x01, 0x07, // ANY
916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x03, 0x03, 0x01, 0x01, 0x06, // subjectPublicKey
917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(enc);
922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey key = selector.getSubjectPublicKey();
923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("0.3.5", key.getAlgorithm());
924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("X.509", key.getFormat());
925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(Arrays.equals(enc, key.getEncoded()));
926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(key.toString());
927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        key = new MyPublicKey();
929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(key);
931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey keyActual = selector.getSubjectPublicKey();
932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(key, keyActual);
933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(key.getAlgorithm(), keyActual.getAlgorithm());
934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#getSubjectPublicKeyAlgID()
938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "getSubjectPublicKeyAlgID",
943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectPublicKeyAlgID() {
946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] validOIDs = { "0.0.20", "1.25.0", "2.0.39", "0.2.10", "1.35.15",
949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "2.17.89" };
950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector
952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectPublicKeyAlgID());
953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validOIDs.length; i++) {
955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setSubjectPublicKeyAlgID(validOIDs[i]);
957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertEquals(validOIDs[i], selector.getSubjectPublicKeyAlgID());
958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IOException e) {
959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                System.out.println("t = " + e.getMessage());
960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //fail("Unexpected exception " + e.getMessage());
961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
96487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        String pkaid1 = "1.2.840.113549.1.1.1"; // RSA encryption
96587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        String pkaid2 = "1.2.840.113549.1.1.4"; // MD5 with RSA encryption
966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectPublicKeyAlgID(pkaid1);
969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The returned oid should be equal to specified", pkaid1
973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .equals(selector.getSubjectPublicKeyAlgID()));
974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The returned oid should differ", pkaid2.equals(selector
975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getSubjectPublicKeyAlgID()));
976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#match(java.security.cert.Certificate)
980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "match",
985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.security.cert.Certificate.class}
986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_matchLjava_security_cert_Certificate()
988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(null));
991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory certFact = CertificateFactory.getInstance("X509");
993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509Certificate cert1 = (X509Certificate) certFact
994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .generateCertificate(new ByteArrayInputStream(TestUtils
995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getX509Certificate_v3()));
996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509Certificate cert2 = (X509Certificate) certFact
998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .generateCertificate(new ByteArrayInputStream(TestUtils
999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getX509Certificate_v1()));
1000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert1);
1002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert1));
1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert2));
1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert2);
1006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert1));
1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert2));
1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setAuthorityKeyIdentifier(byte[])
1012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setAuthorityKeyIdentifier",
1017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setAuthorityKeyIdentifierLB$() throws CertificateException {
1020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] akid1 = new byte[] { 1, 2, 3, 4, 5 }; // random value
1023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] akid2 = new byte[] { 5, 4, 3, 2, 1 }; // random value
1024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(akid1);
1025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(akid2);
1026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(null);
1028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getAuthorityKeyIdentifier());
1033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(akid1);
1035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should not match the selection criteria.",
1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(akid2);
1040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should not match the selection criteria.",
1043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        akid2[0]++;
1046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setBasicConstraints(int)
1052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1055adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setBasicConstraints",
1057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class}
1058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setBasicConstraintsLint() {
1060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] invalidValues = { -3, -4, -5, 1000000000 };
1062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
1063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
1064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setBasicConstraints(-3);
1065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException expected");
1066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
1067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // expected
1068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] validValues = { -2, -1, 0, 1, 2, 3, 10, 20 };
1072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
1073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setBasicConstraints(validValues[i]);
1074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(validValues[i], selector.getBasicConstraints());
1075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setCertificate(java.security.cert.Certificate)
1080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setCertificate",
1085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.security.cert.X509Certificate.class}
1086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setCertificateLjava_security_cert_X509Certificate()
1088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert("same certificate");
1091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert("other certificate");
1092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(null);
1095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match in the case of null "
1096adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "certificateEquals criteria.", selector.match(cert1)
1097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert1);
1099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert2);
1104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(null);
1107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getCertificate());
1108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setCertificateValid(java.util.Date)
1112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setCertificateValid",
1117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Date.class}
1118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setCertificateValidLjava_util_Date()
1120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100);
1124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200);
1125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(date1);
1126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(date2);
1127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(null);
1129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getCertificateValid());
1130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(date1);
1131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(date2);
1136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        date2.setTime(300);
1137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setExtendedKeyUsage(Set<String>)
1143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setExtendedKeyUsage",
1148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Set.class}
1149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setExtendedKeyUsageLjava_util_Set()
1151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> ku1 = new HashSet<String>(Arrays
1153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .asList(new String[] { "1.3.6.1.5.5.7.3.1",
1154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.2", "1.3.6.1.5.5.7.3.3",
1155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.4", "1.3.6.1.5.5.7.3.8",
1156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.9", "1.3.6.1.5.5.7.3.5",
1157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "1.3.6.1.5.5.7.3.6", "1.3.6.1.5.5.7.3.7" }));
1158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> ku2 = new HashSet<String>(Arrays.asList(new String[] {
1159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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",
1160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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",
1161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.5", "1.3.6.1.5.5.7.3.6" }));
1162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(ku1);
1163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(ku2);
1164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setExtendedKeyUsage(null);
1169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "extendedKeyUsage criteria.", selector.match(cert1)
1174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setExtendedKeyUsage(ku1);
1177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(ku1, selector.getExtendedKeyUsage());
1181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setExtendedKeyUsage(ku2);
1184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(ku2, selector.getExtendedKeyUsage());
1188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setIssuer(byte[])
1192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setIssuer",
1197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setIssuerLB$() throws CertificateException {
1200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
1201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
1202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
1203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                116, 32, 79, 114, 103, 46 };
1204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
1205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
1206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
1207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                110, 100, 32, 79, 114, 103, 46 };
1208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal(name1);
1209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal(name2);
1210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(iss1);
1211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(iss2);
1212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer((byte[]) null);
1217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null issuer criteria.", selector.match(cert1)
1222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer(name1);
1225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer(name2);
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(cert2));
1239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setIssuer(java.lang.String)
1243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setIssuer",
1248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.lang.String.class}
1249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setIssuerLjava_lang_String() throws CertificateException {
1251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name1 = "O=First Org.";
1253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name2 = "O=Second Org.";
1254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal(name1);
1255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal(name2);
1256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(iss1);
1257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(iss2);
1258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer((String) null);
1263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null issuer criteria.", selector.match(cert1)
1268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer(name1);
1271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setIssuer(name2);
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(cert2));
1285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setIssuer(javax.security.auth.x500.X500Principal)
1289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setIssuer",
1294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {javax.security.auth.x500.X500Principal.class}
1295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setIssuerLjavax_security_auth_x500_X500Principal()
1297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal("O=First Org.");
1299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal("O=Second Org.");
1300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(iss1);
1301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(iss2);
1302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer((X500Principal) null);
1305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null issuer criteria.", selector.match(cert1)
1307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer(iss1);
1309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer(iss2);
1314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setKeyUsage(boolean)
1320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setKeyUsage",
1325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {boolean[].class}
1326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setKeyUsageZ() throws CertificateException {
1328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean[] ku1 = new boolean[] { true, true, true, true, true, true,
1329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                true, true, true };
1330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // decipherOnly is disallowed
1331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean[] ku2 = new boolean[] { true, true, true, true, true, true,
1332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                true, true, false };
1333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(ku1);
1334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(ku2);
1335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert3 = new TestCert((boolean[]) null);
1336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setKeyUsage(null);
1340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "keyUsage criteria.", selector.match(cert1)
1342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setKeyUsage(ku1);
1344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate which does not have a keyUsage extension "
1349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "implicitly allows all keyUsage values.", selector
1350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .match(cert3));
1351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setKeyUsage(ku2);
1352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ku2[0] = !ku2[0];
1353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setMatchAllSubjectAltNames(boolean)
1359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setMatchAllSubjectAltNames",
1364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {boolean.class}
1365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setMatchAllSubjectAltNamesZ() {
1367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert = new TestCert();
1368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert));
1371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(null));
1373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setNameConstraints(byte[]
1377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        bytes)
1378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setNameConstraints",
1383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setNameConstraintsLB$() throws IOException {
1386fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        GeneralName[] name_constraints = new GeneralName[] {
1387fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//                new GeneralName(1, "822.Name"),
1388fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//                new GeneralName(1, "rfc@822.Name"),
1389fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//                new GeneralName(2, "Name.org"),
1390fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//                new GeneralName(2, "dNS.Name.org"),
1391fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
1392fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//                new GeneralName(6, "http://Resource.Id"),
1393fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//                new GeneralName(6, "http://uniform.Resource.Id"),
1394fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//                new GeneralName(7, "1.1.1.1"),
1395fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
1396fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//                new GeneralName(new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1397fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//                        1, 1, 1, 1, 1 }), };
1398fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
1399fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        for (int i = 0; i < name_constraints.length; i++) {
1400fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//            GeneralSubtree subtree = new GeneralSubtree(name_constraints[i]);
1401fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//            GeneralSubtrees subtrees = new GeneralSubtrees();
1402fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//            subtrees.addSubtree(subtree);
1403fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//            NameConstraints constraints = new NameConstraints(subtrees,
1404fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//                    subtrees);
1405fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        }
1406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1408fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        for (int i = 0; i < constraintBytes.length; i++) {
1409fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project            selector.setNameConstraints(constraintBytes[i]);
1410fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project            assertTrue(Arrays.equals(constraintBytes[i], selector
1411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getNameConstraints()));
1412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setPathToNames(Collection<List<?>>)
1417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setPathToNames",
1422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Collection.class}
1423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setPathToNamesLjava_util_Collection() {
1425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san0 = new GeneralName(new OtherName("1.2.3.4.5",
1427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new byte[] { 1, 2, 0, 1 }));
1428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san1 = new GeneralName(1, "rfc@822.Name");
1429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san2 = new GeneralName(2, "dNSName");
1430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san3 = new GeneralName(new ORAddress());
1431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san4 = new GeneralName(new Name("O=Organization"));
1432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san6 = new GeneralName(6, "http://uniform.Resource.Id");
1433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san7 = new GeneralName(7, "1.1.1.1");
1434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san8 = new GeneralName(8, "1.2.3.4444.55555");
1435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans1 = new GeneralNames();
1437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san0);
1438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san1);
1439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san2);
1440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san3);
1441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san4);
1442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san6);
1443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san7);
1444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san8);
1445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans2 = new GeneralNames();
1446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans2.addName(san0);
1447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert1 = new TestCert(sans1);
1449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert2 = new TestCert(sans2);
1450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509CertSelector selector = new X509CertSelector();
1451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setMatchAllSubjectAltNames(true);
1452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setPathToNames(null);
1454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Any certificate should match in the case of null "
1455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + "subjectAlternativeNames criteria.", selector
1456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .match(cert1)
1457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && selector.match(cert2));
1458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<List<?>> sans = sans1.getPairsList();
1460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1461595db69d9b219f3d2d4598b5cb57c116cd157918Jesse Wilson            selector.setPathToNames(sans);
14625c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson            selector.getPathToNames();
1463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
1465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setPolicy(Set<String>)
1471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setPolicy",
1476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Set.class}
1477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setPolicyLjava_util_Set() throws IOException {
1479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] policies1 = new String[] { "1.3.6.1.5.5.7.3.1",
1480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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",
1481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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",
1482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "1.3.6.1.5.5.7.3.6", "1.3.6.1.5.5.7.3.7" };
1483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] policies2 = new String[] { "1.3.6.7.3.1" };
1485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p1 = new HashSet<String>(Arrays.asList(policies1));
1487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p2 = new HashSet<String>(Arrays.asList(policies2));
1488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(policies1);
1492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(policies2);
1493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(null);
1495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "privateKeyValid criteria.", selector.match(cert1)
1497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p1);
1500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1504f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p2);
1506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setPrivateKeyValid(java.util.Date)
1514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setPrivateKeyValid",
1519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Date.class}
1520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setPrivateKeyValidLjava_util_Date()
1522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100000000);
1524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200000000);
1525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date3 = new Date(300000000);
1526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date4 = new Date(150000000);
1527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date5 = new Date(250000000);
1528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(date1, date2);
1529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(date2, date3);
1530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(null);
1534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "privateKeyValid criteria.", selector.match(cert1)
1536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(date4);
1538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(date5);
1543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        date5.setTime(date4.getTime());
1544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSerialNumber(java.math.BigInteger)
1550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSerialNumber",
1555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.math.BigInteger.class}
1556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSerialNumberLjava_math_BigInteger()
1558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser1 = new BigInteger("10000");
1560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser2 = new BigInteger("10001");
1561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(ser1);
1562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(ser2);
1563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(null);
1566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "serialNumber criteria.", selector.match(cert1)
1568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(ser1);
1570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(ser2);
1575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubject(byte[])
1581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubject",
1586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectLB$() throws CertificateException {
1589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
1590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
1591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
1592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                116, 32, 79, 114, 103, 46 };
1593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
1594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
1595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
1596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                110, 100, 32, 79, 114, 103, 46 };
1597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
1598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
1599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sub1);
1600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sub2);
1601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject((byte[]) null);
1606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null issuer criteria.", selector.match(cert1)
1611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(name1);
1614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(name2);
1623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubject(java.lang.String)
1632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubject",
1637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.lang.String.class}
1638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectLjava_lang_String() throws CertificateException {
1640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name1 = "O=First Org.";
1641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name2 = "O=Second Org.";
1642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
1643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
1644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sub1);
1645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sub2);
1646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject((String) null);
1650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null subject criteria.", selector
1655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .match(cert1)
1656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(name1);
1659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubject(name2);
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("The certificate should match the selection criteria.",
1672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubject(javax.security.auth.x500.X500Principal)
1677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubject",
1682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {javax.security.auth.x500.X500Principal.class}
1683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectLjavax_security_auth_x500_X500Principal()
1685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal("O=First Org.");
1687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal("O=Second Org.");
1688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sub1);
1689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sub2);
1690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject((X500Principal) null);
1693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "in the case of null subjcet criteria.", selector
1695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .match(cert1)
1696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub1);
1698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub2);
1703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubjectAlternativeNames(Collection<List<?>>)
1709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubjectAlternativeNames",
1714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.util.Collection.class}
1715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectAlternativeNamesLjava_util_Collection() {
1717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san0 = new GeneralName(new OtherName("1.2.3.4.5",
1720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new byte[] { 1, 2, 0, 1 }));
1721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san1 = new GeneralName(1, "rfc@822.Name");
1722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san2 = new GeneralName(2, "dNSName");
1723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san3 = new GeneralName(new ORAddress());
1724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san4 = new GeneralName(new Name("O=Organization"));
1725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san6 = new GeneralName(6, "http://uniform.Resource.Id");
1726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san7 = new GeneralName(7, "1.1.1.1");
1727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralName san8 = new GeneralName(8, "1.2.3.4444.55555");
1728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans1 = new GeneralNames();
1730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san0);
1731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san1);
1732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san2);
1733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san3);
1734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san4);
1735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san6);
1736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san7);
1737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans1.addName(san8);
1738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            GeneralNames sans2 = new GeneralNames();
1739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sans2.addName(san0);
1740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert1 = new TestCert(sans1);
1742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TestCert cert2 = new TestCert(sans2);
1743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            X509CertSelector selector = new X509CertSelector();
1744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setMatchAllSubjectAltNames(true);
1745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectAlternativeNames(null);
1747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Any certificate should match in the case of null "
1748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + "subjectAlternativeNames criteria.", selector
1749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .match(cert1)
1750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && selector.match(cert2));
1751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<List<?>> sans = sans1.getPairsList();
1753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1754595db69d9b219f3d2d4598b5cb57c116cd157918Jesse Wilson            selector.setSubjectAlternativeNames(sans);
1755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
17565c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson            selector.getSubjectAlternativeNames();
1757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
1759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1762f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubjectKeyIdentifier(byte[])
1765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubjectKeyIdentifier",
1770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectKeyIdentifierLB$() throws CertificateException {
1773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid1 = new byte[] { 1, 2, 3, 4, 5 }; // random value
1774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid2 = new byte[] { 5, 4, 3, 2, 1 }; // random value
1775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(skid1);
1776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(skid2);
1777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(null);
1780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "serialNumber criteria.", selector.match(cert1)
1782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(skid1);
1784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(skid2);
1789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        skid2[0]++;
1790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubjectPublicKey(byte[])
1796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubjectPublicKey",
1801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {byte[].class}
1802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectPublicKeyLB$() throws Exception {
1804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //SubjectPublicKeyInfo  ::=  SEQUENCE  {
1806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //    algorithm            AlgorithmIdentifier,
1807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //    subjectPublicKey     BIT STRING  }
1808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] enc = { 0x30, 0x0E, // SEQUENCE
1809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x30, 0x07, // SEQUENCE
1810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x06, 0x02, 0x03, 0x05,//OID
1811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x01, 0x01, 0x07, //ANY
1812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x03, 0x03, 0x01, 0x01, 0x06, // subjectPublicKey
1813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
1814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(enc);
1818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey key = selector.getSubjectPublicKey();
1819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("0.3.5", key.getAlgorithm());
1820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("X.509", key.getFormat());
1821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(Arrays.equals(enc, key.getEncoded()));
1822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(key.toString());
1823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubjectPublicKey(java.security.PublicKey key)
1827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubjectPublicKey",
1832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.security.PublicKey.class}
1833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectPublicKeyLjava_security_PublicKey()
1835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey pkey1 = null;
1837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey pkey2 = null;
1838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pkey1 = new TestKeyPair("RSA").getPublic();
1840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pkey2 = new TestKeyPair("DSA").getPublic();
1841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
1842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected Exception was thrown: " + e.getMessage());
1843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(pkey1);
1846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(pkey2);
1847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey((PublicKey) null);
1850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "subjectPublicKey criteria.", selector.match(cert1)
1852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(pkey1);
1854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(pkey2);
1859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#setSubjectPublicKeyAlgID(java.lang.String)
1865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "setSubjectPublicKeyAlgID",
1870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {java.lang.String.class}
1871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectPublicKeyAlgIDLjava_lang_String()
1873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException {
1874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pkaid1 = "1.2.840.113549.1.1.1"; // RSA (source:
1877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // http://asn1.elibel.tm.fr)
1878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pkaid2 = "1.2.840.10040.4.1"; // DSA (source:
1879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // http://asn1.elibel.tm.fr)
1880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey pkey1;
1881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey pkey2;
1882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pkey1 = new TestKeyPair("RSA").getPublic();
1884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            pkey2 = new TestKeyPair("DSA").getPublic();
1885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
1886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
1887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected Exception was thrown: " + e.getMessage());
1888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
1889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(pkey1);
1891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(pkey2);
1892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectPublicKeyAlgID(null);
1895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + "subjectPublicKeyAlgID criteria.", selector.match(cert1)
1901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && selector.match(cert2));
1902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] validOIDs = { "0.0.20", "1.25.0", "2.0.39", "0.2.10", "1.35.15",
1904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "2.17.89", "2.5.29.16", "2.5.29.17", "2.5.29.30", "2.5.29.32",
1905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "2.5.29.37" };
1906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validOIDs.length; i++) {
1908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
1909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setSubjectPublicKeyAlgID(validOIDs[i]);
1910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertEquals(validOIDs[i], selector.getSubjectPublicKeyAlgID());
1911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IOException e) {
1912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Unexpected exception " + e.getMessage());
1913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1915f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] invalidOIDs = { "0.20", "1.25", "2.39", "3.10"};
1917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidOIDs.length; i++) {
1918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
1919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setSubjectPublicKeyAlgID(invalidOIDs[i]);
1920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IOException wasn't thrown for " + invalidOIDs[i]);
1921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IOException e) {
1922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectPublicKeyAlgID(pkaid1);
1927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
1932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setSubjectPublicKeyAlgID(pkaid2);
1936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
1937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected IOException was thrown.");
1938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#toString()
1945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
1947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
1948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
1949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "toString",
1950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {}
1951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
1952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toString() {
1953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(selector.toString());
1955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public class MyPublicKey implements PublicKey {
1958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static final long serialVersionUID = 2899528375354645752L;
1959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public MyPublicKey() {
1961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super();
1962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getAlgorithm() {
1965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return "PublicKey";
1966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getFormat() {
1969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return "Format";
1970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getEncoded() {
1973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new byte[0];
1974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public long getSerVerUID() {
1977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return serialVersionUID;
1978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private class TestCert extends X509Certificate {
1982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static final long serialVersionUID = 176676115254260405L;
1984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /* Stuff fields */
1986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected String equalCriteria = null; // to simplify method equals()
1987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected BigInteger serialNumber = null;
1989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected X500Principal issuer = null;
1991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected X500Principal subject = null;
1993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected byte[] keyIdentifier = null;
1995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Date date = null;
1997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Date notBefore = null;
1999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Date notAfter = null;
2001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected PublicKey key = null;
2003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected boolean[] keyUsage = null;
2005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected List<String> extKeyUsage = null;
2007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected int pathLen = 1;
2009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected GeneralNames sans = null;
2011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected byte[] encoding = null;
2013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected String[] policies = null;
2015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Collection<List<?>> collection = null;
2017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected NameConstraints nameConstraints = null;
2019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /* Stuff methods */
2021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert() {
2022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(GeneralNames sans) {
2025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setSubjectAlternativeNames(sans);
2026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(NameConstraints nameConstraints) {
2029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.nameConstraints = nameConstraints;
2030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Collection<List<?>> collection) {
2033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setCollection(collection);
2034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(String equalCriteria) {
2037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setEqualCriteria(equalCriteria);
2038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(String[] policies) {
2041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setPolicies(policies);
2042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(BigInteger serial) {
2045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setSerialNumber(serial);
2046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(X500Principal principal) {
2049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setIssuer(principal);
2050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setSubject(principal);
2051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(byte[] array) {
2054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setKeyIdentifier(array);
2055adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Date date) {
2058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setDate(date);
2059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Date notBefore, Date notAfter) {
2062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setPeriod(notBefore, notAfter);
2063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(PublicKey key) {
2066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setPublicKey(key);
2067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(boolean[] keyUsage) {
2070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setKeyUsage(keyUsage);
2071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Set<String> extKeyUsage) {
2074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setExtendedKeyUsage(extKeyUsage);
2075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(int pathLen) {
2078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.pathLen = pathLen;
2079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setSubjectAlternativeNames(GeneralNames sans) {
2082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.sans = sans;
2083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setCollection(Collection<List<?>> collection) {
2086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.collection = collection;
2087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setPolicies(String[] policies) {
2090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.policies = policies;
2091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setExtendedKeyUsage(Set<String> extKeyUsage) {
2094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.extKeyUsage = (extKeyUsage == null) ? null : new ArrayList<String>(
2095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    extKeyUsage);
2096adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setKeyUsage(boolean[] keyUsage) {
2099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.keyUsage = (keyUsage == null) ? null : (boolean[]) keyUsage
2100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .clone();
2101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setPublicKey(PublicKey key) {
2104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.key = key;
2105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setPeriod(Date notBefore, Date notAfter) {
2108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.notBefore = notBefore;
2109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.notAfter = notAfter;
2110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setSerialNumber(BigInteger serial) {
2113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.serialNumber = serial;
2114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setEqualCriteria(String equalCriteria) {
2117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.equalCriteria = equalCriteria;
2118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setIssuer(X500Principal issuer) {
2121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.issuer = issuer;
2122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setSubject(X500Principal subject) {
2125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.subject = subject;
2126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setKeyIdentifier(byte[] subjectKeyID) {
2129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.keyIdentifier = (byte[]) subjectKeyID.clone();
2130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setDate(Date date) {
2133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.date = new Date(date.getTime());
2134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setEncoding(byte[] encoding) {
2137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.encoding = encoding;
2138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /* Method implementations */
2141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean equals(Object cert) {
2142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (cert == null) {
2143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return false;
2144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((equalCriteria == null)
2146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    || (((TestCert) cert).equalCriteria == null)) {
2147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return false;
2148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
2149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return equalCriteria.equals(((TestCert) cert).equalCriteria);
2150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String toString() {
2154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (equalCriteria != null) {
2155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return equalCriteria;
2156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return "";
2158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void checkValidity() throws CertificateExpiredException,
2161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateNotYetValidException {
2162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void checkValidity(Date date)
2165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws CertificateExpiredException,
2166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateNotYetValidException {
2167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (this.date == null) {
2168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new CertificateExpiredException();
2169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int result = this.date.compareTo(date);
2171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (result > 0) {
2172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new CertificateExpiredException();
2173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (result < 0) {
2175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new CertificateNotYetValidException();
2176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int getVersion() {
2180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 3;
2181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public BigInteger getSerialNumber() {
2184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return (serialNumber == null) ? new BigInteger("1111")
2185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    : serialNumber;
2186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Principal getIssuerDN() {
2189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return issuer;
2190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public X500Principal getIssuerX500Principal() {
2193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return issuer;
2194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Principal getSubjectDN() {
2197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return subject;
2198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public X500Principal getSubjectX500Principal() {
2201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return subject;
2202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Date getNotBefore() {
2205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Date getNotAfter() {
2209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getTBSCertificate() throws CertificateEncodingException {
2213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getSignature() {
2217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getSigAlgName() {
2221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getSigAlgOID() {
2225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getSigAlgParams() {
2229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean[] getIssuerUniqueID() {
2233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean[] getSubjectUniqueID() {
2237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean[] getKeyUsage() {
2241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return keyUsage;
2242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public List<String> getExtendedKeyUsage()
2245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws CertificateParsingException {
2246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return extKeyUsage;
2247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int getBasicConstraints() {
2250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return pathLen;
2251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void verify(PublicKey key) throws CertificateException,
2254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                NoSuchAlgorithmException, InvalidKeyException,
2255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                NoSuchProviderException, SignatureException {
2256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void verify(PublicKey key, String sigProvider)
2259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws CertificateException, NoSuchAlgorithmException,
2260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                InvalidKeyException, NoSuchProviderException,
2261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SignatureException {
2262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public PublicKey getPublicKey() {
2265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return key;
2266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getEncoded() throws CertificateEncodingException {
2269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return encoding;
2270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Set<String> getNonCriticalExtensionOIDs() {
2273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Set<String> getCriticalExtensionOIDs() {
2277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getExtensionValue(String oid) {
2281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (("2.5.29.14".equals(oid)) || ("2.5.29.35".equals(oid))) {
2283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Extension value is represented as an OctetString
2284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(keyIdentifier);
2285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.16".equals(oid)) {
2287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                PrivateKeyUsagePeriod pkup = new PrivateKeyUsagePeriod(
2288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        notBefore, notAfter);
2289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                byte[] encoded = pkup.getEncoded();
2290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(encoded);
2291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (("2.5.29.37".equals(oid)) && (extKeyUsage != null)) {
2293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ASN1Oid[] oa = new ASN1Oid[extKeyUsage.size()];
2294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String[] val = new String[extKeyUsage.size()];
2295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Iterator it = extKeyUsage.iterator();
2296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                int id = 0;
2297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                while (it.hasNext()) {
2298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    oa[id] = ASN1Oid.getInstanceForString();
2299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    val[id++] = (String) it.next();
2300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
2301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(
2302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        new ASN1Sequence(oa).encode(val));
2303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.19".equals(oid)) {
2305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(
2306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        new ASN1Sequence(new ASN1Type[] {
2307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                ASN1Boolean.getInstance(),
2308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                ASN1Integer.getInstance() })
2309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                .encode(new Object[] {
2310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                        new Boolean(pathLen != 1),
2311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                        BigInteger.valueOf(pathLen)
2312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                                .toByteArray() }));
2313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.17".equals(oid) && (sans != null)) {
2315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (sans.getNames() == null) {
2316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    return null;
2317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
2318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(
2319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        GeneralNames.ASN1.encode(sans));
2320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.32".equals(oid) && (policies != null)
2322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && (policies.length > 0)) {
2323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Certificate Policies Extension (as specified in rfc 3280)
2324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificatePolicies certificatePolicies = new CertificatePolicies();
2325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                for (int i = 0; i < policies.length; i++) {
2326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    PolicyInformation policyInformation = new PolicyInformation(
2327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            policies[i]);
2328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    certificatePolicies.addPolicyInformation(policyInformation);
2329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
2330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(
2331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        certificatePolicies.getEncoded());
2332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.30".equals(oid) && (nameConstraints != null)) { //
2334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Name
2335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Constraints
2336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Extension
2337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // (as
2338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // specified
2339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // in
2340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // rfc
2341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // 3280)
2342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return ASN1OctetString.getInstance().encode(
2343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        nameConstraints.getEncoded());
2344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean hasUnsupportedCriticalExtension() {
2350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
2351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2352f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2354f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public X509Certificate rootCertificate;
2356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public X509Certificate endCertificate;
2358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public MyCRL crl;
2360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private X509CertSelector theCertSelector;
2362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private CertPathBuilder builder;
2364f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void setupEnvironment() throws Exception {
2366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // create certificates and CRLs
2367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory cf = CertificateFactory.getInstance("X.509");
2368fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        ByteArrayInputStream bi = new ByteArrayInputStream(TestUtils.rootCert.getBytes());
2369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        rootCertificate = (X509Certificate) cf.generateCertificate(bi);
2370fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        bi = new ByteArrayInputStream(TestUtils.endCert.getBytes());
2371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        endCertificate = (X509Certificate) cf.generateCertificate(bi);
2372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger revokedSerialNumber = BigInteger.valueOf(1);
2374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        crl = new MyCRL("X.509");
2375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        X509CRL rootCRL = X509CRL;
2376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        X509CRL interCRL = X509CRLExample.createCRL(interCert, interPair
2377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//                .getPrivate(), revokedSerialNumber);
2378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // create CertStore to support path building
2380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        List<Object> list = new ArrayList<Object>();
2381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.add(rootCertificate);
2383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.add(endCertificate);
2384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        CollectionCertStoreParameters params = new CollectionCertStoreParameters(
2386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//                list);
2387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        CertStore store = CertStore.getInstance("Collection", params);
2388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//
2389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector = new X509CertSelector();
2390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setCertificate(endCertificate);
2391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setIssuer(endCertificate.getIssuerX500Principal()
2392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getEncoded());
2393f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     // build the path
2395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        builder = CertPathBuilder.getInstance("PKIX");
2396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2398f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private CertPath buildCertPath() throws InvalidAlgorithmParameterException {
2400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PKIXCertPathBuilderResult result = null;
2401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PKIXBuilderParameters buildParams = new PKIXBuilderParameters(
2402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Collections.singleton(new TrustAnchor(rootCertificate, null)),
2403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                theCertSelector);
2404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        result = (PKIXCertPathBuilderResult) builder
2406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        .build(buildParams);
2407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(CertPathBuilderException e) {
2408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
2409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return result.getCertPath();
2411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2412f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addPathToName(int, byte[])
2415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
2417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
2418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "Verifies Exception",
2419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addPathToName",
2420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, byte[].class}
2421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
2422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addPathToNameLintLbyte_array2() throws Exception {
2423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestUtils.initCertPathSSCertChain();
2424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setupEnvironment();
2425fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        byte[] bytes, bytesName;
2426fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // GeneralName name = new GeneralName(1, "822.Name");
2427fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // bytes = name.getEncoded();
2428fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // bytesName = name.getEncodedName();
2429fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        bytes = new byte[] {-127, 8, 56, 50, 50, 46, 78, 97, 109, 101};
243050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob        bytesName = new byte[] {22, 8, 56, 50, 50, 46, 78, 97, 109, 101};
243150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob        bytes[bytes.length-3] = (byte) 200;
2432f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
243450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob            theCertSelector.addPathToName(1, bytes);
2435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2438f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2440f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2441fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        theCertSelector.addPathToName(1, bytesName);
2442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertPath p = buildCertPath();
2444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(p);
2445f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2447f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        name = new GeneralName(new Name("O=Android"));
2449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        theCertSelector.addPathToName(4, endCertificate.getSubjectDN().getName());
2450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(4, TestUtils.rootCertificateSS.getIssuerX500Principal().getEncoded());
2451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        p = TestUtils.buildCertPathSSCertChain();
2453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(p);
2454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2455f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addPathToName(int, String)
2458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
2460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
2461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "Verifies IOException.",
2462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addPathToName",
2463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, java.lang.String.class}
2464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
2465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addPathToNameLintLjava_lang_String2() throws Exception {
2466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setupEnvironment();
2467fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        byte[] bytes, bytesName;
2468fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // GeneralName name = new GeneralName(1, "822.Name");
2469fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // bytes = name.getEncoded();
2470fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // bytesName = name.getEncodedName();
2471fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        bytes = new byte[] {-127, 8, 56, 50, 50, 46, 78, 97, 109, 101};
2472fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        bytesName = new byte[] {22, 8, 56, 50, 50, 46, 78, 97, 109, 101};
2473fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        assertNotNull(bytes);
2474fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        byte[] b = new byte[bytes.length];
2475fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        b = bytes;
2476fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        b[bytes.length-3] = (byte) 200;
2477f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(1, new String(b));
2480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2483f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2485f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2486fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        theCertSelector.addPathToName(1, new String(bytesName));
2487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2488f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertPath p = buildCertPath();
2490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(p);
2491f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(1, rootCertificate.getIssuerX500Principal().getName());
2494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //p = buildCertPath();
2496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //assertNotNull(p);
2497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2498f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addSubjectAlternativeName(int, byte[])
2501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
2503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
2504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "IOException checking missed",
2505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addSubjectAlternativeName",
2506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, byte[].class}
2507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
2508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addSubjectAlternativeNameLintLbyte_array2()
2509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws Exception {
2510f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2511f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName san0 = new GeneralName(new OtherName("1.2.3.4.5",
2513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new byte[] {1, 2, 0, 1}));
2514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName san1 = new GeneralName(1, "rfc@822.Name");
2515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName san2 = new GeneralName(2, "dNSName");
2516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans1 = new GeneralNames();
2518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans1.addName(san0);
2519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans1.addName(san1);
2520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans1.addName(san2);
2521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
2523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(0, san0.getEncodedName());
2525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(1, san1.getEncodedName());
2526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(2, san2.getEncodedName());
2527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans2 = new GeneralNames();
2529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans2.addName(san0);
2530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sans1);
2532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sans2);
2533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert1));
2535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert2));
2536f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectAlternativeNames(null);
2538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName name = new GeneralName(new Name("O=Android"));
2540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.addSubjectAlternativeName(0, name.getEncodedName());
2542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @tests java.security.cert.X509CertSelector#addSubjectAlternativeName(int, String)
2550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @TestTargetNew(
2552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        level = TestLevel.COMPLETE,
2553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        notes = "",
2554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        method = "addSubjectAlternativeName",
2555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        args = {int.class, java.lang.String.class}
2556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    )
2557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addSubjectAlternativeNameLintLjava_lang_String2() throws Exception{
2558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName san6 = new GeneralName(6, "http://uniform.Resource.Id");
2559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName san2 = new GeneralName(2, "dNSName");
2560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans1 = new GeneralNames();
2562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans1.addName(san6);
2563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans1.addName(san2);
2564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
2566f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(6, "http://uniform.Resource.Id");
2568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(2, "dNSName");
2569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans2 = new GeneralNames();
2571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sans2.addName(san2);
2572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sans1);
2574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sans2);
2575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert1));
2577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert2));
2578f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectAlternativeNames(null);
2580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralName name = new GeneralName(new Name("O=Android"));
2582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.addSubjectAlternativeName(0, (name.toString()));
2584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
2590