Add unauthenticated AES ciphers backed by AndroidKeyStore.
This adds the following AES transformations: * AES/ECB/NoPadding * AES/ECB/PKCS7Padding * AES/CBC/NoPadding * AES/CBC/PKCS7Padding * AES/CTR/NoPadding Bug: 18088752 Change-Id: I3e4702e59868f8f2225c31b1c159d20008b9999d
This commit is contained in:
@@ -457,7 +457,7 @@ public class AndroidKeyStore extends KeyStoreSpi {
|
||||
|
||||
String keyAlgorithmString = key.getAlgorithm();
|
||||
@KeyStoreKeyConstraints.AlgorithmEnum int keyAlgorithm;
|
||||
@KeyStoreKeyConstraints.AlgorithmEnum Integer digest;
|
||||
@KeyStoreKeyConstraints.DigestEnum Integer digest;
|
||||
try {
|
||||
keyAlgorithm =
|
||||
KeyStoreKeyConstraints.Algorithm.fromJCASecretKeyAlgorithm(keyAlgorithmString);
|
||||
@@ -493,12 +493,6 @@ public class AndroidKeyStore extends KeyStoreSpi {
|
||||
if (digest != null) {
|
||||
args.addInt(KeymasterDefs.KM_TAG_DIGEST,
|
||||
KeyStoreKeyConstraints.Digest.toKeymaster(digest));
|
||||
}
|
||||
if (keyAlgorithm == KeyStoreKeyConstraints.Algorithm.HMAC) {
|
||||
if (digest == null) {
|
||||
throw new IllegalStateException("Digest algorithm must be specified for key"
|
||||
+ " algorithm " + keyAlgorithmString);
|
||||
}
|
||||
Integer digestOutputSizeBytes =
|
||||
KeyStoreKeyConstraints.Digest.getOutputSizeBytes(digest);
|
||||
if (digestOutputSizeBytes != null) {
|
||||
@@ -507,6 +501,12 @@ public class AndroidKeyStore extends KeyStoreSpi {
|
||||
args.addInt(KeymasterDefs.KM_TAG_MAC_LENGTH, digestOutputSizeBytes);
|
||||
}
|
||||
}
|
||||
if (keyAlgorithm == KeyStoreKeyConstraints.Algorithm.HMAC) {
|
||||
if (digest == null) {
|
||||
throw new IllegalStateException("Digest algorithm must be specified for key"
|
||||
+ " algorithm " + keyAlgorithmString);
|
||||
}
|
||||
}
|
||||
|
||||
@KeyStoreKeyConstraints.PurposeEnum int purposes = (params.getPurposes() != null)
|
||||
? params.getPurposes()
|
||||
@@ -560,6 +560,12 @@ public class AndroidKeyStore extends KeyStoreSpi {
|
||||
// TODO: Remove this once keymaster does not require us to specify the size of imported key.
|
||||
args.addInt(KeymasterDefs.KM_TAG_KEY_SIZE, keyMaterial.length * 8);
|
||||
|
||||
if (((purposes & KeyStoreKeyConstraints.Purpose.ENCRYPT) != 0)
|
||||
|| ((purposes & KeyStoreKeyConstraints.Purpose.DECRYPT) != 0)) {
|
||||
// Permit caller-specified IV. This is needed for the Cipher abstraction.
|
||||
args.addBoolean(KeymasterDefs.KM_TAG_CALLER_NONCE);
|
||||
}
|
||||
|
||||
Credentials.deleteAllTypesForAlias(mKeyStore, entryAlias);
|
||||
String keyAliasInKeystore = Credentials.USER_SECRET_KEY + entryAlias;
|
||||
int errorCode = mKeyStore.importKey(
|
||||
|
||||
Reference in New Issue
Block a user