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.List;
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set;
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.auth.x500.X500Principal;
54296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski
55beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstromimport junit.framework.TestCase;
565ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
57beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstromimport org.apache.harmony.security.tests.support.TestKeyPair;
58beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstromimport org.apache.harmony.security.tests.support.cert.MyCRL;
59beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstromimport org.apache.harmony.security.tests.support.cert.TestUtils;
605ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
615ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.util.ObjectIdentifier;
625ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.util.DerOutputStream;
635ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
645ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.CertificatePoliciesExtension;
655ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.CertificatePolicyId;
665ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.DNSName;
675ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.EDIPartyName;
685ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.GeneralNames;
695ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.GeneralName;
705ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.GeneralNameInterface;
715ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.IPAddressName;
725ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.OIDName;
735ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.OtherName;
745ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.PolicyInformation;
755ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.PrivateKeyUsageExtension;
765ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.RFC822Name;
775ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.SubjectAlternativeNameExtension;
785ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.URIName;
795ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.X400Address;
805ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmeraimport sun.security.x509.X500Name;
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * X509CertSelectorTest
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class X509CertSelectorTest extends TestCase {
86f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
87fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project    byte[][] constraintBytes = new byte[][] {
88fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project            {
89296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    48, 28, -96, 12, 48, 10, -127, 8, 56, 50, 50, 46, 78,
90296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    97, 109, 101, -95, 12, 48, 10, -127, 8, 56, 50, 50, 46, 78,
91296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    97, 109, 101},
92296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski            {       48, 36, -96, 16, 48, 14, -127, 12, 114, 102, 99, 64, 56, 50,
93296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    50, 46, 78, 97, 109, 101, -95, 16, 48, 14, -127, 12, 114,
94296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    102, 99, 64, 56, 50, 50, 46, 78, 97, 109, 101},
95296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski            {       48, 28, -96, 12, 48, 10, -126, 8, 78, 97, 109, 101, 46, 111,
96296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    114, 103, -95, 12, 48, 10, -126, 8, 78, 97, 109, 101, 46,
97296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    111, 114, 103},
98296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski            {       48, 36, -96, 16, 48, 14, -126, 12, 100, 78, 83, 46, 78, 97,
99296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    109, 101, 46, 111, 114, 103, -95, 16, 48, 14, -126, 12, 100,
100296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    78, 83, 46, 78, 97, 109, 101, 46, 111, 114, 103},
101296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski            {       48, 34, -96, 15, 48, 13, -122, 11, 82, 101, 115, 111, 117,
102296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    114, 99, 101, 46, 73, 100, -95, 15, 48, 13, -122, 11, 82,
103296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    101, 115, 111, 117, 114, 99, 101, 46, 73, 100},
104296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski            {       48, 50, -96, 23, 48, 21, -122, 19, 117, 110, 105, 102, 111,
105296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    114, 109, 46, 82, 101, 115, 111, 117, 114, 99, 101, 46, 73,
106296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    100, -95, 23, 48, 21, -122, 19, 117, 110, 105, 102, 111,
107296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    114, 109, 46, 82, 101, 115, 111, 117, 114, 99, 101, 46, 73,
108296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    100},
109296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski            {       48, 20, -96, 8, 48, 6, -121, 4, 1, 1, 1, 1, -95, 8, 48, 6,
110296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    -121, 4, 1, 1, 1, 1},
111296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski            {       48, 44, -96, 20, 48, 18, -121, 16, 1, 1, 1, 1, 1, 1, 1, 1,
112296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    1, 1, 1, 1, 1, 1, 1, 1, -95, 20, 48, 18, -121, 16, 1, 1, 1,
113296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski                    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
114296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski            };
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
117229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#addSubjectAlternativeName(int, byte[])
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addSubjectAlternativeNameLintLbyte_array() throws IOException {
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression for HARMONY-2487
1215ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        int[] types = { GeneralNameInterface.NAME_ANY,
1225ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_RFC822,
1235ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_DNS,
1245ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_X400,
1255ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_DIRECTORY,
1265ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_EDI,
1275ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_URI,
1285ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_IP,
1295ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_OID };
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < types.length; i++) {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new X509CertSelector().addSubjectAlternativeName(types[i],
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        (byte[]) null);
134bd7a7c87692d3b5be341fbc5022eaa07611ae751Brian Carlstrom                fail("No expected NullPointerException for type: " + types[i]);
135beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            } catch (NullPointerException expected) {
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
141229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#addSubjectAlternativeName(int, String)
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addSubjectAlternativeNameLintLjava_lang_String() {
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression for HARMONY-727
1455ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        int[] types = { GeneralNameInterface.NAME_ANY,
146ea966a29384c2008c323460d9bb99bb6cfbb1a62Shubham Ajmera                // The test was disabled in M: bd7a7c87692d3b5be341fbc5022eaa07611ae751
147ea966a29384c2008c323460d9bb99bb6cfbb1a62Shubham Ajmera                // and was reintroduced after the test was enabled after some
148ea966a29384c2008c323460d9bb99bb6cfbb1a62Shubham Ajmera                // time it wasn't run: 5ef40918006efad4c7194b505c3ad176928711a3
149ea966a29384c2008c323460d9bb99bb6cfbb1a62Shubham Ajmera                // Disabling again for N as it's failing and wasn't being run for M anyway
150ea966a29384c2008c323460d9bb99bb6cfbb1a62Shubham Ajmera                // GeneralNameInterface.NAME_RFC822,
1515ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_DNS,
1525ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_X400,
1535ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_DIRECTORY,
1545ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_EDI,
1555ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_URI,
1565ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_IP,
1575ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                GeneralNameInterface.NAME_OID };
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < types.length; i++) {
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new X509CertSelector().addSubjectAlternativeName(types[i],
161bd7a7c87692d3b5be341fbc5022eaa07611ae751Brian Carlstrom                        "-0xDFRF");
162bd7a7c87692d3b5be341fbc5022eaa07611ae751Brian Carlstrom                fail("IOException expected for type: " + types[i]);
163beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            } catch (IOException expected) {
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
169229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#addPathToName(int, byte[])
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addPathToNameLintLbyte_array() throws IOException {
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression for HARMONY-2487
1735ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        int[] types = { GeneralNameInterface.NAME_ANY,
1745ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        GeneralNameInterface.NAME_RFC822,
1755ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        GeneralNameInterface.NAME_DNS,
1765ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        GeneralNameInterface.NAME_X400,
1775ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        GeneralNameInterface.NAME_DIRECTORY,
1785ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        GeneralNameInterface.NAME_EDI,
1795ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        GeneralNameInterface.NAME_URI,
1805ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        GeneralNameInterface.NAME_IP,
1815ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        GeneralNameInterface.NAME_OID };
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < types.length; i++) {
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new X509CertSelector().addPathToName(types[i], (byte[]) null);
185bd7a7c87692d3b5be341fbc5022eaa07611ae751Brian Carlstrom                fail("No expected NullPointerException for type: " + types[i]);
186beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            } catch (NullPointerException expected) {
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
192229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#addPathToName(int, String)
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addPathToNameLintLjava_lang_String() {
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression for HARMONY-724
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int type = 0; type <= 8; type++) {
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new X509CertSelector().addPathToName(type, (String) null);
199beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                fail();
200beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            } catch (IOException expected) {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
203f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
204f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
206f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
208229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#X509CertSelector()
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_X509CertSelector() {
211beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        X509CertSelector selector = new X509CertSelector();
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(-1, selector.getBasicConstraints());
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.getMatchAllSubjectAltNames());
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
217229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#clone()
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_clone() throws Exception {
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector1 = (X509CertSelector) selector.clone();
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
223beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getMatchAllSubjectAltNames(), selector1.getMatchAllSubjectAltNames());
224beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getAuthorityKeyIdentifier(), selector1.getAuthorityKeyIdentifier());
225beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getBasicConstraints(), selector1.getBasicConstraints());
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getCertificate(), selector1.getCertificate());
227beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getCertificateValid(), selector1.getCertificateValid());
228beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getExtendedKeyUsage(), selector1.getExtendedKeyUsage());
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getIssuer(), selector1.getIssuer());
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getIssuerAsBytes(), selector1.getIssuerAsBytes());
231beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getIssuerAsString(), selector1.getIssuerAsString());
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getKeyUsage(), selector1.getKeyUsage());
233beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getNameConstraints(), selector1.getNameConstraints());
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getPathToNames(), selector1.getPathToNames());
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getPolicy(), selector1.getPolicy());
236beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getPrivateKeyValid(), selector1.getPrivateKeyValid());
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getSerialNumber(), selector1.getSerialNumber());
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(selector.getSubject(), selector1.getSubject());
239beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getSubjectAlternativeNames(), selector1.getSubjectAlternativeNames());
240beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getSubjectAsBytes(), selector1.getSubjectAsBytes());
241beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getSubjectAsString(), selector1.getSubjectAsString());
242beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getSubjectKeyIdentifier(), selector1.getSubjectKeyIdentifier());
243beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getSubjectPublicKey(), selector1.getSubjectPublicKey());
244beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals(selector.getSubjectPublicKeyAlgID(), selector1.getSubjectPublicKeyAlgID());
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector = null;
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.clone();
249beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            fail();
250beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        } catch (NullPointerException expected) {
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
255229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getAuthorityKeyIdentifier()
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getAuthorityKeyIdentifier() {
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] akid1 = new byte[] { 4, 5, 1, 2, 3, 4, 5 }; // random value
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] akid2 = new byte[] { 4, 5, 5, 4, 3, 2, 1 }; // random value
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
262beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertNull("Selector should return null",
263beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.getAuthorityKeyIdentifier());
264beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned keyID should be equal to specified",
265beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   Arrays.equals(akid1, selector.getAuthorityKeyIdentifier()));
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(akid1);
267beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned keyID should be equal to specified",
268beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   Arrays.equals(akid1, selector.getAuthorityKeyIdentifier()));
269beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned keyID should differ",
270beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    Arrays.equals(akid2, selector.getAuthorityKeyIdentifier()));
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
274229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getBasicConstraints()
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getBasicConstraints() {
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] validValues = { 2, 1, 0, 1, 2, 3, 10, 20 };
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setBasicConstraints(validValues[i]);
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(validValues[i], selector.getBasicConstraints());
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
286229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getCertificate()
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
288beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_getCertificate() throws Exception {
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory certFact = CertificateFactory.getInstance("X509");
291beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        X509Certificate cert1 = (X509Certificate)
292beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                certFact.generateCertificate(new ByteArrayInputStream(
293beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                        TestUtils.getX509Certificate_v3()));
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
295beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        X509Certificate cert2 = (X509Certificate)
296beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                certFact.generateCertificate(new ByteArrayInputStream(
297beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                        TestUtils.getX509Certificate_v1()));
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert1);
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(cert1, selector.getCertificate());
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert2);
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(cert2, selector.getCertificate());
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(null);
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getCertificate());
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
310229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getCertificateValid()
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getCertificateValid() {
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100);
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200);
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date3 = Calendar.getInstance().getTime();
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
318beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertNull("Selector should return null",
319beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.getCertificateValid());
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(date1);
321beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned date should be equal to specified",
322beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   date1.equals(selector.getCertificateValid()));
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.getCertificateValid().setTime(200);
324beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned date should be equal to specified",
325beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   date1.equals(selector.getCertificateValid()));
326beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned date should differ",
327beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    date2.equals(selector.getCertificateValid()));
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(date3);
329beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned date should be equal to specified",
330beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   date3.equals(selector.getCertificateValid()));
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(null);
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getCertificateValid());
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
336229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getExtendedKeyUsage()
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
338beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_getExtendedKeyUsage() throws Exception {
339beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        HashSet<String> ku = new HashSet<String>(Arrays.asList(new String[] {
340beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.1",
341beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.2",
342beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.3",
343beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.4",
344beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.8",
345beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.9",
346beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.5",
347beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.6",
348beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.7"
349beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        }));
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
352beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertNull("Selector should return null", selector.getExtendedKeyUsage());
353beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setExtendedKeyUsage(ku);
354beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned extendedKeyUsage should be equal to specified",
355beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   ku.equals(selector.getExtendedKeyUsage()));
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.getExtendedKeyUsage().add("KRIBLEGRABLI");
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("The returned Set should be immutable.");
359beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        } catch (UnsupportedOperationException expected) {
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
364229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getIssuer()
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getIssuer() {
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal("O=First Org.");
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal("O=Second Org.");
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getIssuer());
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer(iss1);
373beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertEquals("The returned issuer should be equal to specified",
374beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                     iss1, selector.getIssuer());
375beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned issuer should differ",
376beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    iss2.equals(selector.getIssuer()));
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
380229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getIssuerAsBytes()
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
382beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_getIssuerAsBytes() throws Exception {
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                116, 32, 79, 114, 103, 46 };
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                110, 100, 32, 79, 114, 103, 46 };
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal(name1);
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal(name2);
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
396beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertNull("Selector should return null", selector.getIssuerAsBytes());
397beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setIssuer(iss1);
398beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned issuer should be equal to specified",
399beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   Arrays.equals(name1, selector.getIssuerAsBytes()));
40097a3d514797ffddba65aaa50e352538820a52078Tobias Thierer        assertFalse("The returned issuer should differ",
40197a3d514797ffddba65aaa50e352538820a52078Tobias Thierer                   Arrays.equals(name2, 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
464296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//      org.bouncycastle.asn1.x509.GeneralName[] name_constraints =
465296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//          new org.bouncycastle.asn1.x509.GeneralName[] {
466296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                new org.bouncycastle.asn1.x509.GeneralName(1, "822.Name"),
467296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                new org.bouncycastle.asn1.x509.GeneralName(1, "rfc@822.Name"),
468296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                new org.bouncycastle.asn1.x509.GeneralName(2, "Name.org"),
469296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                new org.bouncycastle.asn1.x509.GeneralName(2, "dNS.Name.org"),
470fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
471296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                new org.bouncycastle.asn1.x509.GeneralName(6, "Resource.Id"),
472296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                new org.bouncycastle.asn1.x509.GeneralName(6,
473296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                    "uniform.Resource.Id"),
474296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                new org.bouncycastle.asn1.x509.GeneralName(7, "1.1.1.1"),
475fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
476296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                new org.bouncycastle.asn1.x509.GeneralName(7,
477296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                    new org.bouncycastle.asn1.DEROctetString(new byte[] {
478296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 })),
479296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//          };
480fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
481fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        constraintBytes = new byte[name_constraints.length][];
482fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
483fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        for (int i = 0; i < name_constraints.length; i++) {
484296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//          org.bouncycastle.asn1.x509.GeneralSubtree subtree =
485296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.GeneralSubtree(
486296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                  name_constraints[i]);
487296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//          org.bouncycastle.asn1.x509.GeneralSubtree[] subtrees =
488296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.GeneralSubtree[1];
489296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//          subtrees[0] = subtree;
490296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//          org.bouncycastle.asn1.x509.NameConstraints constraints =
491296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.NameConstraints(
492296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                  subtrees, subtrees);
493fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//            constraintBytes[i] = constraints.getEncoded();
494fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        }
495fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//        System.out.println("XXX"+Arrays.deepToString(constraintBytes)+"XXX");
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
498fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        for (int i = 0; i < constraintBytes.length; i++) {
499fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project            selector.setNameConstraints(constraintBytes[i]);
500beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            assertTrue(Arrays.equals(constraintBytes[i],
501beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                                     selector.getNameConstraints()));
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
506229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getPathToNames()
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
508beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_getPathToNames() throws Exception {
5095ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san0 = new GeneralName(new OtherName(new ObjectIdentifier("1.2.3.4.5"),
5105ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                new byte[] { 1, 2, 0, 1 }));
5115ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san1 = new GeneralName(new RFC822Name("rfc@822.Name"));
5125ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san2 = new GeneralName(new DNSName("dNSName"));
5135ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
5145ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // http://b/27197633 (Missing replacement for ORAddress)
5155ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // GeneralName san3 = new GeneralName(new X400Address((byte[])null));
5165ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san4 = new GeneralName(new X500Name("O=Organization"));
5175ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san6 = new GeneralName(new URIName("http://uniform.Resource.Id"));
5185ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san7 = new GeneralName(new IPAddressName("1.1.1.1"));
5195ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san8 = new GeneralName(new OIDName("1.2.3.4444.55555"));
5205ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
521beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
522beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        GeneralNames sans1 = new GeneralNames();
5235ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san0);
5245ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san1);
5255ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san2);
5265ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
5275ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // http://b/27197633 (Missing replacement for ORAddress)
5285ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // sans1.add(san3);
5295ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san4);
5305ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san6);
5315ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san7);
5325ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san8);
533beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        GeneralNames sans2 = new GeneralNames();
5345ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans2.add(san0);
535beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
536beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        TestCert cert1 = new TestCert(sans1);
537beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        TestCert cert2 = new TestCert(sans2);
538beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        X509CertSelector selector = new X509CertSelector();
539beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setMatchAllSubjectAltNames(true);
540beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
541beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setPathToNames(null);
542beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("Any certificate should match in the case of null "
543beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "subjectAlternativeNames criteria.",
544beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
545beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
5465ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        Collection<List<?>> sans = getGeneralNamePairList(sans1);
547beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
548beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setPathToNames(sans);
549beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.getPathToNames();
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
553229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getPolicy()
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getPolicy() throws IOException {
556beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        String[] policies1 = new String[] {
557beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.1",
558beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.2",
559beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.3",
560beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.4",
561beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.8",
562beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.9",
563beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.5",
564beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.6",
565beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.7"
566beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        };
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] policies2 = new String[] { "1.3.6.7.3.1" };
569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p1 = new HashSet<String>(Arrays.asList(policies1));
571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p2 = new HashSet<String>(Arrays.asList(policies2));
572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(null);
576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getPolicy());
577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p1);
579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned date should be equal to specified", p1, selector.getPolicy());
580f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p2);
582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned date should be equal to specified", p2, selector.getPolicy());
583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
586229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getPrivateKeyValid()
587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getPrivateKeyValid() {
589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100);
590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200);
591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getPrivateKeyValid());
594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(date1);
595beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned date should be equal to specified",
596beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   date1.equals(selector.getPrivateKeyValid()));
597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.getPrivateKeyValid().setTime(200);
598beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned date should be equal to specified",
599beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   date1.equals(selector.getPrivateKeyValid()));
600beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned date should differ",
601beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    date2.equals(selector.getPrivateKeyValid()));
602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
605229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getSerialNumber()
606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSerialNumber() {
608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser1 = new BigInteger("10000");
609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser2 = new BigInteger("10001");
610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getSerialNumber());
613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(ser1);
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned serial number should be equal to specified",
615beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                     ser1, selector.getSerialNumber());
616beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned serial number should differ",
617beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    ser2.equals(selector.getSerialNumber()));
618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
621229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getSubject()
622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubject() {
624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal("O=First Org.");
625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal("O=Second Org.");
626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getSubject());
629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub1);
630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned subject should be equal to specified", sub1,
631beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                     selector.getSubject());
632beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned subject should differ",
633beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    sub2.equals(selector.getSubject()));
634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
637229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getSubjectAlternativeNames()
638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
639beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_getSubjectAlternativeNames() throws Exception {
6405ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san1 = new GeneralName(new RFC822Name("rfc@822.Name"));
6415ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san2 = new GeneralName(new DNSName("dNSName"));
642beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
643beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        GeneralNames sans = new GeneralNames();
6445ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans.add(san1);
6455ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans.add(san2);
646beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
647beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        TestCert cert_1 = new TestCert(sans);
648beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        X509CertSelector selector = new X509CertSelector();
649beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
650beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertNull("Selector should return null",
651beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.getSubjectAlternativeNames());
652beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
6535ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        selector.setSubjectAlternativeNames(getGeneralNamePairList(sans));
654beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The certificate should match the selection criteria.",
655beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert_1));
656beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.getSubjectAlternativeNames().clear();
657beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The modification of initialization object "
658beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "should not affect the modification "
659beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "of internal object.",
660beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert_1));
661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
664229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getSubjectAsBytes()
665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
666beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_getSubjectAsBytes() throws Exception {
667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
669beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
670beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                  116, 32, 79, 114, 103, 46 };
671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
673beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
674beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                  110, 100, 32, 79, 114, 103, 46 };
675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
680beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertNull("Selector should return null",
681beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.getSubjectAsBytes());
682beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubject(sub1);
683beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned issuer should be equal to specified",
684beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   Arrays.equals(name1, selector.getSubjectAsBytes()));
685beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned issuer should differ",
68697a3d514797ffddba65aaa50e352538820a52078Tobias Thierer                    Arrays.equals(name2, selector.getSubjectAsBytes()));
687beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubject(sub2);
688beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned issuer should be equal to specified",
689beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   Arrays.equals(name2, selector.getSubjectAsBytes()));
690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
693229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getSubjectAsString()
694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectAsString() {
696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name1 = "O=First Org.";
697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name2 = "O=Second Org.";
698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Selector should return null", selector.getSubjectAsString());
703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub1);
704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned subject should be equal to specified",
705beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                     name1, selector.getSubjectAsString());
706beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned subject should differ",
707beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    name2.equals(selector.getSubjectAsString()));
708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub2);
709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The returned subject should be equal to specified",
710beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                     name2, selector.getSubjectAsString());
711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
714229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getSubjectKeyIdentifier()
715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectKeyIdentifier() {
717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid1 = new byte[] { 1, 2, 3, 4, 5 }; // random value
718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid2 = new byte[] { 4, 5, 5, 4, 3, 2, 1 }; // random value
719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
721beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertNull("Selector should return null", selector.getSubjectKeyIdentifier());
722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(skid1);
723beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned keyID should be equal to specified",
724beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   Arrays.equals(skid1, selector.getSubjectKeyIdentifier()));
725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.getSubjectKeyIdentifier()[0]++;
726beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned keyID should be equal to specified",
727beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   Arrays.equals(skid1, selector.getSubjectKeyIdentifier()));
728beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned keyID should differ",
729beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    Arrays.equals(skid2, selector.getSubjectKeyIdentifier()));
730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
733229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getSubjectPublicKey()
734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getSubjectPublicKey() throws Exception {
736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // SubjectPublicKeyInfo ::= SEQUENCE {
738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // algorithm AlgorithmIdentifier,
739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // subjectPublicKey BIT STRING }
740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] enc = { 0x30, 0x0E, // SEQUENCE
741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x30, 0x07, // SEQUENCE
742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x06, 0x02, 0x03, 0x05,// OID
743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x01, 0x01, 0x07, // ANY
744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x03, 0x03, 0x01, 0x01, 0x06, // subjectPublicKey
745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(enc);
750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey key = selector.getSubjectPublicKey();
751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("0.3.5", key.getAlgorithm());
752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("X.509", key.getFormat());
753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(Arrays.equals(enc, key.getEncoded()));
754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(key.toString());
755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        key = new MyPublicKey();
757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(key);
759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey keyActual = selector.getSubjectPublicKey();
760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(key, keyActual);
761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(key.getAlgorithm(), keyActual.getAlgorithm());
762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
765229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#getSubjectPublicKeyAlgID()
766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
767beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_getSubjectPublicKeyAlgID() throws Exception {
768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
770beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        String[] validOIDs = { "0.0.20", "1.25.0", "2.0.39", "0.2.10", "1.35.15", "2.17.89" };
771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
772beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertNull("Selector should return null", selector.getSubjectPublicKeyAlgID());
773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validOIDs.length; i++) {
775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setSubjectPublicKeyAlgID(validOIDs[i]);
777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertEquals(validOIDs[i], selector.getSubjectPublicKeyAlgID());
778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IOException e) {
779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                System.out.println("t = " + e.getMessage());
780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //fail("Unexpected exception " + e.getMessage());
781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
78487eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        String pkaid1 = "1.2.840.113549.1.1.1"; // RSA encryption
78587eb4de6347e1be029cde77dd43ad9b1af901472Urs Grob        String pkaid2 = "1.2.840.113549.1.1.4"; // MD5 with RSA encryption
786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
787beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubjectPublicKeyAlgID(pkaid1);
788beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("The returned oid should be equal to specified",
789beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   pkaid1.equals(selector.getSubjectPublicKeyAlgID()));
790beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertFalse("The returned oid should differ",
791beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    pkaid2.equals(selector.getSubjectPublicKeyAlgID()));
792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
795229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#match(java.security.cert.Certificate)
796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
797beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_matchLjava_security_cert_Certificate() throws Exception {
798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(null));
800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory certFact = CertificateFactory.getInstance("X509");
802beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        X509Certificate cert1 = (X509Certificate)
803beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                certFact.generateCertificate(new ByteArrayInputStream(
804beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                        TestUtils.getX509Certificate_v3()));
805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
806beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        X509Certificate cert2 = (X509Certificate)
807beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                certFact.generateCertificate(new ByteArrayInputStream(
808beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                        TestUtils.getX509Certificate_v1()));
809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert1);
811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert1));
812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert2));
813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert2);
815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert1));
816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert2));
817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
820229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setAuthorityKeyIdentifier(byte[])
821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
822beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setAuthorityKeyIdentifierLB$() throws Exception {
823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] akid1 = new byte[] { 1, 2, 3, 4, 5 }; // random value
826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] akid2 = new byte[] { 5, 4, 3, 2, 1 }; // random value
827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(akid1);
828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(akid2);
829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(null);
831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getAuthorityKeyIdentifier());
836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(akid1);
838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should not match the selection criteria.",
839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setAuthorityKeyIdentifier(akid2);
843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should not match the selection criteria.",
846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        akid2[0]++;
849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
854229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setBasicConstraints(int)
855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setBasicConstraintsLint() {
857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] invalidValues = { -3, -4, -5, 1000000000 };
859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setBasicConstraints(-3);
862d4b7449574ca69c713a3f2230cb77c68ee642700Tobias Thierer                fail();
863beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            } catch (IllegalArgumentException expected) {
864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] validValues = { -2, -1, 0, 1, 2, 3, 10, 20 };
868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.setBasicConstraints(validValues[i]);
870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(validValues[i], selector.getBasicConstraints());
871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
875229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setCertificate(java.security.cert.Certificate)
876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setCertificateLjava_security_cert_X509Certificate()
878beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            throws Exception {
879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert("same certificate");
881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert("other certificate");
882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(null);
885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match in the case of null "
886beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                + "certificateEquals criteria.",
887beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert1);
889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
890beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
892beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(cert2);
894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
895beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificate(null);
897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getCertificate());
898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
901229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setCertificateValid(java.util.Date)
902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setCertificateValidLjava_util_Date()
904beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            throws Exception {
905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100);
908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200);
909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(date1);
910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(date2);
911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(null);
913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(selector.getCertificateValid());
914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(date1);
915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert1));
917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setCertificateValid(date2);
920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        date2.setTime(300);
921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
926229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setExtendedKeyUsage(Set<String>)
927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
928beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setExtendedKeyUsageLjava_util_Set() throws Exception {
929beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        HashSet<String> ku1 = new HashSet<String>(Arrays.asList(new String[] {
930beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.1",
931beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.2",
932beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.3",
933beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.4",
934beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.8",
935beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.9",
936beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.5",
937beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.6",
938beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.7"
939beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        }));
940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> ku2 = new HashSet<String>(Arrays.asList(new String[] {
941beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.1",
942beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.2",
943beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.3",
944beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.4",
945beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.8",
946beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.9",
947beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.5",
948beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.6"
949beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        }));
950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(ku1);
951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(ku2);
952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
955beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setExtendedKeyUsage(null);
956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
957beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "extendedKeyUsage criteria.",
958beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1)&& selector.match(cert2));
959beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setExtendedKeyUsage(ku1);
960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(ku1, selector.getExtendedKeyUsage());
961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
962beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setExtendedKeyUsage(ku2);
963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(ku2, selector.getExtendedKeyUsage());
964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
967229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setIssuer(byte[])
968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
969beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setIssuerLB$() throws Exception {
970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                116, 32, 79, 114, 103, 46 };
974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                110, 100, 32, 79, 114, 103, 46 };
978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal(name1);
979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal(name2);
980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(iss1);
981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(iss2);
982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
985beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setIssuer((byte[]) null);
986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
987beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "in the case of null issuer criteria.", selector.match(cert1)
988beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   && selector.match(cert2));
989beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setIssuer(name1);
990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
991beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
993beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
994beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setIssuer(name2);
995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
996beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1000229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setIssuer(java.lang.String)
1001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1002beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setIssuerLjava_lang_String() throws Exception {
1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name1 = "O=First Org.";
1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name2 = "O=Second Org.";
1006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal(name1);
1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal(name2);
1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(iss1);
1009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(iss2);
1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1013beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setIssuer((String) null);
1014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1015beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "in the case of null issuer criteria.",
1016beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1017beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setIssuer(name1);
1018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1019beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1021beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1022beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setIssuer(name2);
1023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1024beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
1025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1028229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setIssuer(javax.security.auth.x500.X500Principal)
1029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setIssuerLjavax_security_auth_x500_X500Principal()
1031beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            throws Exception {
1032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss1 = new X500Principal("O=First Org.");
1033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal iss2 = new X500Principal("O=Second Org.");
1034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(iss1);
1035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(iss2);
1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer((X500Principal) null);
1039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1040beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "in the case of null issuer criteria.",
1041beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer(iss1);
1043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1044beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1046beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setIssuer(iss2);
1048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1049beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
1050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1053229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setKeyUsage(boolean)
1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1055beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setKeyUsageZ() throws Exception {
1056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean[] ku1 = new boolean[] { true, true, true, true, true, true,
1057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                true, true, true };
1058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // decipherOnly is disallowed
1059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean[] ku2 = new boolean[] { true, true, true, true, true, true,
1060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                true, true, false };
1061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(ku1);
1062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(ku2);
1063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert3 = new TestCert((boolean[]) null);
1064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setKeyUsage(null);
1068beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("Any certificate should match in the case of null keyUsage criteria.",
1069beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setKeyUsage(ku1);
1071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1072beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1074beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate which does not have a keyUsage extension "
1076beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "implicitly allows all keyUsage values.",
1077beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert3));
1078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setKeyUsage(ku2);
1079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ku2[0] = !ku2[0];
1080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.match(cert2));
1082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1085229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setMatchAllSubjectAltNames(boolean)
1086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setMatchAllSubjectAltNamesZ() {
1088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert = new TestCert();
1089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert));
1092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(null));
1094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1096adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1097229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setNameConstraints(byte[]
1098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        bytes)
1099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setNameConstraintsLB$() throws IOException {
1101296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski   // Used to generate following byte array
1102296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//    org.bouncycastle.asn1.x509.GeneralName[] name_constraints =
1103296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//        new org.bouncycastle.asn1.x509.GeneralName[] {
1104296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.GeneralName(1, "822.Name"),
1105296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.GeneralName(1, "rfc@822.Name"),
1106296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.GeneralName(2, "Name.org"),
1107296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.GeneralName(2, "dNS.Name.org"),
1108fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
1109296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.GeneralName(6, "Resource.Id"),
1110296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.GeneralName(6,
1111296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                  "uniform.Resource.Id"),
1112296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.GeneralName(7, "1.1.1.1"),
1113fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
1114296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//              new org.bouncycastle.asn1.x509.GeneralName(7,
1115296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                  new org.bouncycastle.asn1.DEROctetString(new byte[] {
1116296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 })),
1117296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//        };
1118fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project//
1119296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//      constraintBytes = new byte[name_constraints.length][];
1120296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//
1121296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//      for (int i = 0; i < name_constraints.length; i++) {
1122296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//        org.bouncycastle.asn1.x509.GeneralSubtree subtree =
1123296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//            new org.bouncycastle.asn1.x509.GeneralSubtree(
1124296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                name_constraints[i]);
1125296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//        org.bouncycastle.asn1.x509.GeneralSubtree[] subtrees =
1126296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//            new org.bouncycastle.asn1.x509.GeneralSubtree[1];
1127296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//        subtrees[0] = subtree;
1128296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//        org.bouncycastle.asn1.x509.NameConstraints constraints =
1129296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//            new org.bouncycastle.asn1.x509.NameConstraints(
1130296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//                subtrees, subtrees);
1131296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//          constraintBytes[i] = constraints.getEncoded();
1132296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//      }
1133296750b7ff5863ba5beb6120540118ca2c800ce6Piotr Jastrzebski//      System.out.println("XXX"+Arrays.deepToString(constraintBytes)+"XXX");
1134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1136fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        for (int i = 0; i < constraintBytes.length; i++) {
1137fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project            selector.setNameConstraints(constraintBytes[i]);
1138beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            assertTrue(Arrays.equals(constraintBytes[i], selector.getNameConstraints()));
1139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1143229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setPathToNames(Collection<List<?>>)
1144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1145beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setPathToNamesLjava_util_Collection() throws Exception {
11465ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san0 = new GeneralName(new OtherName(new ObjectIdentifier("1.2.3.4.5"),
1147beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                                                         new byte[] { 1, 2, 0, 1 }));
11485ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san1 = new GeneralName(new RFC822Name("rfc@822.Name"));
11495ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san2 = new GeneralName(new DNSName("dNSName"));
11505ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
11515ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // http://b/27197633 (Missing replacement for ORAddress)
11525ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // GeneralName san3 = new GeneralName(new X400Address(new byte[8]));
11535ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san4 = new GeneralName(new X500Name("O=Organization"));
11545ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san6 = new GeneralName(new URIName("http://uniform.Resource.Id"));
11555ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san7 = new GeneralName(new IPAddressName("1.1.1.1"));
11565ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san8 = new GeneralName(new OIDName("1.2.3.4444.55555"));
1157beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
1158beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        GeneralNames sans1 = new GeneralNames();
11595ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san0);
11605ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san1);
11615ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san2);
11625ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
11635ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // http://b/27197633 (Missing replacement for ORAddress)
11645ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // sans1.add(san3);
11655ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san4);
11665ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san6);
11675ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san7);
11685ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san8);
1169beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        GeneralNames sans2 = new GeneralNames();
11705ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans2.add(san0);
1171beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
1172beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        TestCert cert1 = new TestCert(sans1);
1173beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        TestCert cert2 = new TestCert(sans2);
1174beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        X509CertSelector selector = new X509CertSelector();
1175beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setMatchAllSubjectAltNames(true);
1176beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
1177beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setPathToNames(null);
1178beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("Any certificate should match in the case of null "
1179beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "subjectAlternativeNames criteria.",
1180beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1181beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
11825ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        Collection<List<?>> sans = getGeneralNamePairList(sans1);
1183beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
1184beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setPathToNames(sans);
1185beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.getPathToNames();
1186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1189229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setPolicy(Set<String>)
1190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setPolicyLjava_util_Set() throws IOException {
1192beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        String[] policies1 = new String[] {
1193beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.1",
1194beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.2",
1195beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.3",
1196beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.4",
1197beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.8",
1198beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.9",
1199beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.5",
1200beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.6",
1201beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.3.6.1.5.5.7.3.7"
1202beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        };
1203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] policies2 = new String[] { "1.3.6.7.3.1" };
1205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p1 = new HashSet<String>(Arrays.asList(policies1));
1207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> p2 = new HashSet<String>(Arrays.asList(policies2));
1208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(policies1);
1212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(policies2);
1213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(null);
1215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1216beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                + "privateKeyValid criteria.",
1217beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p1);
1220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1221beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1223beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1224f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPolicy(p2);
1226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1227beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert1));
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#setPrivateKeyValid(java.util.Date)
1234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setPrivateKeyValidLjava_util_Date()
1236beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            throws Exception {
1237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date1 = new Date(100000000);
1238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date2 = new Date(200000000);
1239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date3 = new Date(300000000);
1240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date4 = new Date(150000000);
1241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date5 = new Date(250000000);
1242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(date1, date2);
1243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(date2, date3);
1244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(null);
1248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1249beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                + "privateKeyValid criteria.",
1250beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(date4);
1252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1253beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1255beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setPrivateKeyValid(date5);
1257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        date5.setTime(date4.getTime());
1258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1259beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
1260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1263229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setSerialNumber(java.math.BigInteger)
1264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSerialNumberLjava_math_BigInteger()
1266beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            throws Exception {
1267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser1 = new BigInteger("10000");
1268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger ser2 = new BigInteger("10001");
1269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(ser1);
1270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(ser2);
1271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(null);
1274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1275beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "serialNumber criteria.",
1276beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(ser1);
1278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1279beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1281beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSerialNumber(ser2);
1283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1284beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
1285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1288229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setSubject(byte[])
1289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1290beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setSubjectLB$() throws Exception {
1291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name1 = new byte[]
1292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=First Org." issuer name;
1293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 21, 49, 19, 48, 17, 6, 3, 85, 4, 10, 19, 10, 70, 105, 114, 115,
1294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                116, 32, 79, 114, 103, 46 };
1295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] name2 = new byte[]
1296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // manually obtained DER encoding of "O=Second Org." issuer name;
1297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        { 48, 22, 49, 20, 48, 18, 6, 3, 85, 4, 10, 19, 11, 83, 101, 99, 111,
1298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                110, 100, 32, 79, 114, 103, 46 };
1299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
1300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
1301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sub1);
1302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sub2);
1303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1306beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubject((byte[]) null);
1307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1308beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "in the case of null issuer criteria.",
1309beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1310beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubject(name1);
1311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1312beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1314beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1315beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubject(name2);
1316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1317beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
1318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1321229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setSubject(java.lang.String)
1322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1323beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setSubjectLjava_lang_String() throws Exception {
1324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name1 = "O=First Org.";
1325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name2 = "O=Second Org.";
1326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal(name1);
1327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal(name2);
1328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sub1);
1329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sub2);
1330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1332beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubject((String) null);
1333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1334beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "in the case of null subject criteria.",
1335beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1336beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubject(name1);
1337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1338beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1340beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1341beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubject(name2);
1342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1343beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
1344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1347229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setSubject(javax.security.auth.x500.X500Principal)
1348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectLjavax_security_auth_x500_X500Principal()
1350beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            throws Exception {
1351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub1 = new X500Principal("O=First Org.");
1352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X500Principal sub2 = new X500Principal("O=Second Org.");
1353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sub1);
1354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sub2);
1355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject((X500Principal) null);
1358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificates should match "
1359beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "in the case of null subjcet criteria.",
1360beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub1);
1362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1363beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1365beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubject(sub2);
1367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1368beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
1369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1372229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setSubjectAlternativeNames(Collection<List<?>>)
1373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1374beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setSubjectAlternativeNamesLjava_util_Collection() throws Exception {
1375beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
13765ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san0 = new GeneralName(new OtherName(new ObjectIdentifier("1.2.3.4.5"),
1377beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                                                         new byte[] { 1, 2, 0, 1 }));
13785ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san1 = new GeneralName(new RFC822Name("rfc@822.Name"));
13795ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san2 = new GeneralName(new DNSName("dNSName"));
13805ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
13815ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // http://b/27197633 (Missing replacement for ORAddress)
13825ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // GeneralName san3 = new GeneralName(new X400Address((byte[])null));
13835ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san4 = new GeneralName(new X500Name("O=Organization"));
13845ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san6 = new GeneralName(new URIName("http://uniform.Resource.Id"));
13855ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san7 = new GeneralName(new IPAddressName("1.1.1.1"));
13865ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san8 = new GeneralName(new OIDName("1.2.3.4444.55555"));
1387beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
1388beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        GeneralNames sans1 = new GeneralNames();
13895ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san0);
13905ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san1);
13915ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san2);
13925ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
13935ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // http://b/27197633 (Missing replacement for ORAddress)
13945ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        // sans1.add(san3);
13955ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san4);
13965ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san6);
13975ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san7);
13985ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san8);
1399beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        GeneralNames sans2 = new GeneralNames();
14005ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans2.add(san0);
1401beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
1402beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        TestCert cert1 = new TestCert(sans1);
1403beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        TestCert cert2 = new TestCert(sans2);
1404beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        X509CertSelector selector = new X509CertSelector();
1405beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setMatchAllSubjectAltNames(true);
1406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1407beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubjectAlternativeNames(null);
1408beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        assertTrue("Any certificate should match in the case of null "
1409beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "subjectAlternativeNames criteria.",
1410beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1411beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
14125ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        Collection<List<?>> sans;
14135ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans = getGeneralNamePairList(sans1);
1414beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
1415beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubjectAlternativeNames(sans);
1416beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
1417beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.getSubjectAlternativeNames();
1418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1419f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1421229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setSubjectKeyIdentifier(byte[])
1422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1423beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setSubjectKeyIdentifierLB$() throws Exception {
1424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid1 = new byte[] { 1, 2, 3, 4, 5 }; // random value
1425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] skid2 = new byte[] { 5, 4, 3, 2, 1 }; // random value
1426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(skid1);
1427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(skid2);
1428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(null);
1431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1432beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                + "serialNumber criteria.",
1433beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(skid1);
1435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1436beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1438beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectKeyIdentifier(skid2);
1440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        skid2[0]++;
1441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1442beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
1443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1446229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setSubjectPublicKey(byte[])
1447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectPublicKeyLB$() throws Exception {
1449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //SubjectPublicKeyInfo  ::=  SEQUENCE  {
1451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //    algorithm            AlgorithmIdentifier,
1452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //    subjectPublicKey     BIT STRING  }
1453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] enc = { 0x30, 0x0E, // SEQUENCE
1454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x30, 0x07, // SEQUENCE
1455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x06, 0x02, 0x03, 0x05,//OID
1456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x01, 0x01, 0x07, //ANY
1457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0x03, 0x03, 0x01, 0x01, 0x06, // subjectPublicKey
1458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
1459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(enc);
1463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey key = selector.getSubjectPublicKey();
1464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("0.3.5", key.getAlgorithm());
1465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("X.509", key.getFormat());
1466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(Arrays.equals(enc, key.getEncoded()));
1467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(key.toString());
1468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1471229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setSubjectPublicKey(java.security.PublicKey key)
1472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setSubjectPublicKeyLjava_security_PublicKey()
1474beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            throws Exception {
1475beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        PublicKey pkey1 = new TestKeyPair("RSA").getPublic();
1476beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        PublicKey pkey2 = new TestKeyPair("DSA").getPublic();
1477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(pkey1);
1479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(pkey2);
1480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey((PublicKey) null);
1483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1484beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "subjectPublicKey criteria.",
1485beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(pkey1);
1487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1488beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1490beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectPublicKey(pkey2);
1492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1493beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
1494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1497229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#setSubjectPublicKeyAlgID(java.lang.String)
1498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1499beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom    public void test_setSubjectPublicKeyAlgIDLjava_lang_String() throws Exception {
1500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pkaid1 = "1.2.840.113549.1.1.1"; // RSA (source:
1503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // http://asn1.elibel.tm.fr)
1504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pkaid2 = "1.2.840.10040.4.1"; // DSA (source:
1505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // http://asn1.elibel.tm.fr)
1506beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        PublicKey pkey1 = new TestKeyPair("RSA").getPublic();;
1507beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        PublicKey pkey2 = new TestKeyPair("DSA").getPublic();;
1508beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
1509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(pkey1);
1510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(pkey2);
1511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1512beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubjectPublicKeyAlgID(null);
1513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Any certificate should match in the case of null "
1514beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   + "subjectPublicKeyAlgID criteria.",
1515beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1) && selector.match(cert2));
1516beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom
1517beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        String[] validOIDs = {
1518beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "0.0.20",
1519beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.25.0",
1520beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "2.0.39",
1521beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "0.2.10",
1522beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "1.35.15",
1523beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "2.17.89",
1524beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "2.5.29.16",
1525beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "2.5.29.17",
1526beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "2.5.29.30",
1527beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "2.5.29.32",
1528beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            "2.5.29.37"
1529beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        };
1530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validOIDs.length; i++) {
1532beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            selector.setSubjectPublicKeyAlgID(validOIDs[i]);
1533beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            assertEquals(validOIDs[i], selector.getSubjectPublicKeyAlgID());
1534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1535f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
15365e90575df29d220f285a363160726d402d056b4fPiotr Jastrzebski        String[] invalidOIDs = { "3.20", "1.40", "3.10" };
1537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidOIDs.length; i++) {
1538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
1539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                selector.setSubjectPublicKeyAlgID(invalidOIDs[i]);
1540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IOException wasn't thrown for " + invalidOIDs[i]);
1541beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            } catch (IOException expected) {
1542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1545beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubjectPublicKeyAlgID(pkaid1);
1546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1547beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert1));
1548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse("The certificate should not match the selection criteria.",
1549beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                    selector.match(cert2));
1550beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        selector.setSubjectPublicKeyAlgID(pkaid2);
1551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("The certificate should match the selection criteria.",
1552beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom                   selector.match(cert2));
1553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
1556229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#toString()
1557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toString() {
1559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
1560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(selector.toString());
1561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public class MyPublicKey implements PublicKey {
1564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static final long serialVersionUID = 2899528375354645752L;
1565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public MyPublicKey() {
1567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super();
1568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getAlgorithm() {
1571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return "PublicKey";
1572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getFormat() {
1575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return "Format";
1576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getEncoded() {
1579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new byte[0];
1580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public long getSerVerUID() {
1583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return serialVersionUID;
1584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private class TestCert extends X509Certificate {
1588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static final long serialVersionUID = 176676115254260405L;
1590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /* Stuff fields */
1592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected String equalCriteria = null; // to simplify method equals()
1593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected BigInteger serialNumber = null;
1595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected X500Principal issuer = null;
1597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected X500Principal subject = null;
1599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected byte[] keyIdentifier = null;
1601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Date date = null;
1603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Date notBefore = null;
1605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Date notAfter = null;
1607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected PublicKey key = null;
1609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected boolean[] keyUsage = null;
1611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected List<String> extKeyUsage = null;
1613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected int pathLen = 1;
1615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected GeneralNames sans = null;
1617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected byte[] encoding = null;
1619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected String[] policies = null;
1621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Collection<List<?>> collection = null;
1623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /* Stuff methods */
1625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert() {
1626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(GeneralNames sans) {
1629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setSubjectAlternativeNames(sans);
1630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Collection<List<?>> collection) {
1633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setCollection(collection);
1634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(String equalCriteria) {
1637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setEqualCriteria(equalCriteria);
1638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(String[] policies) {
1641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setPolicies(policies);
1642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(BigInteger serial) {
1645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setSerialNumber(serial);
1646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(X500Principal principal) {
1649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setIssuer(principal);
1650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setSubject(principal);
1651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(byte[] array) {
1654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setKeyIdentifier(array);
1655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Date date) {
1658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setDate(date);
1659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Date notBefore, Date notAfter) {
1662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setPeriod(notBefore, notAfter);
1663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(PublicKey key) {
1666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setPublicKey(key);
1667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(boolean[] keyUsage) {
1670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setKeyUsage(keyUsage);
1671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(Set<String> extKeyUsage) {
1674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            setExtendedKeyUsage(extKeyUsage);
1675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestCert(int pathLen) {
1678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.pathLen = pathLen;
1679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setSubjectAlternativeNames(GeneralNames sans) {
1682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.sans = sans;
1683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setCollection(Collection<List<?>> collection) {
1686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.collection = collection;
1687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setPolicies(String[] policies) {
1690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.policies = policies;
1691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setExtendedKeyUsage(Set<String> extKeyUsage) {
1694beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            this.extKeyUsage = (extKeyUsage == null) ? null : new ArrayList<String>(extKeyUsage);
1695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setKeyUsage(boolean[] keyUsage) {
1698beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom            this.keyUsage = (keyUsage == null) ? null : (boolean[]) keyUsage.clone();
1699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setPublicKey(PublicKey key) {
1702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.key = key;
1703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setPeriod(Date notBefore, Date notAfter) {
1706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.notBefore = notBefore;
1707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.notAfter = notAfter;
1708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setSerialNumber(BigInteger serial) {
1711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.serialNumber = serial;
1712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setEqualCriteria(String equalCriteria) {
1715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.equalCriteria = equalCriteria;
1716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setIssuer(X500Principal issuer) {
1719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.issuer = issuer;
1720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setSubject(X500Principal subject) {
1723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.subject = subject;
1724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setKeyIdentifier(byte[] subjectKeyID) {
1727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.keyIdentifier = (byte[]) subjectKeyID.clone();
1728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setDate(Date date) {
1731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.date = new Date(date.getTime());
1732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void setEncoding(byte[] encoding) {
1735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.encoding = encoding;
1736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /* Method implementations */
1739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean equals(Object cert) {
1740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (cert == null) {
1741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return false;
1742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((equalCriteria == null)
1744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    || (((TestCert) cert).equalCriteria == null)) {
1745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return false;
1746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
1747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return equalCriteria.equals(((TestCert) cert).equalCriteria);
1748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String toString() {
1752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (equalCriteria != null) {
1753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return equalCriteria;
1754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return "";
1756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void checkValidity() throws CertificateExpiredException,
1759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateNotYetValidException {
1760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void checkValidity(Date date)
1763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws CertificateExpiredException,
1764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateNotYetValidException {
1765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (this.date == null) {
1766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new CertificateExpiredException();
1767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int result = this.date.compareTo(date);
1769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (result > 0) {
1770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new CertificateExpiredException();
1771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (result < 0) {
1773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new CertificateNotYetValidException();
1774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int getVersion() {
1778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return 3;
1779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public BigInteger getSerialNumber() {
1782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return (serialNumber == null) ? new BigInteger("1111")
1783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    : serialNumber;
1784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Principal getIssuerDN() {
1787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return issuer;
1788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public X500Principal getIssuerX500Principal() {
1791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return issuer;
1792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Principal getSubjectDN() {
1795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return subject;
1796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public X500Principal getSubjectX500Principal() {
1799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return subject;
1800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Date getNotBefore() {
1803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Date getNotAfter() {
1807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getTBSCertificate() throws CertificateEncodingException {
1811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getSignature() {
1815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getSigAlgName() {
1819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public String getSigAlgOID() {
1823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getSigAlgParams() {
1827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean[] getIssuerUniqueID() {
1831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean[] getSubjectUniqueID() {
1835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean[] getKeyUsage() {
1839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return keyUsage;
1840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public List<String> getExtendedKeyUsage()
1843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws CertificateParsingException {
1844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return extKeyUsage;
1845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int getBasicConstraints() {
1848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return pathLen;
1849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void verify(PublicKey key) throws CertificateException,
1852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                NoSuchAlgorithmException, InvalidKeyException,
1853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                NoSuchProviderException, SignatureException {
1854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void verify(PublicKey key, String sigProvider)
1857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws CertificateException, NoSuchAlgorithmException,
1858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                InvalidKeyException, NoSuchProviderException,
1859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SignatureException {
1860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public PublicKey getPublicKey() {
1863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return key;
1864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public byte[] getEncoded() throws CertificateEncodingException {
1867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return encoding;
1868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Set<String> getNonCriticalExtensionOIDs() {
1871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Set<String> getCriticalExtensionOIDs() {
1875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18785ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        public byte[] getExtensionValue (String oid) {
18795ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera           if (("2.5.29.14".equals(oid)) || ("2.5.29.35".equals(oid))) {
18805ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                try {
18815ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    DerOutputStream out = new DerOutputStream();
18825ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    out.putOctetString(keyIdentifier);
18835ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    return out.toByteArray();
18845ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                } catch (IOException e) {
18855ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    throw new IllegalStateException("Unexpected IOException" , e);
18865ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                }
1887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.16".equals(oid)) {
18895ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                try {
18905ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    DerOutputStream outputStream = new DerOutputStream();
18915ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    outputStream.putOctetString(new PrivateKeyUsageExtension(notBefore, notAfter).getExtensionValue());
18925ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    return outputStream.toByteArray();
18935ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                } catch (IOException e) {
18945ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    throw new IllegalStateException("Unexpected IOException", e);
1895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
1896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.17".equals(oid) && (sans != null)) {
18985ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                if (sans.names() == null) {
1899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    return null;
1900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
19015ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                try {
19025ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    DerOutputStream outputStream = new DerOutputStream();
19035ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    outputStream.putOctetString(new SubjectAlternativeNameExtension(sans).getExtensionValue());
19045ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    return outputStream.toByteArray();
19055ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                } catch (IOException e) {
19065ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    throw new IllegalStateException("Unexpected IOException", e);
19075ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                }
1908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ("2.5.29.32".equals(oid) && (policies != null)
1910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && (policies.length > 0)) {
19115ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                try {
19125ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    List<PolicyInformation> policyInformations = new ArrayList();
19135ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
19145ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    for (String p : policies) {
19155ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        policyInformations.add(new PolicyInformation(new CertificatePolicyId(new ObjectIdentifier(p)), Collections.EMPTY_SET));
19165ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    }
19175ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    DerOutputStream outputStream = new DerOutputStream();
19185ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    outputStream.putOctetString(new CertificatePoliciesExtension(policyInformations).getExtensionValue());
19195ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    return outputStream.toByteArray();
19205ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                } catch (IOException e) {
19215ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    throw new IllegalStateException("Unexpected IOException", e);
1922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
1923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
19245ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
19255ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            if ("2.5.29.30".equals(oid)) {
19265ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                throw new IllegalStateException("2.5.29.30");
19275ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            }
19285ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
19295ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            if ("2.5.29.19".equals(oid)) {
19305ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                throw new IllegalStateException("2.5.29.30");
1931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19335ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            if (("2.5.29.37".equals(oid)) && (extKeyUsage != null)) {
19345ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                throw new IllegalStateException("2.5.29.37");
19355ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            }
1936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean hasUnsupportedCriticalExtension() {
1940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
1941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1942f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1944f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public X509Certificate rootCertificate;
1946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public X509Certificate endCertificate;
1948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public MyCRL crl;
1950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private X509CertSelector theCertSelector;
1952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private CertPathBuilder builder;
1954f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void setupEnvironment() throws Exception {
1956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // create certificates and CRLs
1957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory cf = CertificateFactory.getInstance("X.509");
1958fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        ByteArrayInputStream bi = new ByteArrayInputStream(TestUtils.rootCert.getBytes());
1959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        rootCertificate = (X509Certificate) cf.generateCertificate(bi);
1960fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        bi = new ByteArrayInputStream(TestUtils.endCert.getBytes());
1961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        endCertificate = (X509Certificate) cf.generateCertificate(bi);
1962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger revokedSerialNumber = BigInteger.valueOf(1);
1964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        crl = new MyCRL("X.509");
1965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        X509CRL rootCRL = X509CRL;
1966beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom//        X509CRL interCRL = X509CRLExample.createCRL(interCert,
1967beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom//                                                    interPair.getPrivate(),
1968beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom//                                                    revokedSerialNumber);
1969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // create CertStore to support path building
1971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        List<Object> list = new ArrayList<Object>();
1972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.add(rootCertificate);
1974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list.add(endCertificate);
1975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1976beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom//        CollectionCertStoreParameters params = new CollectionCertStoreParameters(list);
1977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        CertStore store = CertStore.getInstance("Collection", params);
1978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//
1979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector = new X509CertSelector();
1980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setCertificate(endCertificate);
1981beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        theCertSelector.setIssuer(endCertificate.getIssuerX500Principal().getEncoded());
1982f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1983beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        // build the path
1984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        builder = CertPathBuilder.getInstance("PKIX");
1985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
1987f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private CertPath buildCertPath() throws InvalidAlgorithmParameterException {
1989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PKIXCertPathBuilderResult result = null;
1990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PKIXBuilderParameters buildParams = new PKIXBuilderParameters(
1991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Collections.singleton(new TrustAnchor(rootCertificate, null)),
1992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                theCertSelector);
1993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1994beee0a569bf1077f0d3be516fed63661fcedde5cBrian Carlstrom        result = (PKIXCertPathBuilderResult) builder.build(buildParams);
1995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(CertPathBuilderException e) {
1996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
1997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return result.getCertPath();
1999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2000f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2002229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#addPathToName(int, byte[])
2003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addPathToNameLintLbyte_array2() throws Exception {
2005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestUtils.initCertPathSSCertChain();
2006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setupEnvironment();
2007fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        byte[] bytes, bytesName;
2008fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // GeneralName name = new GeneralName(1, "822.Name");
2009fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // bytes = name.getEncoded();
2010fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // bytesName = name.getEncodedName();
2011fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        bytes = new byte[] {-127, 8, 56, 50, 50, 46, 78, 97, 109, 101};
201250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob        bytesName = new byte[] {22, 8, 56, 50, 50, 46, 78, 97, 109, 101};
201350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob        bytes[bytes.length-3] = (byte) 200;
2014f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
201650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob            theCertSelector.addPathToName(1, bytes);
2017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2020f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2022f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2023fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        theCertSelector.addPathToName(1, bytesName);
2024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertPath p = buildCertPath();
2026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(p);
2027f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2029f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        name = new GeneralName(new Name("O=Android"));
2031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        theCertSelector.addPathToName(4, endCertificate.getSubjectDN().getName());
2032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(4, TestUtils.rootCertificateSS.getIssuerX500Principal().getEncoded());
2033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        p = TestUtils.buildCertPathSSCertChain();
2035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(p);
2036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2037f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2039229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#addPathToName(int, String)
2040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addPathToNameLintLjava_lang_String2() throws Exception {
2042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setupEnvironment();
2043fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        byte[] bytes, bytesName;
2044fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // GeneralName name = new GeneralName(1, "822.Name");
2045fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // bytes = name.getEncoded();
2046fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        // bytesName = name.getEncodedName();
2047fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        bytes = new byte[] {-127, 8, 56, 50, 50, 46, 78, 97, 109, 101};
2048fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        bytesName = new byte[] {22, 8, 56, 50, 50, 46, 78, 97, 109, 101};
2049fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        assertNotNull(bytes);
2050fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        byte[] b = new byte[bytes.length];
2051fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        b = bytes;
2052fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        b[bytes.length-3] = (byte) 200;
2053f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2055adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(1, new String(b));
2056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2059f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2061f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2062fa890109ecc4522f0e07481431c04d4cf6ba16d1The Android Open Source Project        theCertSelector.addPathToName(1, new String(bytesName));
2063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2064f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertPath p = buildCertPath();
2066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(p);
2067f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.setPathToNames(null);
2069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        theCertSelector.addPathToName(1, rootCertificate.getIssuerX500Principal().getName());
2070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(theCertSelector.getPathToNames());
2071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //p = buildCertPath();
2072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //assertNotNull(p);
2073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2074f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2076229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#addSubjectAlternativeName(int, byte[])
2077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addSubjectAlternativeNameLintLbyte_array2()
2079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws Exception {
2080f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2081f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
20825ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san0 = new GeneralName(new OtherName(new ObjectIdentifier("1.2.3.4.5"),
2083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new byte[] {1, 2, 0, 1}));
20845ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san1 = new GeneralName(new RFC822Name("rfc@822.Name"));
20855ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san2 = new GeneralName(new DNSName("dNSName"));
2086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans1 = new GeneralNames();
20885ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san0);
20895ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san1);
20905ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san2);
2091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
2093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20945ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        DerOutputStream out0 = new DerOutputStream();
20955ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        san0.getName().encode(out0);
20965ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        selector.addSubjectAlternativeName(0, out0.toByteArray());
20975ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
20985ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        DerOutputStream out1 = new DerOutputStream();
20995ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        san1.getName().encode(out1);
21005ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        selector.addSubjectAlternativeName(1, out1.toByteArray());
21015ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
21025ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        DerOutputStream out2 = new DerOutputStream();
21035ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        san2.getName().encode(out2);
21045ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        selector.addSubjectAlternativeName(2, out2.toByteArray());
2105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans2 = new GeneralNames();
21075ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans2.add(san0);
2108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sans1);
2110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sans2);
2111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert1));
2113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert2));
2114f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectAlternativeNames(null);
2116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
21175ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName name = new GeneralName(new X500Name("O=Android"));
21185ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        try (DerOutputStream outputStream = new DerOutputStream()){
21195ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            name.encode(outputStream);
21205ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            selector.addSubjectAlternativeName(0, outputStream.toByteArray());
2121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2127229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.cert.X509CertSelector#addSubjectAlternativeName(int, String)
2128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addSubjectAlternativeNameLintLjava_lang_String2() throws Exception{
21305ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san6 = new GeneralName(new URIName("http://uniform.Resource.Id"));
21315ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName san2 = new GeneralName(new DNSName("dNSName"));
2132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans1 = new GeneralNames();
21345ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san6);
21355ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans1.add(san2);
2136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        X509CertSelector selector = new X509CertSelector();
2138f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(6, "http://uniform.Resource.Id");
2140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.addSubjectAlternativeName(2, "dNSName");
2141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        GeneralNames sans2 = new GeneralNames();
21435ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        sans2.add(san2);
2144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert1 = new TestCert(sans1);
2146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestCert cert2 = new TestCert(sans2);
2147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(selector.match(cert1));
2149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(selector.match(cert2));
2150f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        selector.setSubjectAlternativeNames(null);
2152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
21535ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        GeneralName name = new GeneralName(new X500Name("O=Android"));
2154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
2155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            selector.addSubjectAlternativeName(0, (name.toString()));
2156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
2157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
2158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
21595ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera    }
2160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
21615ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera    Collection<List<?>> getGeneralNamePairList(GeneralNames generalNames)
21625ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            throws IOException {
21635ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        Collection<List<?>> sans = new ArrayList<>();
21645ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        for (GeneralName gn : generalNames.names()) {
21655ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            ArrayList<Object> gnList = new ArrayList<>();
21665ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            gnList.add(gn.getType());
21675ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            switch (gn.getType()) {
21685ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                case GeneralNameInterface.NAME_ANY:
21695ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    try (DerOutputStream outputStream = new DerOutputStream()) {
21705ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        gn.getName().encode(outputStream);
21715ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        gnList.add(outputStream.toByteArray());
21725ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    }
21735ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    break;
21745ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
21755ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                case GeneralNameInterface.NAME_RFC822:
21765ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    gnList.add(((RFC822Name) gn.getName()).getName());
21775ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    break;
21785ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
21795ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                case GeneralNameInterface.NAME_DNS:
21805ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    gnList.add(((DNSName) gn.getName()).getName());
21815ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    break;
21825ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
21835ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                case GeneralNameInterface.NAME_X400:
21845ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    try (DerOutputStream outputStream = new DerOutputStream()) {
21855ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        gn.getName().encode(outputStream);
21865ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                        gnList.add(outputStream.toByteArray());
21875ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    }
21885ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    break;
21895ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
21905ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                case GeneralNameInterface.NAME_URI:
21915ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    gnList.add(((URIName) gn.getName()).getName());
21925ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    break;
21935ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
21945ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                case GeneralNameInterface.NAME_IP:
21955ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    gnList.add(((IPAddressName) gn.getName()).getName());
21965ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    break;
21975ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
21985ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                case GeneralNameInterface.NAME_OID:
21995ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    gnList.add(((OIDName) gn.getName()).getOID().toString());
22005ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    break;
22015ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
22025ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                case GeneralNameInterface.NAME_DIRECTORY:
22035ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    gnList.add(((X500Name) gn.getName()).getName());
22045ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    break;
22055ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
22065ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                case GeneralNameInterface.NAME_EDI:
22075ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    gnList.add(((EDIPartyName) gn.getName()).getPartyName());
22085ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    break;
22095ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera
22105ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                default:
22115ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                    throw new IOException("Unrecognized GeneralName tag, ("
22125ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera                            + gn.getType() + ")");
22135ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            }
22145ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera            sans.add(gnList);
22155ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        }
22165ef40918006efad4c7194b505c3ad176928711a3Shubham Ajmera        return sans;
2217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
2219