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