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.math.BigInteger; 22db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport java.util.Date; 23db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 24db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Rootimport javax.security.auth.x500.X500Principal; 25db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 261c219f619291ba818bc2542390a2988539d94ed0Kenny Rootpublic class KeyPairGeneratorSpecTest extends AndroidTestCase { 27db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final String TEST_ALIAS_1 = "test1"; 28db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 29db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final X500Principal TEST_DN_1 = new X500Principal("CN=test1"); 30db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 31db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final long NOW_MILLIS = System.currentTimeMillis(); 32db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 33db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final BigInteger SERIAL_1 = BigInteger.ONE; 34db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 35db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root /* We have to round this off because X509v3 doesn't store milliseconds. */ 36db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final Date NOW = new Date(NOW_MILLIS - (NOW_MILLIS % 1000L)); 37db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 38db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root @SuppressWarnings("deprecation") 39db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root private static final Date NOW_PLUS_10_YEARS = new Date(NOW.getYear() + 10, 0, 1); 40db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 41db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_Success() throws Exception { 421c219f619291ba818bc2542390a2988539d94ed0Kenny Root KeyPairGeneratorSpec spec = 43a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, 44a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root SERIAL_1, NOW, NOW_PLUS_10_YEARS, 0); 45db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 46db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("Context should be the one specified", getContext(), spec.getContext()); 47acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root 48acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root assertEquals("Alias should be the one specified", TEST_ALIAS_1, spec.getKeystoreAlias()); 49acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root 50a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals("Key algorithm should be the one specified", "RSA", spec.getKeyType()); 51a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 52a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals("Key size should be the one specified", 1024, spec.getKeySize()); 53a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 54acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root assertEquals("subjectDN should be the one specified", TEST_DN_1, spec.getSubjectDN()); 55acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root 56acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root assertEquals("startDate should be the one specified", NOW, spec.getStartDate()); 57acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root 58acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root assertEquals("endDate should be the one specified", NOW_PLUS_10_YEARS, spec.getEndDate()); 59acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root } 60acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root 61acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root public void testBuilder_Success() throws Exception { 621c219f619291ba818bc2542390a2988539d94ed0Kenny Root KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(getContext()) 63acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .setAlias(TEST_ALIAS_1) 64a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeyType("RSA") 65a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root .setKeySize(1024) 66acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .setSubject(TEST_DN_1) 67acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .setSerialNumber(SERIAL_1) 68acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .setStartDate(NOW) 69acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .setEndDate(NOW_PLUS_10_YEARS) 702eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEncryptionRequired() 71acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .build(); 72acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root 73acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root assertEquals("Context should be the one specified", getContext(), spec.getContext()); 74db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 75db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("Alias should be the one specified", TEST_ALIAS_1, spec.getKeystoreAlias()); 76db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 77a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals("Key algorithm should be the one specified", "RSA", spec.getKeyType()); 78a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 79a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root assertEquals("Key size should be the one specified", 1024, spec.getKeySize()); 80a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root 81db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("subjectDN should be the one specified", TEST_DN_1, spec.getSubjectDN()); 82db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 83db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("startDate should be the one specified", NOW, spec.getStartDate()); 84db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 85db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("endDate should be the one specified", NOW_PLUS_10_YEARS, spec.getEndDate()); 862eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 872eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root assertEquals("encryption flag should be on", KeyStore.FLAG_ENCRYPTED, spec.getFlags()); 88db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 89db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 90db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullContext_Failure() throws Exception { 91db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 92a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root new KeyPairGeneratorSpec(null, TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1, NOW, 932eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, 0); 94db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when context is null"); 95db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 96db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 97db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 98db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 99db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullKeystoreAlias_Failure() throws Exception { 100db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 101a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root new KeyPairGeneratorSpec(getContext(), null, "RSA", 1024, null, TEST_DN_1, SERIAL_1, NOW, 1022eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, 0); 103db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when keystoreAlias is null"); 104db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 105db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 106db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 107db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 108db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullSubjectDN_Failure() throws Exception { 109db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 110a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, null, SERIAL_1, NOW, 1112eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, 0); 112db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when subjectDN is null"); 113db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 114db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 115db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 116db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 117db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullSerial_Failure() throws Exception { 118db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 119a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, null, NOW, 1202eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, 0); 121db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when startDate is null"); 122db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 123db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 124db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 125db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 126db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullStartDate_Failure() throws Exception { 127db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 128a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1, 129a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root null, NOW_PLUS_10_YEARS, 0); 130db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when startDate is null"); 131db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 132db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 133db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 134db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 135db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullEndDate_Failure() throws Exception { 136db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 137a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1, 138a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root NOW, null, 0); 139db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when keystoreAlias is null"); 140db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 141db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 142db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 143db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 144db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_EndBeforeStart_Failure() throws Exception { 145db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 146a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1, 1472eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, NOW, 0); 148db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when end is before start"); 149db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 150db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 151db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 152db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root} 153