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 */ 178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.java.security; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayInputStream; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.UnsupportedEncodingException; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.KeyPair; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.KeyPairGenerator; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.KeyStore; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.PrivateKey; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.Certificate; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.CertificateFactory; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.cert.X509Certificate; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class KeyStorePrivateKeyEntryTest extends TestCase { 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetCertificateChain() throws Exception { 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String certificateData = "-----BEGIN CERTIFICATE-----\n" 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "MIICZTCCAdICBQL3AAC2MA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw\n" 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl\n" 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NzAyMjAwMDAwMDBa\n" 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "Fw05ODAyMjAyMzU5NTlaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv\n" 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "cm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMR8wHQYDVQQKExZTdW4gTWljcm9zeXN0\n" 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "ZW1zLCBJbmMuMSEwHwYDVQQLExhUZXN0IGFuZCBFdmFsdWF0aW9uIE9ubHkxGjAY\n" 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "BgNVBAMTEWFyZ29uLmVuZy5zdW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB\n" 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "iQKBgQCofmdY+PiUWN01FOzEewf+GaG+lFf132UpzATmYJkA4AEA/juW7jSi+LJk\n" 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "wJKi5GO4RyZoyimAL/5yIWDV6l1KlvxyKslr0REhMBaD/3Z3EsLTTEf5gVrQS6sT\n" 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "WMoSZAyzB39kFfsB6oUXNtV8+UKKxSxKbxvhQn267PeCz5VX2QIDAQABMA0GCSqG\n" 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "SIb3DQEBAgUAA34AXl3at6luiV/7I9MN5CXYoPJYI8Bcdc1hBagJvTMcmlqL2uOZ\n" 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "H9T5hNMEL9Tk6aI7yZPXcw/xI2K6pOR/FrMp0UwJmdxX7ljV6ZtUZf7pY492UqwC\n" 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "1777XQ9UEZyrKJvF5ntleeO0ayBqLGVKCWzWZX9YsXCpv47FNLZbupE=\n" 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "-----END CERTIFICATE-----\n"; 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream certArray; 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes { 548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath try { 558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath certArray = new ByteArrayInputStream( 568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath certificateData.getBytes("UTF-8")); 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (UnsupportedEncodingException e) { 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new RuntimeException(e.getMessage()); 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes CertificateFactory cf = CertificateFactory.getInstance("X.509"); 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Certificate certificate = cf.generateCertificate(certArray); 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(certificate instanceof X509Certificate); 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String algorithm = certificate.getPublicKey().getAlgorithm(); 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes KeyPairGenerator keyPairGenerator = KeyPairGenerator 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getInstance(algorithm); 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes KeyPair keyPair = keyPairGenerator.generateKeyPair(); 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes PrivateKey privateKey = keyPair.getPrivate(); 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // If all the certificate in the chain is X509Certificate, 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // KeyStore.PrivateKeyEntry will return a X509Certificate array. 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes KeyStore.PrivateKeyEntry privateKeyEntry = new KeyStore.PrivateKeyEntry( 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes privateKey, new Certificate[] { certificate }); 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Certificate[] chain = privateKeyEntry.getCertificateChain(); 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(chain instanceof X509Certificate[]); 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 80