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