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 = 431c219f619291ba818bc2542390a2988539d94ed0Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, TEST_DN_1, SERIAL_1, 442eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 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 50acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root assertEquals("subjectDN should be the one specified", TEST_DN_1, spec.getSubjectDN()); 51acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root 52acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root assertEquals("startDate should be the one specified", NOW, spec.getStartDate()); 53acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root 54acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root assertEquals("endDate should be the one specified", NOW_PLUS_10_YEARS, spec.getEndDate()); 55acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root } 56acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root 57acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root public void testBuilder_Success() throws Exception { 581c219f619291ba818bc2542390a2988539d94ed0Kenny Root KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(getContext()) 59acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .setAlias(TEST_ALIAS_1) 60acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .setSubject(TEST_DN_1) 61acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .setSerialNumber(SERIAL_1) 62acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .setStartDate(NOW) 63acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .setEndDate(NOW_PLUS_10_YEARS) 642eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root .setEncryptionRequired() 65acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root .build(); 66acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root 67acb0b5b220b2cb15f5a800a356bb25f47252a6eaKenny Root assertEquals("Context should be the one specified", getContext(), spec.getContext()); 68db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 69db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("Alias should be the one specified", TEST_ALIAS_1, spec.getKeystoreAlias()); 70db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 71db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("subjectDN should be the one specified", TEST_DN_1, spec.getSubjectDN()); 72db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 73db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("startDate should be the one specified", NOW, spec.getStartDate()); 74db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 75db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root assertEquals("endDate should be the one specified", NOW_PLUS_10_YEARS, spec.getEndDate()); 762eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root 772eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root assertEquals("encryption flag should be on", KeyStore.FLAG_ENCRYPTED, spec.getFlags()); 78db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 79db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 80db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullContext_Failure() throws Exception { 81db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 821c219f619291ba818bc2542390a2988539d94ed0Kenny Root new KeyPairGeneratorSpec(null, TEST_ALIAS_1, TEST_DN_1, SERIAL_1, NOW, 832eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, 0); 84db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when context is null"); 85db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 86db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 87db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 88db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 89db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullKeystoreAlias_Failure() throws Exception { 90db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 911c219f619291ba818bc2542390a2988539d94ed0Kenny Root new KeyPairGeneratorSpec(getContext(), null, TEST_DN_1, SERIAL_1, NOW, 922eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, 0); 93db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when keystoreAlias is null"); 94db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 95db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 96db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 97db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 98db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullSubjectDN_Failure() throws Exception { 99db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 1001c219f619291ba818bc2542390a2988539d94ed0Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, null, SERIAL_1, NOW, 1012eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, 0); 102db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when subjectDN is null"); 103db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 104db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 105db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 106db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 107db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullSerial_Failure() throws Exception { 108db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 1091c219f619291ba818bc2542390a2988539d94ed0Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, TEST_DN_1, null, NOW, 1102eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, 0); 111db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when startDate is null"); 112db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 113db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 114db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 115db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 116db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullStartDate_Failure() throws Exception { 117db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 1181c219f619291ba818bc2542390a2988539d94ed0Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, TEST_DN_1, SERIAL_1, null, 1192eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, 0); 120db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when startDate is null"); 121db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 122db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 123db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 124db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 125db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_NullEndDate_Failure() throws Exception { 126db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 1271c219f619291ba818bc2542390a2988539d94ed0Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, TEST_DN_1, SERIAL_1, NOW, 1282eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root null, 0); 129db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when keystoreAlias is null"); 130db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 131db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 132db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 133db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root 134db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root public void testConstructor_EndBeforeStart_Failure() throws Exception { 135db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root try { 1361c219f619291ba818bc2542390a2988539d94ed0Kenny Root new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, TEST_DN_1, SERIAL_1, 1372eeda7286f3c7cb79f7eb71ae6464cad213d12a3Kenny Root NOW_PLUS_10_YEARS, NOW, 0); 138db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root fail("Should throw IllegalArgumentException when end is before start"); 139db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } catch (IllegalArgumentException success) { 140db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 141db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root } 142db026710ec0adcf7f72dfb24c65d38a882ee26d8Kenny Root} 143