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