12f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes/* 22f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 32f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * contributor license agreements. See the NOTICE file distributed with 42f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * this work for additional information regarding copyright ownership. 52f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 62f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * (the "License"); you may not use this file except in compliance with 72f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * the License. You may obtain a copy of the License at 82f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 92f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 102f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 112f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * Unless required by applicable law or agreed to in writing, software 122f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 132f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 142f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * See the License for the specific language governing permissions and 152f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * limitations under the License. 162f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes */ 17f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 182f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughespackage org.apache.harmony.security.tests.java.security; 192f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 202f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.io.ByteArrayInputStream; 212f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.io.UnsupportedEncodingException; 222f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.security.KeyPair; 232f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.security.KeyPairGenerator; 242f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.security.KeyStore; 252f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.security.PrivateKey; 262f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.security.cert.Certificate; 272f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.security.cert.CertificateFactory; 282f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.security.cert.X509Certificate; 292f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 302f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport junit.framework.TestCase; 312f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 322f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughespublic class KeyStorePrivateKeyEntryTest extends TestCase { 332f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 342f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes public void testGetCertificateChain() throws Exception { 352f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 362f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes String certificateData = "-----BEGIN CERTIFICATE-----\n" 372f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "MIICZTCCAdICBQL3AAC2MA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw\n" 382f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl\n" 392f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NzAyMjAwMDAwMDBa\n" 402f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "Fw05ODAyMjAyMzU5NTlaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv\n" 412f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "cm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMR8wHQYDVQQKExZTdW4gTWljcm9zeXN0\n" 422f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "ZW1zLCBJbmMuMSEwHwYDVQQLExhUZXN0IGFuZCBFdmFsdWF0aW9uIE9ubHkxGjAY\n" 432f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "BgNVBAMTEWFyZ29uLmVuZy5zdW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB\n" 442f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "iQKBgQCofmdY+PiUWN01FOzEewf+GaG+lFf132UpzATmYJkA4AEA/juW7jSi+LJk\n" 452f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "wJKi5GO4RyZoyimAL/5yIWDV6l1KlvxyKslr0REhMBaD/3Z3EsLTTEf5gVrQS6sT\n" 462f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "WMoSZAyzB39kFfsB6oUXNtV8+UKKxSxKbxvhQn267PeCz5VX2QIDAQABMA0GCSqG\n" 472f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "SIb3DQEBAgUAA34AXl3at6luiV/7I9MN5CXYoPJYI8Bcdc1hBagJvTMcmlqL2uOZ\n" 482f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "H9T5hNMEL9Tk6aI7yZPXcw/xI2K6pOR/FrMp0UwJmdxX7ljV6ZtUZf7pY492UqwC\n" 492f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "1777XQ9UEZyrKJvF5ntleeO0ayBqLGVKCWzWZX9YsXCpv47FNLZbupE=\n" 502f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes + "-----END CERTIFICATE-----\n"; 512f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 522f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes ByteArrayInputStream certArray; 532f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes { 542f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes try{ 552f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes certArray = new ByteArrayInputStream( 562f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes certificateData.getBytes("UTF-8")); 572f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes } catch (UnsupportedEncodingException e) { 582f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes throw new RuntimeException(e.getMessage()); 592f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes } 602f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes } 612f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes CertificateFactory cf = CertificateFactory.getInstance("X.509"); 622f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes Certificate certificate = cf.generateCertificate(certArray); 632f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes assertTrue(certificate instanceof X509Certificate); 642f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 652f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes String algorithm = certificate.getPublicKey().getAlgorithm(); 662f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes KeyPairGenerator keyPairGenerator = KeyPairGenerator 672f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes .getInstance(algorithm); 682f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes KeyPair keyPair = keyPairGenerator.generateKeyPair(); 692f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes PrivateKey privateKey = keyPair.getPrivate(); 702f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 712f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes // If all the certificate in the chain is X509Certificate, 722f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes // KeyStore.PrivateKeyEntry will return a X509Certificate array. 732f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes KeyStore.PrivateKeyEntry privateKeyEntry = new KeyStore.PrivateKeyEntry( 742f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes privateKey, new Certificate[] { certificate }); 752f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes Certificate[] chain = privateKeyEntry.getCertificateChain(); 762f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes assertTrue(chain instanceof X509Certificate[]); 772f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 782f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes } 792f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes} 80