1a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri/*
2a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri * Copyright (C) 2017 The Android Open Source Project
3a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri *
4a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri * Licensed under the Apache License, Version 2.0 (the "License");
5a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri * you may not use this file except in compliance with the License.
6a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri * You may obtain a copy of the License at
7a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri *
8a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri *      http://www.apache.org/licenses/LICENSE-2.0
9a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri *
10a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri * Unless required by applicable law or agreed to in writing, software
11a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri * distributed under the License is distributed on an "AS IS" BASIS,
12a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri * See the License for the specific language governing permissions and
14a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri * limitations under the License.
15a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri */
16a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri
17a173064047d304837d907b9b39ece5c14adf2b25Eran Messeripackage android.security.keystore;
18a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri
19a173064047d304837d907b9b39ece5c14adf2b25Eran Messeriimport static org.hamcrest.Matchers.is;
20a173064047d304837d907b9b39ece5c14adf2b25Eran Messeriimport static org.junit.Assert.assertEquals;
21a173064047d304837d907b9b39ece5c14adf2b25Eran Messeriimport static org.junit.Assert.assertThat;
22a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri
23a173064047d304837d907b9b39ece5c14adf2b25Eran Messeriimport android.security.keystore.KeyGenParameterSpec;
24a173064047d304837d907b9b39ece5c14adf2b25Eran Messeriimport android.security.keystore.KeyProperties;
25a173064047d304837d907b9b39ece5c14adf2b25Eran Messeriimport android.security.ParcelableKeyGenParameterSpecTest;
26a173064047d304837d907b9b39ece5c14adf2b25Eran Messeriimport android.support.test.runner.AndroidJUnit4;
27a173064047d304837d907b9b39ece5c14adf2b25Eran Messeriimport org.junit.Test;
28a173064047d304837d907b9b39ece5c14adf2b25Eran Messeriimport org.junit.runner.RunWith;
29a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri
30a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri/** Unit tests for {@link KeyGenParameterSpec}. */
31a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri@RunWith(AndroidJUnit4.class)
32a173064047d304837d907b9b39ece5c14adf2b25Eran Messeripublic final class KeyGenParameterSpecTest {
33a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    static final String ALIAS = "keystore-alias";
34a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    static final int KEY_PURPOSES = KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY;
35a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri
36a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    @Test
37a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    public void testBuilderCopyingValues() {
38a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri        KeyGenParameterSpec spec = ParcelableKeyGenParameterSpecTest.configureDefaultSpec();
39a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri        KeyGenParameterSpec copiedSpec =
40a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri                new KeyGenParameterSpec.Builder(spec).build();
41a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri        ParcelableKeyGenParameterSpecTest.validateSpecValues(
42a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri                copiedSpec, spec.getUid(), spec.getKeystoreAlias());
43a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    }
44a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri
45a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    @Test
46a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    public void testBuilderCopyingEmptyValues() {
47a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri        KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder(ALIAS, KEY_PURPOSES).build();
48a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri        KeyGenParameterSpec copiedSpec = new KeyGenParameterSpec.Builder(spec).build();
49a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri
50a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri        assertThat(copiedSpec.getKeystoreAlias(), is(ALIAS));
51a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri        assertThat(copiedSpec.getPurposes(), is(KEY_PURPOSES));
52a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    }
53a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri
54a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    @Test
55a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    public void testCanModifyValuesInCopiedBuilder() {
56a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri        KeyGenParameterSpec spec = ParcelableKeyGenParameterSpecTest.configureDefaultSpec();
57a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri        KeyGenParameterSpec copiedSpec =
58a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri                new KeyGenParameterSpec.Builder(spec)
59a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri                .setAttestationChallenge(null)
60a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri                .build();
61a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri
62a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri        assertEquals(copiedSpec.getAttestationChallenge(), null);
63a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri    }
64a173064047d304837d907b9b39ece5c14adf2b25Eran Messeri}
65