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