105bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann/*
205bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann * Copyright (C) 2009 The Android Open Source Project
305bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann *
405bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann * Licensed under the Apache License, Version 2.0 (the "License");
505bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann * you may not use this file except in compliance with the License.
605bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann * You may obtain a copy of the License at
705bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann *
805bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann *     http://www.apache.org/licenses/LICENSE-2.0
905bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann *
1005bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann * Unless required by applicable law or agreed to in writing, software
1105bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann * distributed under the License is distributed on an "AS IS" BASIS,
1205bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1305bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann * See the License for the specific language governing permissions and
1405bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann * limitations under the License.
1505bfd364908b32f8d2dffbd300ba01810cd82bd9Jorg Pleumann */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.targets.security.cert;
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayInputStream;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.KeyStore;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertPath;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertPathBuilder;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertPathBuilderResult;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertPathParameters;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertPathValidatorResult;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertStore;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertStoreParameters;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.Certificate;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertificateFactory;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CollectionCertStoreParameters;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.PKIXBuilderParameters;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.PKIXCertPathValidatorResult;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.PKIXParameters;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.X509CertSelector;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.X509Certificate;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.ArrayList;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.List;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(targets.CertPathValidators.PKIX.class)
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class CertPathValidatorTestPKIX extends CertPathValidatorTest {
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private CertPath certPath;
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private PKIXParameters params;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public CertPathValidatorTestPKIX() {
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super("PKIX");
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    CertPath getCertPath() {
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return certPath;
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setUp() throws Exception {
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.setUp();
582932648271e72bad181b293e1fa5945265c7dbedUrs Grob        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
592932648271e72bad181b293e1fa5945265c7dbedUrs Grob        keyStore.load(null, null);
602932648271e72bad181b293e1fa5945265c7dbedUrs Grob
612932648271e72bad181b293e1fa5945265c7dbedUrs Grob        CertificateFactory certificateFactory = CertificateFactory.getInstance(
622932648271e72bad181b293e1fa5945265c7dbedUrs Grob                "X509");
632932648271e72bad181b293e1fa5945265c7dbedUrs Grob
642932648271e72bad181b293e1fa5945265c7dbedUrs Grob        X509Certificate selfSignedcertificate =
652932648271e72bad181b293e1fa5945265c7dbedUrs Grob                (X509Certificate) certificateFactory.generateCertificate(
662932648271e72bad181b293e1fa5945265c7dbedUrs Grob                        new ByteArrayInputStream(selfSignedCert.getBytes()));
672932648271e72bad181b293e1fa5945265c7dbedUrs Grob
682932648271e72bad181b293e1fa5945265c7dbedUrs Grob        keyStore.setCertificateEntry("selfSignedCert", selfSignedcertificate);
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        X509CertSelector targetConstraints = new X509CertSelector();
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        targetConstraints.setCertificate(selfSignedcertificate);
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        List<Certificate> certList = new ArrayList<Certificate>();
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        certList.add(selfSignedcertificate);
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CertStoreParameters storeParams = new CollectionCertStoreParameters(
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                certList);
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
782932648271e72bad181b293e1fa5945265c7dbedUrs Grob        CertStore certStore = CertStore.getInstance("Collection", storeParams);
792932648271e72bad181b293e1fa5945265c7dbedUrs Grob
802932648271e72bad181b293e1fa5945265c7dbedUrs Grob        PKIXBuilderParameters parameters = new PKIXBuilderParameters(keyStore,
812932648271e72bad181b293e1fa5945265c7dbedUrs Grob                targetConstraints);
822932648271e72bad181b293e1fa5945265c7dbedUrs Grob        parameters.addCertStore(certStore);
832932648271e72bad181b293e1fa5945265c7dbedUrs Grob        parameters.setRevocationEnabled(false);
842932648271e72bad181b293e1fa5945265c7dbedUrs Grob
852932648271e72bad181b293e1fa5945265c7dbedUrs Grob        CertPathBuilder pathBuilder = CertPathBuilder.getInstance("PKIX");
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
872932648271e72bad181b293e1fa5945265c7dbedUrs Grob        CertPathBuilderResult builderResult = pathBuilder.build(parameters);
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        certPath = builderResult.getCertPath();
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
912932648271e72bad181b293e1fa5945265c7dbedUrs Grob        params = new PKIXParameters(keyStore);
922932648271e72bad181b293e1fa5945265c7dbedUrs Grob        params.setRevocationEnabled(false);
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    CertPathParameters getParams() {
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return params;
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    void validateResult(CertPathValidatorResult validatorResult) {
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("validator result is null", validatorResult);
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("validator result is not PKIX",
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                validatorResult instanceof PKIXCertPathValidatorResult);
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private String selfSignedCert = "-----BEGIN CERTIFICATE-----\n"
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "MIICSDCCAbECBEk2ZvswDQYJKoZIhvcNAQEEBQAwazELMAkGA1UEBhMCQU4xEDAOBgNVBAgTB0Fu\n"
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "ZHJvaWQxEDAOBgNVBAcTB0FuZHJvaWQxEDAOBgNVBAoTB0FuZHJvaWQxEDAOBgNVBAsTB0FuZHJv\n"
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "aWQxFDASBgNVBAMTC0FuZHJvaWQgQ1RTMB4XDTA4MTIwMzExMDExNVoXDTM2MDQyMDExMDExNVow\n"
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "azELMAkGA1UEBhMCQU4xEDAOBgNVBAgTB0FuZHJvaWQxEDAOBgNVBAcTB0FuZHJvaWQxEDAOBgNV\n"
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "BAoTB0FuZHJvaWQxEDAOBgNVBAsTB0FuZHJvaWQxFDASBgNVBAMTC0FuZHJvaWQgQ1RTMIGfMA0G\n"
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "CSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAMd+N1Bu2eiI4kukOLvFlpTSEHTGplN2vvw76T7jSZinx\n"
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "WcrtLe6qH1uPffbVNW4/BRn6OywbcynazEdqEUa09hWtHYmUsXpRPyGUBScNnyF751SGA2JIQUfg\n"
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "3gi3gT3h32Z64AIHnn5gsGDJkeWOHx6/uVOV7iqr7cwPdLp03QIDAQABMA0GCSqGSIb3DQEBBAUA\n"
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "A4GBAGG46Udsh6U7bSkJsyPPmSCCEkGr14L8F431UuaWbLvQVDtyPv8vtdJilyUTVnlWM6JNGV/q\n"
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "bgHuLbohkVXn9l68GtgQ7QDexHJE5hEDG/S7cYNi9GhrCfzAjEed13VMntZHZ0XQ4E7jBOmhcMAY\n"
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    + "DC9BBx1sVKoji17RP4R8CTf1\n" + "-----END CERTIFICATE-----";
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
122