1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.java.security.cert;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.PublicKey;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.X509CertSelector;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * X509CertSelectorTest
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class X509CertSelectorTest extends TestCase {
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.security.cert.X509CertSelector#addSubjectAlternativeName(int, byte[])
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_addSubjectAlternativeNameLintLbyte_array() throws IOException {
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-2487
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] types = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < types.length; i++) {
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new X509CertSelector().addSubjectAlternativeName(types[i],
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        (byte[]) null);
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected NullPointerException for type: " + types[i]);
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NullPointerException e) {
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.security.cert.X509CertSelector#addSubjectAlternativeName(int, String)
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_addSubjectAlternativeNameLintLjava_lang_String() throws IOException {
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-727
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] types = { 0, 3, 4, 5, 6, 7, 8 };
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < types.length; i++) {
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new X509CertSelector().addSubjectAlternativeName(types[i],
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "0xDFRF");
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("IOException expected for type: " + types[i]);
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IOException e) {
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Tests for DNSGeneralName
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Legal DNS names
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new X509CertSelector().addSubjectAlternativeName(2, "0xDFRF");
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new X509CertSelector().addSubjectAlternativeName(2, "");
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new X509CertSelector().addSubjectAlternativeName(2, "foo.example.com");
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new X509CertSelector().addSubjectAlternativeName(2, "3g.example.com");
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new X509CertSelector().addSubjectAlternativeName(2, "*.example.com");
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Illegal DNS names
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        String[] names = new String[] { "*", "*.", "%anything" };
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (String badName : names) {
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new X509CertSelector().addSubjectAlternativeName(2, badName);
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("IOException expected for DNS name " + badName);
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IOException e) {
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // Expected
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.security.cert.X509CertSelector#addPathToName(int, byte[])
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_addPathToNameLintLbyte_array() throws IOException {
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-2487
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] types = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < types.length; i++) {
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new X509CertSelector().addPathToName(types[i], (byte[]) null);
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected NullPointerException for type: " + types[i]);
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NullPointerException e) {
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.security.cert.X509CertSelector#addPathToName(int, String)
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_addPathToNameLintLjava_lang_String() {
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-724
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int type = 0; type <= 8; type++) {
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new X509CertSelector().addPathToName(type, (String) null);
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("IOException expected for type: " + type);
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IOException ioe) {
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // expected
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.security.cert.X509CertSelector#setSubjectPublicKey(byte[])
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_setSubjectPublicKeyLB$() throws Exception {
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //SubjectPublicKeyInfo  ::=  SEQUENCE  {
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    algorithm            AlgorithmIdentifier,
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    subjectPublicKey     BIT STRING  }
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] enc = { 0x30, 0x0E, // SEQUENCE
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                0x30, 0x07, // SEQUENCE
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                0x06, 0x02, 0x03, 0x05,//OID
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                0x01, 0x01, 0x07, //ANY
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                0x03, 0x03, 0x01, 0x01, 0x06, // subjectPublicKey
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        X509CertSelector selector = new X509CertSelector();
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        selector.setSubjectPublicKey(enc);
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PublicKey key = selector.getSubjectPublicKey();
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("0.3.5", key.getAlgorithm());
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("X.509", key.getFormat());
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(enc, key.getEncoded()));
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(key.toString());
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
136