diff options
author | Alex Klyubin <klyubin@google.com> | 2015-05-13 19:47:37 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-05-13 19:47:38 +0000 |
commit | b33455511b7b704e848c79c9e76e28abe2509178 (patch) | |
tree | 7db97c830c94630a2ad282b5f4f20d94d2e630ef /keystore/java/android/security/AndroidKeyStore.java | |
parent | 4af455beb79086a960f7205d7b730aa6da015993 (diff) | |
parent | cbdd377db84d58dff31a380e85fdd94a27d863c6 (diff) | |
download | frameworks_base-b33455511b7b704e848c79c9e76e28abe2509178.zip frameworks_base-b33455511b7b704e848c79c9e76e28abe2509178.tar.gz frameworks_base-b33455511b7b704e848c79c9e76e28abe2509178.tar.bz2 |
Merge "Ensure key algorithm name of HMAC keys is preserved." into mnc-dev
Diffstat (limited to 'keystore/java/android/security/AndroidKeyStore.java')
-rw-r--r-- | keystore/java/android/security/AndroidKeyStore.java | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/keystore/java/android/security/AndroidKeyStore.java b/keystore/java/android/security/AndroidKeyStore.java index 7ac236a..b834641 100644 --- a/keystore/java/android/security/AndroidKeyStore.java +++ b/keystore/java/android/security/AndroidKeyStore.java @@ -476,6 +476,21 @@ public class AndroidKeyStore extends KeyStoreSpi { + ". Key: " + keyAlgorithmString + ", parameter spec: " + Arrays.asList(params.getDigests())); } + // When the key is read back from keystore we reconstruct the JCA key algorithm + // name from the KM_TAG_ALGORITHM and the first KM_TAG_DIGEST. Thus we need to + // ensure that the digest reflected in the JCA key algorithm name is the first + // KM_TAG_DIGEST tag. + if (keymasterDigests[0] != keymasterDigest) { + // The first digest is not the one implied by the JCA key algorithm name. + // Swap the implied digest with the first one. + for (int i = 0; i < keymasterDigests.length; i++) { + if (keymasterDigests[i] == keymasterDigest) { + keymasterDigests[i] = keymasterDigests[0]; + keymasterDigests[0] = keymasterDigest; + break; + } + } + } } } else { // No digest specified in parameters |