1db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root/* 2db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * Copyright (C) 2012 The Android Open Source Project 3db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * 4db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 5db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * you may not use this file except in compliance with the License. 6db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * You may obtain a copy of the License at 7db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * 8db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * http://www.apache.org/licenses/LICENSE-2.0 9db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * 10db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * Unless required by applicable law or agreed to in writing, software 11db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * distributed under the License is distributed on an "AS IS" BASIS, 12db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * See the License for the specific language governing permissions and 14db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root * limitations under the License. 15db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root */ 16db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 17db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootpackage android.security; 18db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 19db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport android.test.AndroidTestCase; 20db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 21db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.io.ByteArrayInputStream; 22db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.math.BigInteger; 23db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.security.KeyPair; 24db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.security.PrivateKey; 25db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.security.PublicKey; 26db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.security.SecureRandom; 27db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.security.cert.Certificate; 28db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.security.cert.CertificateFactory; 29db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.security.cert.X509Certificate; 30a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Rootimport java.security.interfaces.DSAParams; 31a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Rootimport java.security.interfaces.DSAPublicKey; 32a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Rootimport java.security.interfaces.ECPublicKey; 33a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Rootimport java.security.interfaces.RSAPublicKey; 34a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Rootimport java.security.spec.AlgorithmParameterSpec; 35a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Rootimport java.security.spec.DSAParameterSpec; 36a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Rootimport java.security.spec.RSAKeyGenParameterSpec; 372eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Rootimport java.text.SimpleDateFormat; 38db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.util.Date; 39db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 40db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport javax.security.auth.x500.X500Principal; 41db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 42db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootpublic class AndroidKeyPairGeneratorTest extends AndroidTestCase { 43db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private android.security.KeyStore mAndroidKeyStore; 44db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 45db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private java.security.KeyPairGenerator mGenerator; 46db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 47db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final String TEST_ALIAS_1 = "test1"; 48db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 49db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final String TEST_ALIAS_2 = "test2"; 50db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 51db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final X500Principal TEST_DN_1 = new X500Principal("CN=test1"); 52db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 53db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final X500Principal TEST_DN_2 = new X500Principal("CN=test2"); 54db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 55db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final BigInteger TEST_SERIAL_1 = BigInteger.ONE; 56db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 57db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final BigInteger TEST_SERIAL_2 = BigInteger.valueOf(2L); 58db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 59db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final long NOW_MILLIS = System.currentTimeMillis(); 60db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 61db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root /* We have to round this off because X509v3 doesn't store milliseconds. */ 62db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final Date NOW = new Date(NOW_MILLIS - (NOW_MILLIS % 1000L)); 63db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 64db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root @SuppressWarnings("deprecation") 65db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final Date NOW_PLUS_10_YEARS = new Date(NOW.getYear() + 10, 0, 1); 66db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 67db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root @Override 68db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root protected void setUp() throws Exception { 69db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root mAndroidKeyStore = android.security.KeyStore.getInstance(); 70db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 71db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertTrue(mAndroidKeyStore.reset()); 72db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 73b9594ce9ebb3f5f303a280f04312ae5754ce3560Kenny Root assertFalse(mAndroidKeyStore.isUnlocked()); 74db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 751c219f619291ba818bc2542390a2988539d94ed0Kenny Root mGenerator = java.security.KeyPairGenerator.getInstance("RSA", "AndroidKeyStore"); 762eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root } 772eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 782eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root private void setupPassword() { 79db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertTrue(mAndroidKeyStore.password("1111")); 80b9594ce9ebb3f5f303a280f04312ae5754ce3560Kenny Root assertTrue(mAndroidKeyStore.isUnlocked()); 81db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 8278ad849163a7b01073b46fbd7d818392720005d1Kenny Root String[] aliases = mAndroidKeyStore.saw(""); 8378ad849163a7b01073b46fbd7d818392720005d1Kenny Root assertNotNull(aliases); 8478ad849163a7b01073b46fbd7d818392720005d1Kenny Root assertEquals(0, aliases.length); 85db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 86db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 872eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root public void testKeyPairGenerator_Initialize_Params_Encrypted_Success() throws Exception { 882eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root setupPassword(); 892eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 901c219f619291ba818bc2542390a2988539d94ed0Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 912eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setAlias(TEST_ALIAS_1) 922eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSubject(TEST_DN_1) 932eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSerialNumber(TEST_SERIAL_1) 942eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setStartDate(NOW) 952eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 962eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEncryptionRequired() 972eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .build()); 98db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 99db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 1002eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root public void testKeyPairGenerator_Initialize_KeySize_Encrypted_Failure() throws Exception { 1012eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root setupPassword(); 1022eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 103db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 104db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root mGenerator.initialize(1024); 105db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("KeyPairGenerator should not support setting the key size"); 106db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 107db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 108db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 109db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 1102eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root public void testKeyPairGenerator_Initialize_KeySizeAndSecureRandom_Encrypted_Failure() 1112eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root throws Exception { 1122eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root setupPassword(); 1132eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 114db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 115db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root mGenerator.initialize(1024, new SecureRandom()); 116db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("KeyPairGenerator should not support setting the key size"); 117db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 118db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 119db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 120db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 1212eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root public void testKeyPairGenerator_Initialize_ParamsAndSecureRandom_Encrypted_Failure() 1222eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root throws Exception { 1232eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root setupPassword(); 1242eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 1252eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root mGenerator.initialize( 1261c219f619291ba818bc2542390a2988539d94ed0Kenny Root new KeyPairGeneratorSpec.Builder(getContext()) 1272eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setAlias(TEST_ALIAS_1) 128a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeyType("RSA") 129a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeySize(1024) 1302eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSubject(TEST_DN_1) 1312eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSerialNumber(TEST_SERIAL_1) 1322eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setStartDate(NOW) 1332eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 1342eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEncryptionRequired() 1352eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .build(), 1362eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root new SecureRandom()); 137db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 138db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 1392eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root public void testKeyPairGenerator_GenerateKeyPair_Encrypted_Success() throws Exception { 1402eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root setupPassword(); 1412eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 1421c219f619291ba818bc2542390a2988539d94ed0Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 1432eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setAlias(TEST_ALIAS_1) 1442eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSubject(TEST_DN_1) 1452eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSerialNumber(TEST_SERIAL_1) 1462eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setStartDate(NOW) 1472eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 1482eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEncryptionRequired() 1492eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .build()); 1502eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 1512eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root final KeyPair pair = mGenerator.generateKeyPair(); 1522eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root assertNotNull("The KeyPair returned should not be null", pair); 1532eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 154a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair, TEST_ALIAS_1, "RSA", 2048, null, TEST_DN_1, TEST_SERIAL_1, NOW, 155a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW_PLUS_10_YEARS); 1562eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root } 1572eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 158a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root public void testKeyPairGenerator_GenerateKeyPair_DSA_Unencrypted_Success() throws Exception { 1591c219f619291ba818bc2542390a2988539d94ed0Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 1602eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setAlias(TEST_ALIAS_1) 161a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeyType("DSA") 1622eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSubject(TEST_DN_1) 1632eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSerialNumber(TEST_SERIAL_1) 1642eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setStartDate(NOW) 1652eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 1662eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .build()); 167db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 168db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final KeyPair pair = mGenerator.generateKeyPair(); 169db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertNotNull("The KeyPair returned should not be null", pair); 170db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 171a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair, TEST_ALIAS_1, "DSA", 1024, null, TEST_DN_1, TEST_SERIAL_1, NOW, 172a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW_PLUS_10_YEARS); 173a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } 174a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 175a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root public void testKeyPairGenerator_GenerateKeyPair_DSA_2048_Unencrypted_Success() 176a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root throws Exception { 177a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 178a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setAlias(TEST_ALIAS_1) 179a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeyType("DSA") 180a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeySize(2048) 181a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSubject(TEST_DN_1) 182a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSerialNumber(TEST_SERIAL_1) 183a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setStartDate(NOW) 184a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 185a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .build()); 186a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 187a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root final KeyPair pair = mGenerator.generateKeyPair(); 188a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertNotNull("The KeyPair returned should not be null", pair); 189a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 190a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair, TEST_ALIAS_1, "DSA", 2048, null, TEST_DN_1, TEST_SERIAL_1, NOW, 191a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW_PLUS_10_YEARS); 192a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } 193a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 194a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root public void testKeyPairGenerator_GenerateKeyPair_DSA_SpecifiedParams_Unencrypted_Success() 195a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root throws Exception { 196a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root /* 197a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root * generated using: openssl dsaparam -C 2048 198a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root */ 199a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root BigInteger p = new BigInteger(1, new byte[] { 200a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xC0, (byte) 0x3D, (byte) 0x86, (byte) 0x09, (byte) 0xCA, (byte) 0x8C, 201a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x37, (byte) 0xCA, (byte) 0xCC, (byte) 0x4A, (byte) 0x81, (byte) 0xBD, 202a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xD8, (byte) 0x50, (byte) 0x77, (byte) 0xCD, (byte) 0xDD, (byte) 0x32, 203a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x0B, (byte) 0x43, (byte) 0xBF, (byte) 0x42, (byte) 0x06, (byte) 0x5A, 204a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x3D, (byte) 0x18, (byte) 0x50, (byte) 0x47, (byte) 0x79, (byte) 0xE1, 205a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x5B, (byte) 0x86, (byte) 0x03, (byte) 0xB9, (byte) 0x28, (byte) 0x9C, 206a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x18, (byte) 0xA9, (byte) 0xF5, (byte) 0xD6, (byte) 0xF4, (byte) 0x94, 207a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x5B, (byte) 0x87, (byte) 0x58, (byte) 0xCA, (byte) 0xB2, (byte) 0x1E, 208a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xFC, (byte) 0xED, (byte) 0x37, (byte) 0xC3, (byte) 0x49, (byte) 0xAC, 209a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xFA, (byte) 0x46, (byte) 0xDB, (byte) 0x7A, (byte) 0x50, (byte) 0x96, 210a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xCF, (byte) 0x52, (byte) 0xD7, (byte) 0x4E, (byte) 0xEB, (byte) 0x26, 211a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x41, (byte) 0xA2, (byte) 0x6F, (byte) 0x99, (byte) 0x80, (byte) 0x9F, 212a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x0F, (byte) 0x0A, (byte) 0xA8, (byte) 0x0D, (byte) 0xAC, (byte) 0xAB, 213a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xEF, (byte) 0x7D, (byte) 0xE7, (byte) 0x4C, (byte) 0xF1, (byte) 0x88, 214a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x44, (byte) 0xC9, (byte) 0x17, (byte) 0xD0, (byte) 0xBB, (byte) 0xE2, 215a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x01, (byte) 0x8C, (byte) 0xC1, (byte) 0x02, (byte) 0x1D, (byte) 0x3C, 216a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x15, (byte) 0xB7, (byte) 0x41, (byte) 0x30, (byte) 0xD8, (byte) 0x11, 217a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xBD, (byte) 0x6A, (byte) 0x2A, (byte) 0x0D, (byte) 0x36, (byte) 0x44, 218a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x9C, (byte) 0x3F, (byte) 0x32, (byte) 0xE2, (byte) 0x1C, (byte) 0xFB, 219a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xE3, (byte) 0xFF, (byte) 0xCC, (byte) 0x1A, (byte) 0x72, (byte) 0x38, 220a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x37, (byte) 0x69, (byte) 0x5E, (byte) 0x35, (byte) 0x73, (byte) 0xE1, 221a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x1E, (byte) 0x74, (byte) 0x35, (byte) 0x44, (byte) 0x07, (byte) 0xB5, 222a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x2F, (byte) 0x0B, (byte) 0x60, (byte) 0xF4, (byte) 0xA9, (byte) 0xE0, 223a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x81, (byte) 0xB2, (byte) 0xCD, (byte) 0x8B, (byte) 0x82, (byte) 0x76, 224a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x7F, (byte) 0xD4, (byte) 0x17, (byte) 0x32, (byte) 0x86, (byte) 0x98, 225a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x7C, (byte) 0x85, (byte) 0x66, (byte) 0xF6, (byte) 0x77, (byte) 0xED, 226a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x8B, (byte) 0x1A, (byte) 0x52, (byte) 0x16, (byte) 0xDA, (byte) 0x1C, 227a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xA7, (byte) 0x16, (byte) 0x79, (byte) 0x20, (byte) 0x1C, (byte) 0x99, 228a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x5F, (byte) 0x12, (byte) 0x66, (byte) 0x15, (byte) 0x9F, (byte) 0xE5, 229a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x73, (byte) 0xA9, (byte) 0x61, (byte) 0xBA, (byte) 0xA7, (byte) 0x23, 230a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x93, (byte) 0x77, (byte) 0xB5, (byte) 0xF6, (byte) 0xEC, (byte) 0x13, 231a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xBF, (byte) 0x95, (byte) 0x60, (byte) 0x78, (byte) 0x84, (byte) 0xE3, 232a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x44, (byte) 0xEC, (byte) 0x74, (byte) 0xC2, (byte) 0xCB, (byte) 0xD4, 233a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x70, (byte) 0xC5, (byte) 0x7B, (byte) 0xF8, (byte) 0x07, (byte) 0x3B, 234a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xEB, (byte) 0x9F, (byte) 0xC9, (byte) 0x7D, (byte) 0xE0, (byte) 0xA5, 235a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xBA, (byte) 0x68, (byte) 0x7B, (byte) 0xF4, (byte) 0x70, (byte) 0x40, 236a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xAE, (byte) 0xE9, (byte) 0x65, (byte) 0xEE, (byte) 0x5B, (byte) 0x71, 237a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x36, (byte) 0x0B, (byte) 0xB0, (byte) 0xA2, (byte) 0x98, (byte) 0x7D, 238a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xE3, (byte) 0x24, (byte) 0x95, (byte) 0x2B, (byte) 0xC2, (byte) 0x0A, 239a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x78, (byte) 0x3D, (byte) 0xCC, (byte) 0x3A, (byte) 0xEE, (byte) 0xED, 240a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x48, (byte) 0xEB, (byte) 0xA3, (byte) 0x78, (byte) 0xA8, (byte) 0x9D, 241a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x0A, (byte) 0x8F, (byte) 0x9E, (byte) 0x59, (byte) 0x2C, (byte) 0x44, 242a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xB5, (byte) 0xF9, (byte) 0x53, (byte) 0x43, 243a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root }); 244a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 245a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root BigInteger q = new BigInteger(1, new byte[] { 246a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xA1, (byte) 0x9B, (byte) 0x1D, (byte) 0xC0, (byte) 0xE3, (byte) 0xF6, 247a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x4A, (byte) 0x35, (byte) 0xE1, (byte) 0x8A, (byte) 0x43, (byte) 0xC2, 248a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x9C, (byte) 0xF9, (byte) 0x52, (byte) 0x8F, (byte) 0x94, (byte) 0xA1, 249a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x12, (byte) 0x11, (byte) 0xDB, (byte) 0x9A, (byte) 0xB6, (byte) 0x35, 250a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x56, (byte) 0x26, (byte) 0x60, (byte) 0x89, (byte) 0x11, (byte) 0xAC, 251a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xA8, (byte) 0xE5, 252a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root }); 253a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 254a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root BigInteger g = new BigInteger(1, new byte[] { 255a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xA1, (byte) 0x5C, (byte) 0x57, (byte) 0x15, (byte) 0xC3, (byte) 0xD9, 256a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xD7, (byte) 0x41, (byte) 0x89, (byte) 0xD6, (byte) 0xB8, (byte) 0x7B, 257a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xF3, (byte) 0xE0, (byte) 0xB3, (byte) 0xC5, (byte) 0xD1, (byte) 0xAA, 258a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xF9, (byte) 0x55, (byte) 0x48, (byte) 0xF1, (byte) 0xDA, (byte) 0xE8, 259a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x6F, (byte) 0x51, (byte) 0x05, (byte) 0xB2, (byte) 0xC9, (byte) 0x64, 260a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xDA, (byte) 0x5F, (byte) 0xD4, (byte) 0xAA, (byte) 0xFD, (byte) 0x67, 261a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xE0, (byte) 0x10, (byte) 0x2C, (byte) 0x1F, (byte) 0x03, (byte) 0x10, 262a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xD4, (byte) 0x4B, (byte) 0x20, (byte) 0x82, (byte) 0x2B, (byte) 0x04, 263a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xF9, (byte) 0x09, (byte) 0xAE, (byte) 0x28, (byte) 0x3D, (byte) 0x9B, 264a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xFF, (byte) 0x87, (byte) 0x76, (byte) 0xCD, (byte) 0xF0, (byte) 0x11, 265a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xB7, (byte) 0xEA, (byte) 0xE6, (byte) 0xCD, (byte) 0x60, (byte) 0xD3, 266a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x8C, (byte) 0x74, (byte) 0xD3, (byte) 0x45, (byte) 0x63, (byte) 0x69, 267a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x3F, (byte) 0x1D, (byte) 0x31, (byte) 0x25, (byte) 0x49, (byte) 0x97, 268a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x4B, (byte) 0x73, (byte) 0x34, (byte) 0x12, (byte) 0x73, (byte) 0x27, 269a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x4C, (byte) 0xDA, (byte) 0xF3, (byte) 0x08, (byte) 0xA8, (byte) 0xA9, 270a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x27, (byte) 0xE4, (byte) 0xB8, (byte) 0xD6, (byte) 0xB5, (byte) 0xC4, 271a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x18, (byte) 0xED, (byte) 0xBD, (byte) 0x6F, (byte) 0xA2, (byte) 0x36, 272a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xA2, (byte) 0x9C, (byte) 0x27, (byte) 0x62, (byte) 0x7F, (byte) 0x93, 273a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xD7, (byte) 0x52, (byte) 0xA9, (byte) 0x76, (byte) 0x55, (byte) 0x99, 274a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x00, (byte) 0x5B, (byte) 0xC2, (byte) 0xB9, (byte) 0x18, (byte) 0xAC, 275a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x6B, (byte) 0x83, (byte) 0x0D, (byte) 0xA1, (byte) 0xC5, (byte) 0x01, 276a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x1A, (byte) 0xE5, (byte) 0x4D, (byte) 0x2F, (byte) 0xCF, (byte) 0x5D, 277a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xB2, (byte) 0xE7, (byte) 0xC7, (byte) 0xCB, (byte) 0x2C, (byte) 0xFF, 278a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x51, (byte) 0x1B, (byte) 0x9D, (byte) 0xA4, (byte) 0x05, (byte) 0xEB, 279a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x17, (byte) 0xD8, (byte) 0x97, (byte) 0x9D, (byte) 0x0C, (byte) 0x59, 280a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x92, (byte) 0x8A, (byte) 0x03, (byte) 0x34, (byte) 0xFD, (byte) 0x16, 281a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x0F, (byte) 0x2A, (byte) 0xF9, (byte) 0x7D, (byte) 0xC3, (byte) 0x41, 282a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x0D, (byte) 0x06, (byte) 0x5A, (byte) 0x4B, (byte) 0x34, (byte) 0xD5, 283a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xF5, (byte) 0x09, (byte) 0x1C, (byte) 0xCE, (byte) 0xA7, (byte) 0x19, 284a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x6D, (byte) 0x04, (byte) 0x53, (byte) 0x71, (byte) 0xCC, (byte) 0x84, 285a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xA0, (byte) 0xB2, (byte) 0xA0, (byte) 0x68, (byte) 0xA3, (byte) 0x40, 286a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xC0, (byte) 0x67, (byte) 0x38, (byte) 0x96, (byte) 0x73, (byte) 0x2E, 287a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x8E, (byte) 0x2A, (byte) 0x9D, (byte) 0x56, (byte) 0xE9, (byte) 0xAC, 288a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xC7, (byte) 0xEC, (byte) 0x84, (byte) 0x7F, (byte) 0xFC, (byte) 0xE0, 289a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x69, (byte) 0x03, (byte) 0x8B, (byte) 0x48, (byte) 0x64, (byte) 0x76, 290a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x85, (byte) 0xA5, (byte) 0x10, (byte) 0xD9, (byte) 0x31, (byte) 0xC3, 291a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x8B, (byte) 0x07, (byte) 0x48, (byte) 0x62, (byte) 0xF6, (byte) 0x68, 292a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xF2, (byte) 0x96, (byte) 0xB2, (byte) 0x18, (byte) 0x5B, (byte) 0xFF, 293a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x6D, (byte) 0xD1, (byte) 0x6B, (byte) 0xF5, (byte) 0xFD, (byte) 0x81, 294a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xF1, (byte) 0xFD, (byte) 0x04, (byte) 0xF0, (byte) 0x9F, (byte) 0xB7, 295a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x08, (byte) 0x95, (byte) 0x57, (byte) 0x48, (byte) 0x07, (byte) 0x00, 296a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0x52, (byte) 0xEC, (byte) 0x75, (byte) 0x91, (byte) 0x02, (byte) 0x11, 297a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (byte) 0xA3, (byte) 0x64, (byte) 0x26, (byte) 0xCA, 298a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root }); 299a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 300a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root AlgorithmParameterSpec spec = new DSAParameterSpec(p, q, g); 301a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 302a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setAlias(TEST_ALIAS_1) 303a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeyType("DSA") 304a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeySize(2048) 305a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setAlgorithmParameterSpec(spec) 306a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSubject(TEST_DN_1) 307a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSerialNumber(TEST_SERIAL_1) 308a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setStartDate(NOW) 309a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 310a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .build()); 311a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 312a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root final KeyPair pair = mGenerator.generateKeyPair(); 313a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertNotNull("The KeyPair returned should not be null", pair); 314a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 315a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair, TEST_ALIAS_1, "DSA", 2048, spec, TEST_DN_1, TEST_SERIAL_1, NOW, 316a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW_PLUS_10_YEARS); 317a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } 318a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 319a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root public void testKeyPairGenerator_GenerateKeyPair_EC_Unencrypted_Success() throws Exception { 320a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 321a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setAlias(TEST_ALIAS_1) 322a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeyType("EC") 323a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSubject(TEST_DN_1) 324a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSerialNumber(TEST_SERIAL_1) 325a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setStartDate(NOW) 326a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 327a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .build()); 328a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 329a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root final KeyPair pair = mGenerator.generateKeyPair(); 330a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertNotNull("The KeyPair returned should not be null", pair); 331a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 332a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair, TEST_ALIAS_1, "EC", 256, null, TEST_DN_1, TEST_SERIAL_1, NOW, 333a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW_PLUS_10_YEARS); 334a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } 335a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 336a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root public void testKeyPairGenerator_GenerateKeyPair_EC_P521_Unencrypted_Success() throws Exception { 337a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 338a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setAlias(TEST_ALIAS_1) 339a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeyType("EC") 340a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeySize(521) 341a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSubject(TEST_DN_1) 342a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSerialNumber(TEST_SERIAL_1) 343a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setStartDate(NOW) 344a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 345a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .build()); 346a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 347a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root final KeyPair pair = mGenerator.generateKeyPair(); 348a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertNotNull("The KeyPair returned should not be null", pair); 349a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 350a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair, TEST_ALIAS_1, "EC", 521, null, TEST_DN_1, TEST_SERIAL_1, NOW, 351a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW_PLUS_10_YEARS); 352a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } 353a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 354a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root public void testKeyPairGenerator_GenerateKeyPair_RSA_Unencrypted_Success() throws Exception { 355a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 356a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setAlias(TEST_ALIAS_1) 357a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSubject(TEST_DN_1) 358a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSerialNumber(TEST_SERIAL_1) 359a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setStartDate(NOW) 360a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 361a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .build()); 362a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 363a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root final KeyPair pair = mGenerator.generateKeyPair(); 364a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertNotNull("The KeyPair returned should not be null", pair); 365a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 366a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair, TEST_ALIAS_1, "RSA", 2048, null, TEST_DN_1, TEST_SERIAL_1, NOW, 367a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW_PLUS_10_YEARS); 368a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } 369a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 370a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root public void testKeyPairGenerator_GenerateKeyPair_RSA_WithParams_Unencrypted_Success() 371a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root throws Exception { 372a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root AlgorithmParameterSpec spec = new RSAKeyGenParameterSpec(1024, BigInteger.valueOf(3L)); 373a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 374a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setAlias(TEST_ALIAS_1) 375a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeySize(1024) 376a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setAlgorithmParameterSpec(spec) 377a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSubject(TEST_DN_1) 378a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setSerialNumber(TEST_SERIAL_1) 379a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setStartDate(NOW) 380a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 381a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .build()); 382a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 383a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root final KeyPair pair = mGenerator.generateKeyPair(); 384a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertNotNull("The KeyPair returned should not be null", pair); 385a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 386a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair, TEST_ALIAS_1, "RSA", 1024, spec, TEST_DN_1, TEST_SERIAL_1, NOW, 387a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW_PLUS_10_YEARS); 388db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 389db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 390db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testKeyPairGenerator_GenerateKeyPair_Replaced_Success() throws Exception { 391db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root // Generate the first key 392db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root { 3931c219f619291ba818bc2542390a2988539d94ed0Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 3942eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setAlias(TEST_ALIAS_1) 3952eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSubject(TEST_DN_1) 3962eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSerialNumber(TEST_SERIAL_1) 3972eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setStartDate(NOW) 3982eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 3992eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .build()); 400db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final KeyPair pair1 = mGenerator.generateKeyPair(); 401db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertNotNull("The KeyPair returned should not be null", pair1); 402a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair1, TEST_ALIAS_1, "RSA", 2048, null, TEST_DN_1, TEST_SERIAL_1, 403a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW, NOW_PLUS_10_YEARS); 404db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 405db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 406db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root // Replace the original key 407db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root { 4081c219f619291ba818bc2542390a2988539d94ed0Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 4092eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setAlias(TEST_ALIAS_2) 4102eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSubject(TEST_DN_2) 4112eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSerialNumber(TEST_SERIAL_2) 4122eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setStartDate(NOW) 4132eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 4142eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .build()); 415db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final KeyPair pair2 = mGenerator.generateKeyPair(); 416db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertNotNull("The KeyPair returned should not be null", pair2); 417a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair2, TEST_ALIAS_2, "RSA", 2048, null, TEST_DN_2, TEST_SERIAL_2, 418a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW, NOW_PLUS_10_YEARS); 419db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 420db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 421db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 4222eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root public void testKeyPairGenerator_GenerateKeyPair_Replaced_UnencryptedToEncrypted_Success() 4232eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root throws Exception { 4242eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root // Generate the first key 4252eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root { 4261c219f619291ba818bc2542390a2988539d94ed0Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 4272eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setAlias(TEST_ALIAS_1) 4282eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSubject(TEST_DN_1) 4292eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSerialNumber(TEST_SERIAL_1) 4302eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setStartDate(NOW) 4312eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 4322eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .build()); 4332eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root final KeyPair pair1 = mGenerator.generateKeyPair(); 4342eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root assertNotNull("The KeyPair returned should not be null", pair1); 435a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair1, TEST_ALIAS_1, "RSA", 2048, null, TEST_DN_1, TEST_SERIAL_1, 436a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW, NOW_PLUS_10_YEARS); 4372eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root } 4382eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 4392eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root // Attempt to replace previous key 4402eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root { 4411c219f619291ba818bc2542390a2988539d94ed0Kenny Root mGenerator.initialize(new KeyPairGeneratorSpec.Builder(getContext()) 4422eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setAlias(TEST_ALIAS_1) 4432eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSubject(TEST_DN_2) 4442eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setSerialNumber(TEST_SERIAL_2) 4452eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setStartDate(NOW) 4462eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEndDate(NOW_PLUS_10_YEARS) 4472eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEncryptionRequired() 4482eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .build()); 4492eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root try { 4502eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root mGenerator.generateKeyPair(); 4512eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root fail("Should not be able to generate encrypted key while not initialized"); 4522eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root } catch (IllegalStateException expected) { 4532eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root } 4542eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 4552eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root assertTrue(mAndroidKeyStore.password("1111")); 4562eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root assertTrue(mAndroidKeyStore.isUnlocked()); 4572eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 4582eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root final KeyPair pair2 = mGenerator.generateKeyPair(); 4592eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root assertNotNull("The KeyPair returned should not be null", pair2); 460a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertKeyPairCorrect(pair2, TEST_ALIAS_1, "RSA", 2048, null, TEST_DN_2, TEST_SERIAL_2, 461a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW, NOW_PLUS_10_YEARS); 4622eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root } 4632eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root } 4642eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 465a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root private void assertKeyPairCorrect(KeyPair pair, String alias, String keyType, int keySize, 466a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root AlgorithmParameterSpec spec, X500Principal dn, BigInteger serial, Date start, Date end) 467a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root throws Exception { 468db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final PublicKey pubKey = pair.getPublic(); 469db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertNotNull("The PublicKey for the KeyPair should be not null", pubKey); 470a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals(keyType, pubKey.getAlgorithm()); 471a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 472a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root if ("DSA".equalsIgnoreCase(keyType)) { 473a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root DSAPublicKey dsaPubKey = (DSAPublicKey) pubKey; 474a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root DSAParams actualParams = dsaPubKey.getParams(); 475a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals(keySize, (actualParams.getP().bitLength() + 7) & ~7); 476a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root if (spec != null) { 477a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root DSAParameterSpec expectedParams = (DSAParameterSpec) spec; 478a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals(expectedParams.getP(), actualParams.getP()); 479a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals(expectedParams.getQ(), actualParams.getQ()); 480a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals(expectedParams.getG(), actualParams.getG()); 481a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } 482a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } else if ("EC".equalsIgnoreCase(keyType)) { 483a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals("Curve should be what was specified during initialization", keySize, 484a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root ((ECPublicKey) pubKey).getParams().getCurve().getField().getFieldSize()); 485a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } else if ("RSA".equalsIgnoreCase(keyType)) { 486a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root RSAPublicKey rsaPubKey = (RSAPublicKey) pubKey; 487a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals("Modulus size should be what is specified during initialization", 488a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root (keySize + 7) & ~7, (rsaPubKey.getModulus().bitLength() + 7) & ~7); 489a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root if (spec != null) { 490a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root RSAKeyGenParameterSpec params = (RSAKeyGenParameterSpec) spec; 491a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals((keySize + 7) & ~7, (params.getKeysize() + 7) & ~7); 492a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals(params.getPublicExponent(), rsaPubKey.getPublicExponent()); 493a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } 494a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root } 495db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 496db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final PrivateKey privKey = pair.getPrivate(); 497db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertNotNull("The PrivateKey for the KeyPair should be not null", privKey); 498a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals(keyType, privKey.getAlgorithm()); 499db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 500db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final byte[] userCertBytes = mAndroidKeyStore.get(Credentials.USER_CERTIFICATE + alias); 501db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertNotNull("The user certificate should exist for the generated entry", userCertBytes); 502db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 503db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final CertificateFactory cf = CertificateFactory.getInstance("X.509"); 504db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final Certificate userCert = cf 505db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root .generateCertificate(new ByteArrayInputStream(userCertBytes)); 506db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 507db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertTrue("Certificate should be in X.509 format", userCert instanceof X509Certificate); 508db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 509db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final X509Certificate x509userCert = (X509Certificate) userCert; 510db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 511db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("PublicKey used to sign certificate should match one returned in KeyPair", 512db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root pubKey, x509userCert.getPublicKey()); 513db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 514db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("The Subject DN should be the one passed into the params", dn, 515db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root x509userCert.getSubjectDN()); 516db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 517db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("The Issuer DN should be the same as the Subject DN", dn, 518db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root x509userCert.getIssuerDN()); 519db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 520db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("The Serial should be the one passed into the params", serial, 521db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root x509userCert.getSerialNumber()); 522db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 5232eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root assertDateEquals("The notBefore date should be the one passed into the params", start, 524db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root x509userCert.getNotBefore()); 525db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 5262eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root assertDateEquals("The notAfter date should be the one passed into the params", end, 527db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root x509userCert.getNotAfter()); 528db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 529db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root x509userCert.verify(pubKey); 530db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 531db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final byte[] caCerts = mAndroidKeyStore.get(Credentials.CA_CERTIFICATE + alias); 532db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertNull("A list of CA certificates should not exist for the generated entry", caCerts); 533db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 534db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root final byte[] pubKeyBytes = mAndroidKeyStore.getPubkey(Credentials.USER_PRIVATE_KEY + alias); 535db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertNotNull("The keystore should return the public key for the generated key", 536db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root pubKeyBytes); 537db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 5382eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 5392eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root private static void assertDateEquals(String message, Date date1, Date date2) throws Exception { 5402eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss"); 5412eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 5422eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root String result1 = formatter.format(date1); 5432eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root String result2 = formatter.format(date2); 5442eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 5452eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root assertEquals(message, result1, result2); 5462eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root } 547db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root} 548