blob: 2b1d6fc04ba98dee6f8278c05499562b0b6a19b1 [file] [log] [blame]
/*
* Copyright 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.keystore.cts;
import android.security.keystore.KeyGenParameterSpec;
import android.security.keystore.KeyInfo;
import android.security.keystore.KeyProperties;
import junit.framework.TestCase;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.util.Arrays;
import java.util.Date;
public class KeyInfoTest extends TestCase {
public void testImmutabilityViaGetterReturnValues() throws Exception {
// Assert that none of the mutable return values from getters modify the state of the
// instance.
Date keyValidityStartDate = new Date(System.currentTimeMillis() - 2222222);
Date keyValidityEndDateForOrigination = new Date(System.currentTimeMillis() + 11111111);
Date keyValidityEndDateForConsumption = new Date(System.currentTimeMillis() + 33333333);
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
keyPairGenerator.initialize(new KeyGenParameterSpec.Builder(
KeyInfoTest.class.getSimpleName(),
KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_ENCRYPT)
.setKeySize(1024) // use smaller key size to speed the test up
.setKeyValidityStart(keyValidityStartDate)
.setKeyValidityForOriginationEnd(keyValidityEndDateForOrigination)
.setKeyValidityForConsumptionEnd(keyValidityEndDateForConsumption)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1,
KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
.setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1,
KeyProperties.SIGNATURE_PADDING_RSA_PSS)
.setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
.setBlockModes(KeyProperties.BLOCK_MODE_ECB)
.build());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey key = keyPair.getPrivate();
KeyFactory keyFactory = KeyFactory.getInstance(key.getAlgorithm(), "AndroidKeyStore");
KeyInfo info = keyFactory.getKeySpec(key, KeyInfo.class);
Date originalKeyValidityStartDate = (Date) info.getKeyValidityStart().clone();
info.getKeyValidityStart().setTime(1234567890L);
assertEquals(originalKeyValidityStartDate, info.getKeyValidityStart());
Date originalKeyValidityEndDateForOrigination =
(Date) info.getKeyValidityForOriginationEnd().clone();
info.getKeyValidityForOriginationEnd().setTime(1234567890L);
assertEquals(originalKeyValidityEndDateForOrigination,
info.getKeyValidityForOriginationEnd());
Date originalKeyValidityEndDateForConsumption =
(Date) info.getKeyValidityForConsumptionEnd().clone();
info.getKeyValidityForConsumptionEnd().setTime(1234567890L);
assertEquals(originalKeyValidityEndDateForConsumption,
info.getKeyValidityForConsumptionEnd());
String[] originalEncryptionPaddings = info.getEncryptionPaddings().clone();
info.getEncryptionPaddings()[0] = null;
assertEquals(Arrays.asList(originalEncryptionPaddings),
Arrays.asList(info.getEncryptionPaddings()));
String[] originalSignaturePaddings = info.getSignaturePaddings().clone();
info.getSignaturePaddings()[0] = null;
assertEquals(Arrays.asList(originalSignaturePaddings),
Arrays.asList(info.getSignaturePaddings()));
String[] originalDigests = info.getDigests().clone();
info.getDigests()[0] = null;
assertEquals(Arrays.asList(originalDigests), Arrays.asList(info.getDigests()));
String[] originalBlockModes = info.getBlockModes().clone();
info.getBlockModes()[0] = null;
assertEquals(Arrays.asList(originalBlockModes), Arrays.asList(info.getBlockModes()));
}
}