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