Home | History | Annotate | Download | only in security
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.security;
     18 
     19 import android.test.AndroidTestCase;
     20 
     21 import java.math.BigInteger;
     22 import java.util.Date;
     23 
     24 import javax.security.auth.x500.X500Principal;
     25 
     26 public class KeyPairGeneratorSpecTest extends AndroidTestCase {
     27     private static final String TEST_ALIAS_1 = "test1";
     28 
     29     private static final X500Principal TEST_DN_1 = new X500Principal("CN=test1");
     30 
     31     private static final long NOW_MILLIS = System.currentTimeMillis();
     32 
     33     private static final BigInteger SERIAL_1 = BigInteger.ONE;
     34 
     35     /* We have to round this off because X509v3 doesn't store milliseconds. */
     36     private static final Date NOW = new Date(NOW_MILLIS - (NOW_MILLIS % 1000L));
     37 
     38     @SuppressWarnings("deprecation")
     39     private static final Date NOW_PLUS_10_YEARS = new Date(NOW.getYear() + 10, 0, 1);
     40 
     41     public void testConstructor_Success() throws Exception {
     42         KeyPairGeneratorSpec spec =
     43                 new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1,
     44                         SERIAL_1, NOW, NOW_PLUS_10_YEARS, 0);
     45 
     46         assertEquals("Context should be the one specified", getContext(), spec.getContext());
     47 
     48         assertEquals("Alias should be the one specified", TEST_ALIAS_1, spec.getKeystoreAlias());
     49 
     50         assertEquals("Key algorithm should be the one specified", "RSA", spec.getKeyType());
     51 
     52         assertEquals("Key size should be the one specified", 1024, spec.getKeySize());
     53 
     54         assertEquals("subjectDN should be the one specified", TEST_DN_1, spec.getSubjectDN());
     55 
     56         assertEquals("startDate should be the one specified", NOW, spec.getStartDate());
     57 
     58         assertEquals("endDate should be the one specified", NOW_PLUS_10_YEARS, spec.getEndDate());
     59     }
     60 
     61     public void testBuilder_Success() throws Exception {
     62         KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(getContext())
     63                 .setAlias(TEST_ALIAS_1)
     64                 .setKeyType("RSA")
     65                 .setKeySize(1024)
     66                 .setSubject(TEST_DN_1)
     67                 .setSerialNumber(SERIAL_1)
     68                 .setStartDate(NOW)
     69                 .setEndDate(NOW_PLUS_10_YEARS)
     70                 .setEncryptionRequired()
     71                 .build();
     72 
     73         assertEquals("Context should be the one specified", getContext(), spec.getContext());
     74 
     75         assertEquals("Alias should be the one specified", TEST_ALIAS_1, spec.getKeystoreAlias());
     76 
     77         assertEquals("Key algorithm should be the one specified", "RSA", spec.getKeyType());
     78 
     79         assertEquals("Key size should be the one specified", 1024, spec.getKeySize());
     80 
     81         assertEquals("subjectDN should be the one specified", TEST_DN_1, spec.getSubjectDN());
     82 
     83         assertEquals("startDate should be the one specified", NOW, spec.getStartDate());
     84 
     85         assertEquals("endDate should be the one specified", NOW_PLUS_10_YEARS, spec.getEndDate());
     86 
     87         assertEquals("encryption flag should be on", KeyStore.FLAG_ENCRYPTED, spec.getFlags());
     88     }
     89 
     90     public void testConstructor_NullContext_Failure() throws Exception {
     91         try {
     92             new KeyPairGeneratorSpec(null, TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1, NOW,
     93                     NOW_PLUS_10_YEARS, 0);
     94             fail("Should throw IllegalArgumentException when context is null");
     95         } catch (IllegalArgumentException success) {
     96         }
     97     }
     98 
     99     public void testConstructor_NullKeystoreAlias_Failure() throws Exception {
    100         try {
    101             new KeyPairGeneratorSpec(getContext(), null, "RSA", 1024, null, TEST_DN_1, SERIAL_1, NOW,
    102                     NOW_PLUS_10_YEARS, 0);
    103             fail("Should throw IllegalArgumentException when keystoreAlias is null");
    104         } catch (IllegalArgumentException success) {
    105         }
    106     }
    107 
    108     public void testConstructor_NullSubjectDN_Failure() throws Exception {
    109         try {
    110             new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, null, SERIAL_1, NOW,
    111                     NOW_PLUS_10_YEARS, 0);
    112             fail("Should throw IllegalArgumentException when subjectDN is null");
    113         } catch (IllegalArgumentException success) {
    114         }
    115     }
    116 
    117     public void testConstructor_NullSerial_Failure() throws Exception {
    118         try {
    119             new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, null, NOW,
    120                     NOW_PLUS_10_YEARS, 0);
    121             fail("Should throw IllegalArgumentException when startDate is null");
    122         } catch (IllegalArgumentException success) {
    123         }
    124     }
    125 
    126     public void testConstructor_NullStartDate_Failure() throws Exception {
    127         try {
    128             new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1,
    129                     null, NOW_PLUS_10_YEARS, 0);
    130             fail("Should throw IllegalArgumentException when startDate is null");
    131         } catch (IllegalArgumentException success) {
    132         }
    133     }
    134 
    135     public void testConstructor_NullEndDate_Failure() throws Exception {
    136         try {
    137             new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1,
    138                     NOW, null, 0);
    139             fail("Should throw IllegalArgumentException when keystoreAlias is null");
    140         } catch (IllegalArgumentException success) {
    141         }
    142     }
    143 
    144     public void testConstructor_EndBeforeStart_Failure() throws Exception {
    145         try {
    146             new KeyPairGeneratorSpec(getContext(), TEST_ALIAS_1, "RSA", 1024, null, TEST_DN_1, SERIAL_1,
    147                     NOW_PLUS_10_YEARS, NOW, 0);
    148             fail("Should throw IllegalArgumentException when end is before start");
    149         } catch (IllegalArgumentException success) {
    150         }
    151     }
    152 }
    153