1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Vladimir N. Molotkov 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.tests.support.cert; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.resource.Support_Resources; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.BufferedInputStream; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidAlgorithmParameterException; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStore; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPath; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPathBuilder; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPathBuilderException; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPathBuilderResult; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPathParameters; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPathValidatorException; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertStore; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.Certificate; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateException; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateFactory; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CollectionCertStoreParameters; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.PKIXBuilderParameters; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.PKIXCertPathBuilderResult; 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.PKIXCertPathChecker; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.PolicyNode; 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.PolicyQualifierInfo; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.TrustAnchor; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.X509CertSelector; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.X509Certificate; 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ArrayList; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collections; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashSet; 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Iterator; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List; 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.security.cert test utilities 63f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class TestUtils { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Certificate type used during testing 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String certType = "X.509"; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Key store type used during testing 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String keyStoreType = "BKS"; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The file name prefix to load keystore from 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String keyStoreFileName = "test." + keyStoreType 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + ".ks"; 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The file name suffixes to load keystore from 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // *.ks1 - keystore containing untrusted certificates only 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // *.ks2 - keystore containing trusted certificates only 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // *.ks3 - keystore containing both trusted and untrusted certificates 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int UNTRUSTED = 1; 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int TRUSTED = 2; 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int TRUSTED_AND_UNTRUSTED = 3; 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Common passwords for all test keystores 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final static char[] storepass = 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new char[] {'s','t','o','r','e','p','w','d'}; 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates <code>TrustAnchor</code> instance 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * constructed using self signed test certificate 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return <code>TrustAnchor</code> instance 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static TrustAnchor getTrustAnchor() { 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory cf = null; 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cf = CertificateFactory.getInstance(certType); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CertificateException e) { 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // requested cert type is not available in the 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // default provider package or any of the other provider packages 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // that were searched 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException(e); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project BufferedInputStream bis = null; 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bis = new BufferedInputStream(new ByteArrayInputStream( 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project getEncodedX509Certificate())); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project X509Certificate c1 = (X509Certificate)cf.generateCertificate(bis); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new TrustAnchor(c1, null); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // all failures are fatal 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException(e); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (bis != null) { 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bis.close() ; 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException ign) {} 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates <code>Set</code> of <code>TrustAnchor</code>s 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * containing single element (self signed test certificate). 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return Returns <code>Set</code> of <code>TrustAnchor</code>s 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Set<TrustAnchor> getTrustAnchorSet() { 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TrustAnchor ta = getTrustAnchor(); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (ta == null) { 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashSet<TrustAnchor> set = new HashSet<TrustAnchor>(); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!set.add(ta)) { 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException("Could not create trust anchor set"); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return set; 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates test <code>KeyStore</code> instance 142f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param initialize 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Do not initialize returned <code>KeyStore</code> if false 145f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 146f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * @param testKeyStoreType 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this parameter ignored if <code>initialize</code> is false; 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The following types supported:<br> 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1 - <code>KeyStore</code> with untrusted certificates only<br> 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 2 - <code>KeyStore</code> with trusted certificates only<br> 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 3 - <code>KeyStore</code> with both trusted and untrusted certificates 152f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return Returns test <code>KeyStore</code> instance 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static KeyStore getKeyStore(boolean initialize, 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int testKeyStoreType) { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project BufferedInputStream bis = null; 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = KeyStore.getInstance(keyStoreType); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (initialize) { 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String fileName = keyStoreFileName + testKeyStoreType; 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.load(Support_Resources.getResourceStream(fileName), 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project storepass); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ks; 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException(e); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (initialize && bis != null) { 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bis.close(); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException ign) {} 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates <code>List</code> of <code>CollectionCertStores</code> 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return The list created 181f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidAlgorithmParameterException 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoSuchAlgorithmException 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static List<CertStore> getCollectionCertStoresList() 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidAlgorithmParameterException, 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchAlgorithmException { 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertStore cs = CertStore.getInstance("Collection", 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new CollectionCertStoreParameters()); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ArrayList<CertStore> l = new ArrayList<CertStore>(); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!l.add(cs)) { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException("Could not create cert stores list"); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return l; 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates stub implementation of the <code>PKIXCertPathChecker</code> 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return Stub implementation of the <code>PKIXCertPathChecker</code> 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static PKIXCertPathChecker getTestCertPathChecker() { 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // stub implementation for testing purposes only 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new PKIXCertPathChecker() { 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean forward = false; 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings({"unused", "unchecked"}) 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void check(Certificate arg0, Collection arg1) 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertPathValidatorException { 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set<String> getSupportedExtensions() { 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unused") 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void init(boolean arg0) throws CertPathValidatorException { 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project forward = arg0; 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isForwardCheckingSupported() { 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // just to check this checker state 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return forward; 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates policy tree stub containing two <code>PolicyNode</code>s 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for testing purposes 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return root <code>PolicyNode</code> of the policy tree 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static PolicyNode getPolicyTree() { 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new PolicyNode() { 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final PolicyNode parent = this; 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getDepth() { 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // parent 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isCritical() { 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getValidPolicy() { 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PolicyNode getParent() { 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Iterator<PolicyNode> getChildren() { 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PolicyNode child = new PolicyNode() { 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getDepth() { 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // child 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 1; 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isCritical() { 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getValidPolicy() { 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PolicyNode getParent() { 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parent; 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Iterator<PolicyNode> getChildren() { 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set<String> getExpectedPolicies() { 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set<? extends PolicyQualifierInfo> getPolicyQualifiers() { 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HashSet<PolicyNode> s = new HashSet<PolicyNode>(); 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.add(child); 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return s.iterator(); 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set<String> getExpectedPolicies() { 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set<? extends PolicyQualifierInfo> getPolicyQualifiers() { 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // X.509 encoded certificate 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String ENCODED_X509_CERTIFICATE = "-----BEGIN CERTIFICATE-----\n" 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "MIIDHTCCAtsCBEFT72swCwYHKoZIzjgEAwUAMHQxCzAJBgNVBAYTAlJVMQwwCgYDVQQIEwNOU08x\n" 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "FDASBgNVBAcTC05vdm9zaWJpcnNrMQ4wDAYDVQQKEwVJbnRlbDEVMBMGA1UECxMMRFJMIFNlY3Vy\n" 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "aXR5MRowGAYDVQQDExFWbGFkaW1pciBNb2xvdGtvdjAeFw0wNDA5MjQwOTU2NTlaFw0wNjA1MTcw\n" 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "OTU2NTlaMHQxCzAJBgNVBAYTAlJVMQwwCgYDVQQIEwNOU08xFDASBgNVBAcTC05vdm9zaWJpcnNr\n" 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "MQ4wDAYDVQQKEwVJbnRlbDEVMBMGA1UECxMMRFJMIFNlY3VyaXR5MRowGAYDVQQDExFWbGFkaW1p\n" 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "ciBNb2xvdGtvdjCCAbgwggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUSKVLfSpwu7OTn9hG3Ujzv\n" 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "RADDHj+AtlEmaUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeBO4AdNG/yZmC3a5lQpaSfn+gEexAiwk+7\n" 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "qdf+t8Yb+DtX58aophUPBPuD9tPFHsMCNVQTWhaRMvZ1864rYdcq7/IiAxmd0UgBxwIVAJdgUI8V\n" 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "IwvMspK5gqLrhAvwWBz1AoGBAPfhoIXWmz3ey7yrXDa4V7l5lK+7+jrqgvlXTAs9B4JnUVlXjrrU\n" 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "WU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqLVHyNKOCjrh4rs6Z1kW6jfwv6ITVi8ftiegEk\n" 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "O8yk8b6oUZCJqIPf4VrlnwaSi2ZegHtVJWQBTDv+z0kqA4GFAAKBgQDiNmj9jgWu1ILYqYWcUhNN\n" 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "8CjjRitf80yWP/s/565wZz3anb2w72jum63mdShDko9eOOOd1hiVuiBnNhSL7D6JfIYBJvNXr1av\n" 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "Gw583BBv12OBgg0eAW/GRWBn2Ak2JjsoBc5x2c1HAEufakep7T6RoC+n3lqbKPKyHWVdfqQ9KTAL\n" 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "BgcqhkjOOAQDBQADLwAwLAIUaRS3C9dXcMbrOAhmidFBr7oMvH0CFEC3LUwfLJX5gY8P6uxpkPx3\n" 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "JDSM\n" + "-----END CERTIFICATE-----\n"; 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static byte[] getEncodedX509Certificate() { 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ENCODED_X509_CERTIFICATE.getBytes(); 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 321f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns X.509 certificate encoding corresponding to version v1. 324f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Certificate encoding was created by hands according to X.509 Certificate 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ASN.1 notation. The certificate encoding has the following encoded 327f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * field values:<br> 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - version: 1<br> 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - serialNumber: 5<br> 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - issuer: CN=Z<br> 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - notBefore: 13 Dec 1999 14:15:16<br> 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - notAfter: 01 Jan 2000 00:00:00<br> 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - subject: CN=Y<br> 334f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return X.509 certificate encoding corresponding to version v1. 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static byte[] getX509Certificate_v1() { 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new byte[] { 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Certificate: SEQUENCE 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x6B, 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TBSCertificate: SEQUENCE { 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x5C, 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // version: [0] EXPLICIT Version DEFAULT v1 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (byte) 0xA0, 0x03, 0x02, 0x01, 0x00, 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // serialNumber: CertificateSerialNumber 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x02, 0x01, 0x05, 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // signature: AlgorithmIdentifier 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x07, // SEQUENCE 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x06, 0x02, 0x03, 0x05,//OID 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x01, 0x01, 0x07, //ANY 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //issuer: Name 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x0C, 0x31, 0x0A, 0x30, 0x08, 0x06, 0x03, 0x55, 0x04, 0x03, 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x13, 0x01, 0x5A, // CN=Z 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //validity: Validity 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x1E, // SEQUENCE 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // notBefore: UTCTime 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x17, 0x0D, 0x39, 0x39, 0x31, 0x32, 0x31, 0x33, 0x31, 0x34, 0x31, 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x35, 0x31, 0x36, 0x5A, // 13 Dec 1999 14:15:16 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // notAfter: UTCTime 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x17, 0x0D, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x30, 0x30, 0x5A, // 01 Jan 2000 00:00:00 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //subject: Name 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x0C, 0x31, 0x0A, 0x30, 0x08, 0x06, 0x03, 0x55, 0x04, 0x03, 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x13, 0x01, 0x59, // CN=Y 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //SubjectPublicKeyInfo ::= SEQUENCE { 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // algorithm AlgorithmIdentifier, 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // subjectPublicKey BIT STRING } 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x0D, // SEQUENCE 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x07, // SEQUENCE 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x06, 0x02, 0x03, 0x05,//OID 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x01, 0x01, 0x07, //ANY 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x03, 0x02, 0x00, 0x01, // subjectPublicKey 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // issuerUniqueID - missed 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // subjectUniqueID - missed 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // extensions - missed 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } end TBSCertificate 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // signatureAlgorithm: AlgorithmIdentifier 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x07, // SEQUENCE 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x06, 0x02, 0x03, 0x05,//OID 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x01, 0x01, 0x07, //ANY 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 397f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // signature: BIT STRING 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x03, 0x02, 0x00, 0x01 }; 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns X.509 certificate encoding corresponding to version v3. 404f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Certificate encoding was created by hands according to X.509 Certificate 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ASN.1 notation. The certificate encoding has the following encoded 407f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * field values:<br> 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - version: 3<br> 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - serialNumber: 5<br> 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - issuer: CN=Z<br> 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - notBefore: 13 Dec 1999 14:15:16<br> 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - notAfter: 01 Jan 2000 00:00:00<br> 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - subject: CN=Y<br> 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - extensions: 415f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 1) AuthorityKeyIdentifier(OID=2.5.29.35): no values in it(empty sequence) 416f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return X.509 certificate encoding corresponding to version v3. 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static byte[] getX509Certificate_v3() { 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new byte[] { 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Certificate: SEQUENCE 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x7D, 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TBSCertificate: SEQUENCE { 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x6E, 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // version: [0] EXPLICIT Version DEFAULT v1 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (byte) 0xA0, 0x03, 0x02, 0x01, 0x02, 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // serialNumber: CertificateSerialNumber 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x02, 0x01, 0x05, 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // signature: AlgorithmIdentifier 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x07, // SEQUENCE 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x06, 0x02, 0x03, 0x05,//OID 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x01, 0x01, 0x07, //ANY 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //issuer: Name 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x0C, 0x31, 0x0A, 0x30, 0x08, 0x06, 0x03, 0x55, 0x04, 0x03, 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x13, 0x01, 0x5A, // CN=Z 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //validity: Validity 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x1E, // SEQUENCE 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // notBefore: UTCTime 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x17, 0x0D, 0x39, 0x39, 0x31, 0x32, 0x31, 0x33, 0x31, 0x34, 0x31, 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x35, 0x31, 0x36, 0x5A, // 13 Dec 1999 14:15:16 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // notAfter: UTCTime 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x17, 0x0D, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x30, 0x30, 0x5A, // 01 Jan 2000 00:00:00 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //subject: Name 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x0C, 0x31, 0x0A, 0x30, 0x08, 0x06, 0x03, 0x55, 0x04, 0x03, 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x13, 0x01, 0x59, // CN=Y 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //SubjectPublicKeyInfo ::= SEQUENCE { 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // algorithm AlgorithmIdentifier, 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // subjectPublicKey BIT STRING } 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x0D, // SEQUENCE 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x07, // SEQUENCE 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x06, 0x02, 0x03, 0x05,//OID 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x01, 0x01, 0x07, //ANY 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x03, 0x02, 0x00, 0x01, // subjectPublicKey 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // issuerUniqueID - missed 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // subjectUniqueID - missed 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // extensions : [3] EXPLICIT Extensions OPTIONAL 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (byte) 0xA3, 0x10, 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x0E, 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Extension ::= SEQUENCE { 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // extnID OBJECT IDENTIFIER, 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // critical BOOLEAN DEFAULT FALSE, 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // extnValue OCTET STRING } 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 1) AuthorityKeyIdentifier extension (see HARMONY-3384) 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x0C, 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x06, 0x03, 0x55, 0x1D, 0x23, // OID = 2.5.29.35 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x01, 0x01, 0x00, // critical = FALSE 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x04, 0x02, 0x30, 0x00, // extnValue: MUST be empty sequence 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // missed: keyIdentifier 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // missed: authorityCertIssuer 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // missed" authorityCertSerialNumber 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // } end TBSCertificate 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // signatureAlgorithm: AlgorithmIdentifier 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x07, // SEQUENCE 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x06, 0x02, 0x03, 0x05,//OID 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x01, 0x01, 0x07, //ANY 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 495f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // signature: BIT STRING 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x03, 0x02, 0x00, 0x01 }; 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns X.509 CRL encoding corresponding to version v1. 502f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * CRL encoding was created by hands according to X.509 CRL ASN.1 504f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * notation. The CRL encoding has the following encoded field values:<br> 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - version: 1<br> 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - issuer: CN=Z<br> 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * - thisUpdate: 01 Jan 2001 01:02:03<br> 508f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return X.509 CRL encoding corresponding to version v1. 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static byte[] getX509CRL_v1() { 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new byte[] { 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //CertificateList: SEQUENCE 514f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 0x30, 0x35, 515f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 516f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // TBSCertList: SEQUENCE 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x27, 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Version: INTEGER OPTIONAL 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 0x02, 0x01, 0x01, - missed here cause it is v1 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // signature: AlgorithmIdentifier 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x06, // SEQUENCE 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x06, 0x01, 0x01, // OID 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x01, 0x01, 0x11, // ANY 524f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // issuer: Name 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x0C, 0x31, 0x0A, 0x30, 0x08, 0x06, 0x03, 0x55, 0x04, 526f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 0x03, 0x13, 0x01, 0x5A, // CN=Z 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // thisUpdate: ChoiceOfTime 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // GeneralizedTime: 01 Jan 2001 01:02:03 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x18, 0x0F, 0x32, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x31, 0x30, 0x32, 0x30, 0x33, 0x5A, 531f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // nextUpdate - missed 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // revokedCertificates - missed 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // crlExtensions - missed 535f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // signatureAlgorithm: AlgorithmIdentifier 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x30, 0x06, // SEQUENCE 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x06, 0x01, 0x01, //OID 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x01, 0x01, 0x11, //ANY 540f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // signature: BIT STRING 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0x03, 0x02, 0x00, 0x01 }; 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //-------------------------------------------------------------------------- 544f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Second example 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Certificate: 548ab28398a565e5ce8a56cdfd50ac6226e5317cf66The Android Open Source Project * <pre> 54952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * $ openssl req -x509 -nodes -days 365 -subj '/C=AN/ST=Android/O=Android/OU=Android/CN=Android/emailAddress=android' -newkey rsa:1024 -keyout root.pem -out root.pem -text -days 36500 55052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Generating a 1024 bit RSA private key 55152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * ..........................................++++++ 55252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * .................++++++ 55352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * writing new private key to 'root.pem' 55452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * -----BEGIN RSA PRIVATE KEY----- 55552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * MIICXwIBAAKBgQDKS+qP2kgqYBtwY4QoJ5p0yyEl35sBr2ZKtAWn6SL4vXgvaIrj 55652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * K7vG93CvG239bXfacniGMEBitedBlcqjdPREEY0DQn3jLXyAOd3tnlKcutNH3RjA 55752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * fPlnDWNGKLnDdSd9QZEc0G1MsMg/HrERPm1hMfZQG85zdtbYmi2CJ/jS5wIDAQAB 55852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * AoGBAIZhvdSHjS7RHwkeonjGLh1tnnx5OI/7AzmWsrci8L9JpZ/gk3pq39dBIhLA 55952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * ZuVVpatwJU4GmY65BYEUz0Kb+3JY0PXagypwQKuWs9wb9C0aRnDVy9DNXkbJ+D+L 56052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * DNvyZAG5BNknZapxsFSenR5UO4BY08wIsdBtWD/B7YcMTuvxAkEA9zKP18pJCmku 56152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * TUDTJkonF/fGvI4PvsBm6YFyINb130yGzKJKCcEn5j2Fm+wF+lGY7nmtUIgQekRm 56252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * WkwbjG/v3wJBANGACjKFVIFvuXH6EoyWx90uYw9C8+m2jOtrRaAMfRyUanCvF2Li 56352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * ZYOLThPcxv/QvvQAa7RKJjxsK69Ajm+b3fkCQQCR7xWgTVmlfcbJ8LU265v8uFhp 56452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * RGzjLe8Td0oLPRxWQXVrJXwUGiYV9MgF7ubwim+AifDZlBo2NF9Ae6Hf3M19AkEA 56552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * nJEGDe+a0gj/HHD5f9wHjgLmwTcWNmnZMu8+X3g14DACxCf2YE4183MebLWoevI0 56652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * YwIVe+2WWb21gAnM6RghcQJBALq0RZcYkZoQA8qr9TPuuMzi+fF3Y+4m/pDDcCd5 56752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * zXbsroEZPdWPfAXKT95juW9yKdVzeOZHO1uwRWmQ9ZlPMhY= 56852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * -----END RSA PRIVATE KEY----- 56952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * ----- 57052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Certificate: 57152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Data: 57252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Version: 3 (0x2) 57352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Serial Number: 57452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 8a:12:37:ed:2d:ad:02:6e 57552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Signature Algorithm: sha1WithRSAEncryption 57652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Issuer: C=AN, ST=Android, O=Android, OU=Android, CN=Android/emailAddress=android 57752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Validity 57852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Not Before: Oct 4 02:20:28 2010 GMT 57952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Not After : Sep 10 02:20:28 2110 GMT 58052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Subject: C=AN, ST=Android, O=Android, OU=Android, CN=Android/emailAddress=android 58152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Subject Public Key Info: 58252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Public Key Algorithm: rsaEncryption 58352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * RSA Public Key: (1024 bit) 58452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Modulus (1024 bit): 58552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 00:ca:4b:ea:8f:da:48:2a:60:1b:70:63:84:28:27: 58652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 9a:74:cb:21:25:df:9b:01:af:66:4a:b4:05:a7:e9: 58752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 22:f8:bd:78:2f:68:8a:e3:2b:bb:c6:f7:70:af:1b: 58852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 6d:fd:6d:77:da:72:78:86:30:40:62:b5:e7:41:95: 58952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * ca:a3:74:f4:44:11:8d:03:42:7d:e3:2d:7c:80:39: 59052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * dd:ed:9e:52:9c:ba:d3:47:dd:18:c0:7c:f9:67:0d: 59152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 63:46:28:b9:c3:75:27:7d:41:91:1c:d0:6d:4c:b0: 59252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * c8:3f:1e:b1:11:3e:6d:61:31:f6:50:1b:ce:73:76: 59352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * d6:d8:9a:2d:82:27:f8:d2:e7 59452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Exponent: 65537 (0x10001) 59552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * X509v3 extensions: 59652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * X509v3 Subject Key Identifier: 59752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 14:7D:36:ED:63:44:BF:4F:DB:7D:28:96:78:6A:E7:EC:CE:2C:40:BF 59852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * X509v3 Authority Key Identifier: 59952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * keyid:14:7D:36:ED:63:44:BF:4F:DB:7D:28:96:78:6A:E7:EC:CE:2C:40:BF 60052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * DirName:/C=AN/ST=Android/O=Android/OU=Android/CN=Android/emailAddress=android 60152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * serial:8A:12:37:ED:2D:AD:02:6E 60252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 60352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * X509v3 Basic Constraints: 60452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * CA:TRUE 60552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Signature Algorithm: sha1WithRSAEncryption 60652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 7c:f2:84:c0:ee:40:a5:b9:94:85:19:ab:36:02:1d:17:4b:98: 60752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * f9:b9:c8:c5:1a:b0:c1:4f:0f:1d:1c:e8:c4:cf:c7:87:52:19: 60852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 9e:64:55:35:bb:34:e1:38:2f:27:08:c5:ca:e7:97:02:90:fd: 60952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 27:cd:8e:5a:08:40:f5:34:ff:70:65:c4:d6:1f:70:4f:d6:2c: 61052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * cb:28:d8:ed:91:b7:eb:35:06:cd:0e:02:a8:51:cd:b7:3e:f9: 61152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 85:16:97:31:7b:42:4c:cb:6f:de:4b:dd:ae:5e:9d:ef:84:83: 61252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 89:f9:0f:a6:5f:e4:93:cc:30:b5:e9:1d:f4:08:f4:e6:e9:58: 61352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 4b:ba 61452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * -----BEGIN CERTIFICATE----- 61552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * MIIDLTCCApagAwIBAgIJAIoSN+0trQJuMA0GCSqGSIb3DQEBBQUAMG0xCzAJBgNV 61652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * BAYTAkFOMRAwDgYDVQQIEwdBbmRyb2lkMRAwDgYDVQQKEwdBbmRyb2lkMRAwDgYD 61752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * VQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMRYwFAYJKoZIhvcNAQkBFgdh 61852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * bmRyb2lkMCAXDTEwMTAwNDAyMjAyOFoYDzIxMTAwOTEwMDIyMDI4WjBtMQswCQYD 61952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * VQQGEwJBTjEQMA4GA1UECBMHQW5kcm9pZDEQMA4GA1UEChMHQW5kcm9pZDEQMA4G 62052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * A1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEWMBQGCSqGSIb3DQEJARYH 62152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * YW5kcm9pZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAykvqj9pIKmAbcGOE 62252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * KCeadMshJd+bAa9mSrQFp+ki+L14L2iK4yu7xvdwrxtt/W132nJ4hjBAYrXnQZXK 62352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * o3T0RBGNA0J94y18gDnd7Z5SnLrTR90YwHz5Zw1jRii5w3UnfUGRHNBtTLDIPx6x 62452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * ET5tYTH2UBvOc3bW2Jotgif40ucCAwEAAaOB0jCBzzAdBgNVHQ4EFgQUFH027WNE 62552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * v0/bfSiWeGrn7M4sQL8wgZ8GA1UdIwSBlzCBlIAUFH027WNEv0/bfSiWeGrn7M4s 62652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * QL+hcaRvMG0xCzAJBgNVBAYTAkFOMRAwDgYDVQQIEwdBbmRyb2lkMRAwDgYDVQQK 62752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * EwdBbmRyb2lkMRAwDgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMRYw 62852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * FAYJKoZIhvcNAQkBFgdhbmRyb2lkggkAihI37S2tAm4wDAYDVR0TBAUwAwEB/zAN 62952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * BgkqhkiG9w0BAQUFAAOBgQB88oTA7kCluZSFGas2Ah0XS5j5ucjFGrDBTw8dHOjE 63052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * z8eHUhmeZFU1uzThOC8nCMXK55cCkP0nzY5aCED1NP9wZcTWH3BP1izLKNjtkbfr 63152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * NQbNDgKoUc23PvmFFpcxe0JMy2/eS92uXp3vhIOJ+Q+mX+STzDC16R30CPTm6VhL 63252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * ug== 63352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * -----END CERTIFICATE----- 63452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * $ 635ab28398a565e5ce8a56cdfd50ac6226e5317cf66The Android Open Source Project * </pre> 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 63752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom public static final String rootCert = "" 63852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "-----BEGIN CERTIFICATE-----\n" 63952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "MIIDLTCCApagAwIBAgIJAIoSN+0trQJuMA0GCSqGSIb3DQEBBQUAMG0xCzAJBgNV\n" 64052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "BAYTAkFOMRAwDgYDVQQIEwdBbmRyb2lkMRAwDgYDVQQKEwdBbmRyb2lkMRAwDgYD\n" 64152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "VQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMRYwFAYJKoZIhvcNAQkBFgdh\n" 64252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "bmRyb2lkMCAXDTEwMTAwNDAyMjAyOFoYDzIxMTAwOTEwMDIyMDI4WjBtMQswCQYD\n" 64352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "VQQGEwJBTjEQMA4GA1UECBMHQW5kcm9pZDEQMA4GA1UEChMHQW5kcm9pZDEQMA4G\n" 64452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "A1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEWMBQGCSqGSIb3DQEJARYH\n" 64552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "YW5kcm9pZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAykvqj9pIKmAbcGOE\n" 64652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "KCeadMshJd+bAa9mSrQFp+ki+L14L2iK4yu7xvdwrxtt/W132nJ4hjBAYrXnQZXK\n" 64752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "o3T0RBGNA0J94y18gDnd7Z5SnLrTR90YwHz5Zw1jRii5w3UnfUGRHNBtTLDIPx6x\n" 64852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "ET5tYTH2UBvOc3bW2Jotgif40ucCAwEAAaOB0jCBzzAdBgNVHQ4EFgQUFH027WNE\n" 64952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "v0/bfSiWeGrn7M4sQL8wgZ8GA1UdIwSBlzCBlIAUFH027WNEv0/bfSiWeGrn7M4s\n" 65052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "QL+hcaRvMG0xCzAJBgNVBAYTAkFOMRAwDgYDVQQIEwdBbmRyb2lkMRAwDgYDVQQK\n" 65152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "EwdBbmRyb2lkMRAwDgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMRYw\n" 65252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "FAYJKoZIhvcNAQkBFgdhbmRyb2lkggkAihI37S2tAm4wDAYDVR0TBAUwAwEB/zAN\n" 65352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "BgkqhkiG9w0BAQUFAAOBgQB88oTA7kCluZSFGas2Ah0XS5j5ucjFGrDBTw8dHOjE\n" 65452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "z8eHUhmeZFU1uzThOC8nCMXK55cCkP0nzY5aCED1NP9wZcTWH3BP1izLKNjtkbfr\n" 65552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "NQbNDgKoUc23PvmFFpcxe0JMy2/eS92uXp3vhIOJ+Q+mX+STzDC16R30CPTm6VhL\n" 65652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "ug==\n" 65752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "-----END CERTIFICATE-----\n"; 658f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Certificate: 661ab28398a565e5ce8a56cdfd50ac6226e5317cf66The Android Open Source Project * <pre> 66252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * $ openssl req -nodes -days 365 -subj '/C=AN/ST=Android/L=Android/O=Android/OU=Android/CN=Android Certificate/emailAddress=android' -newkey rsa:1024 -keyout certreq.pem -out certreq.pem -text -days 36500 66352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Generating a 1024 bit RSA private key 66452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * .......++++++ 66552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * ......................++++++ 66652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * writing new private key to 'certreq.pem' 66752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * ----- 66852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * $ openssl x509 -req -in certreq.pem -CA root.pem -CAcreateserial -out cert.pem -days 36500 66952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Signature ok 67052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * subject=/C=AN/ST=Android/L=Android/O=Android/OU=Android/CN=Android Certificate/emailAddress=android 67152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Getting Private key 67252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * $ rm root.srl 67352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * $ openssl rsa -in certreq.pem 67452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * writing RSA key 67552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * -----BEGIN RSA PRIVATE KEY----- 67652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * MIICXQIBAAKBgQDGvQZRB7fsuLvnZ0Sx43sTCkvwv/SEYrzRumyV16OC+lvKGC2X 67752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * lYW9qv7of88hqSVq5823MB+uEP1xZLWaiKkYyEn72RwgV/HqB8KEgGYXEbMKKzUv 67852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * j0D1X8kZ/EDGqsZjFKlk/7sZYcg3UqCcGUiEEszTadhyJ6FcowHM1EhrcQIDAQAB 67952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * AoGAS4CQn8Qw6ewc5wLipDpqDYfB5grnGExys7MBgcPUyPPYX2TkHUye7LnD8gxs 68052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * YrtiDcVW8BuGTZkC0EuUesskgiwGLimNiU3vU3LwH7OvtfUTMdvhv9nd2GFlfiQo 68152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * PfwhITZ85GwhDkhiBBXjToDcNc0ntXVgACNAKU1ZlJyoyukCQQDwsGmD0GwKFtJH 68252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * cGXI+IK0aB+pXjujZJU/Ikg+eTPMSWDsKD6ReZu9uJJc8W36Xiki/No1/NZvj0gB 68352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * MwgIkwh7AkEA02FzaGcWLFSHaRfV1wpx1F3Iuu3X2wWqTzBlhGG9ZDQyy7gWZqHJ 68452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * jElCdajiMnbh0mk62hobYy4FcLuvkkJWAwJBAK7FKpkQaqMY1zAQqZg4+4/MW9E8 68552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * H8oRa14gopzanYYlcj+JKYWw7CnjMERU+yrl3LEPMdQp9/uh6wMT7y1qtqkCQCNG 68652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * mxTsRzYEsUhnkuc9Nfvj3tDbSm+hxWdLw1VRXmLvlx6KTSq5i0IfI7kxAva7Ajq0 68752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Fv845iMqFfxXRhiZe3MCQQCxD0vLzEBegLQPgiavGXfBnRPrRrXgkuAJg7Fq/1Vt 68852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 3InSGat3Tv8GW+pCWWVgmV8iQ4wWReg+Bd03SCSP5uAY 68952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * -----END RSA PRIVATE KEY----- 69052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * $ openssl x509 -in cert.pem -text 69152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Certificate: 69252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Data: 69352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Version: 1 (0x0) 69452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Serial Number: 69552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 89:34:5f:d5:01:2e:a2:2b 69652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Signature Algorithm: sha1WithRSAEncryption 69752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Issuer: C=AN, ST=Android, O=Android, OU=Android, CN=Android/emailAddress=android 69852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Validity 69952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Not Before: Oct 4 04:41:54 2010 GMT 70052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Not After : Sep 10 04:41:54 2110 GMT 70152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Subject: C=AN, ST=Android, L=Android, O=Android, OU=Android, CN=Android Certificate/emailAddress=android 70252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Subject Public Key Info: 70352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Public Key Algorithm: rsaEncryption 70452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * RSA Public Key: (1024 bit) 70552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Modulus (1024 bit): 70652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 00:c6:bd:06:51:07:b7:ec:b8:bb:e7:67:44:b1:e3: 70752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 7b:13:0a:4b:f0:bf:f4:84:62:bc:d1:ba:6c:95:d7: 70852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * a3:82:fa:5b:ca:18:2d:97:95:85:bd:aa:fe:e8:7f: 70952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * cf:21:a9:25:6a:e7:cd:b7:30:1f:ae:10:fd:71:64: 71052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * b5:9a:88:a9:18:c8:49:fb:d9:1c:20:57:f1:ea:07: 71152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * c2:84:80:66:17:11:b3:0a:2b:35:2f:8f:40:f5:5f: 71252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * c9:19:fc:40:c6:aa:c6:63:14:a9:64:ff:bb:19:61: 71352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * c8:37:52:a0:9c:19:48:84:12:cc:d3:69:d8:72:27: 71452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * a1:5c:a3:01:cc:d4:48:6b:71 71552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Exponent: 65537 (0x10001) 71652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Signature Algorithm: sha1WithRSAEncryption 71752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 80:06:54:ba:4c:a2:0d:2e:6b:d5:b0:b1:89:b2:fa:c2:fd:d6: 71852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 02:ab:74:af:fb:1c:bc:47:43:58:89:57:80:ad:59:79:e9:2e: 71952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * d9:60:a7:a6:0f:9c:10:9f:e1:80:a1:66:19:59:7e:11:28:17: 72052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 17:0a:1d:e9:8d:78:e8:c2:61:36:03:fc:42:b1:54:bd:28:39: 72152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 3c:48:fd:3c:79:e7:ca:1a:16:c3:8a:77:42:07:96:14:8c:d2: 72252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 51:ca:8e:db:b8:82:31:84:5e:3f:68:b1:a5:f0:96:ae:a9:ca: 72352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * 86:f3:01:76:63:98:65:dd:41:81:11:d7:71:c8:ae:17:c7:20: 72452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * e7:22 72552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * -----BEGIN CERTIFICATE----- 72652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * MIICcjCCAdsCCQCJNF/VAS6iKzANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJB 72752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * TjEQMA4GA1UECBMHQW5kcm9pZDEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMH 72852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * QW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEWMBQGCSqGSIb3DQEJARYHYW5kcm9p 72952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * ZDAgFw0xMDEwMDQwNDQxNTRaGA8yMTEwMDkxMDA0NDE1NFowgYsxCzAJBgNVBAYT 73052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * AkFOMRAwDgYDVQQIEwdBbmRyb2lkMRAwDgYDVQQHEwdBbmRyb2lkMRAwDgYDVQQK 73152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * EwdBbmRyb2lkMRAwDgYDVQQLEwdBbmRyb2lkMRwwGgYDVQQDExNBbmRyb2lkIENl 73252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * cnRpZmljYXRlMRYwFAYJKoZIhvcNAQkBFgdhbmRyb2lkMIGfMA0GCSqGSIb3DQEB 73352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * AQUAA4GNADCBiQKBgQDGvQZRB7fsuLvnZ0Sx43sTCkvwv/SEYrzRumyV16OC+lvK 73452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * GC2XlYW9qv7of88hqSVq5823MB+uEP1xZLWaiKkYyEn72RwgV/HqB8KEgGYXEbMK 73552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * KzUvj0D1X8kZ/EDGqsZjFKlk/7sZYcg3UqCcGUiEEszTadhyJ6FcowHM1EhrcQID 73652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * AQABMA0GCSqGSIb3DQEBBQUAA4GBAIAGVLpMog0ua9WwsYmy+sL91gKrdK/7HLxH 73752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * Q1iJV4CtWXnpLtlgp6YPnBCf4YChZhlZfhEoFxcKHemNeOjCYTYD/EKxVL0oOTxI 73852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * /Tx558oaFsOKd0IHlhSM0lHKjtu4gjGEXj9osaXwlq6pyobzAXZjmGXdQYER13HI 73952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * rhfHIOci 74052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * -----END CERTIFICATE----- 74152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom * $ 742ab28398a565e5ce8a56cdfd50ac6226e5317cf66The Android Open Source Project * </pre> 743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 74452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom public static final String endCert = "" 74552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "-----BEGIN CERTIFICATE-----\n" 74652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "MIICcjCCAdsCCQCJNF/VAS6iKzANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJB\n" 74752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "TjEQMA4GA1UECBMHQW5kcm9pZDEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMH\n" 74852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "QW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEWMBQGCSqGSIb3DQEJARYHYW5kcm9p\n" 74952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "ZDAgFw0xMDEwMDQwNDQxNTRaGA8yMTEwMDkxMDA0NDE1NFowgYsxCzAJBgNVBAYT\n" 75052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "AkFOMRAwDgYDVQQIEwdBbmRyb2lkMRAwDgYDVQQHEwdBbmRyb2lkMRAwDgYDVQQK\n" 75152dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "EwdBbmRyb2lkMRAwDgYDVQQLEwdBbmRyb2lkMRwwGgYDVQQDExNBbmRyb2lkIENl\n" 75252dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "cnRpZmljYXRlMRYwFAYJKoZIhvcNAQkBFgdhbmRyb2lkMIGfMA0GCSqGSIb3DQEB\n" 75352dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "AQUAA4GNADCBiQKBgQDGvQZRB7fsuLvnZ0Sx43sTCkvwv/SEYrzRumyV16OC+lvK\n" 75452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "GC2XlYW9qv7of88hqSVq5823MB+uEP1xZLWaiKkYyEn72RwgV/HqB8KEgGYXEbMK\n" 75552dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "KzUvj0D1X8kZ/EDGqsZjFKlk/7sZYcg3UqCcGUiEEszTadhyJ6FcowHM1EhrcQID\n" 75652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "AQABMA0GCSqGSIb3DQEBBQUAA4GBAIAGVLpMog0ua9WwsYmy+sL91gKrdK/7HLxH\n" 75752dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "Q1iJV4CtWXnpLtlgp6YPnBCf4YChZhlZfhEoFxcKHemNeOjCYTYD/EKxVL0oOTxI\n" 75852dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "/Tx558oaFsOKd0IHlhSM0lHKjtu4gjGEXj9osaXwlq6pyobzAXZjmGXdQYER13HI\n" 75952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "rhfHIOci\n" 76052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom + "-----END CERTIFICATE-----\n"; 761f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a self signed certificate 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static X509Certificate rootCertificateSS; 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static X509Certificate endCertificate; 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static MyCRL crl; 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static X509CertSelector theCertSelector; 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static CertPathBuilder builder; 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static CertStore store; 775f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void initCertPathSSCertChain() throws CertificateException, 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InvalidAlgorithmParameterException, NoSuchAlgorithmException, 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IOException { 779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // create certificates and CRLs 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory cf = CertificateFactory.getInstance("X.509"); 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteArrayInputStream bi = new ByteArrayInputStream(rootCert.getBytes()); 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rootCertificateSS = (X509Certificate) cf.generateCertificate(bi); 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bi = new ByteArrayInputStream(endCert.getBytes()); 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project endCertificate = (X509Certificate) cf.generateCertificate(bi); 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project BigInteger revokedSerialNumber = BigInteger.valueOf(1); 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project crl = new MyCRL("X.509"); 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// X509CRL rootCRL = X509CRL; 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// X509CRL interCRL = X509CRLExample.createCRL(interCert, interPair 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// .getPrivate(), revokedSerialNumber); 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // create CertStore to support path building 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project List<Object> list = new ArrayList<Object>(); 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project list.add(rootCertificateSS); 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project list.add(endCertificate); 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CollectionCertStoreParameters params = new CollectionCertStoreParameters( 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project list); 799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project store = CertStore.getInstance("Collection", params); 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theCertSelector = new X509CertSelector(); 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theCertSelector.setCertificate(endCertificate); 803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theCertSelector.setIssuer(endCertificate.getIssuerX500Principal() 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getEncoded()); 805f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 80652dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom // build the path 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project builder = CertPathBuilder.getInstance("PKIX"); 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 810f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static CertPathBuilder getCertPathBuilder() { 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (builder == null) { 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException( 81452dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom "Call initCertPathSSCertChain prior to initCertPathSSCertChain"); 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return builder; 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 818f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 81952dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom public static CertPath buildCertPathSSCertChain() throws Exception { 82052dea0ad773d902ad8402e1354afe0842dd364b5Brian Carlstrom return builder.build(getCertPathParameters()).getCertPath(); 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static CertPathParameters getCertPathParameters() 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidAlgorithmParameterException { 825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((rootCertificateSS == null) || (theCertSelector == null) 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || (builder == null)) { 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException( 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Call initCertPathSSCertChain prior to buildCertPath"); 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PKIXBuilderParameters buildParams = new PKIXBuilderParameters( 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Collections.singleton(new TrustAnchor(rootCertificateSS, null)), 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theCertSelector); 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buildParams.addCertStore(store); 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buildParams.setRevocationEnabled(false); 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return buildParams; 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 841