diff options
author | Alex Klyubin <klyubin@google.com> | 2015-05-18 12:59:43 -0700 |
---|---|---|
committer | Alex Klyubin <klyubin@google.com> | 2015-05-18 12:59:43 -0700 |
commit | 2cd7673d6e4428338d0b75953a634df552eb08e2 (patch) | |
tree | 18360e66faa3799e4a64fab54e8c7fe2de85e272 /keystore/java/android | |
parent | beda8613ad7bc01affa17857faed04d9589db34c (diff) | |
download | frameworks_base-2cd7673d6e4428338d0b75953a634df552eb08e2.zip frameworks_base-2cd7673d6e4428338d0b75953a634df552eb08e2.tar.gz frameworks_base-2cd7673d6e4428338d0b75953a634df552eb08e2.tar.bz2 |
Switch from getSpi to getCurrentSpi.
Crypto primitives' getSpi has a side-effect which modifies the state
of the primitive: it selects an SPI implementation if it hasn't been
selected yet (e.g., Cipher.getInstance("AES") doesn't select an SPI
implementation until Cipher.init). The new method getCurrentSpi has
no side-effects: it simply returns null if no SPI implementation is
selected. The switch to getCurrentSpi lets us avoid side-effects and
throw a more pertinent exception when no SPI is yet selected.
(cherry-picked from bdc1382ac575a06c98cab69117700e081c90c595)
Bug: 18088752
Change-Id: Ib369c7e988329315075aa4e18f720d86f3d96a93
Diffstat (limited to 'keystore/java/android')
-rw-r--r-- | keystore/java/android/security/keystore/AndroidKeyStoreProvider.java | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java b/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java index b20a122..71fdb69 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java @@ -111,6 +111,7 @@ public class AndroidKeyStoreProvider extends Provider { * * @throws IllegalArgumentException if the provided primitive is not supported or is not backed * by AndroidKeyStore provider. + * @throws IllegalStateException if the provided primitive is not initialized. */ public static long getKeyStoreOperationHandle(Object cryptoPrimitive) { if (cryptoPrimitive == null) { @@ -118,15 +119,17 @@ public class AndroidKeyStoreProvider extends Provider { } Object spi; if (cryptoPrimitive instanceof Mac) { - spi = ((Mac) cryptoPrimitive).getSpi(); + spi = ((Mac) cryptoPrimitive).getCurrentSpi(); } else if (cryptoPrimitive instanceof Cipher) { - spi = ((Cipher) cryptoPrimitive).getSpi(); + spi = ((Cipher) cryptoPrimitive).getCurrentSpi(); } else { throw new IllegalArgumentException("Unsupported crypto primitive: " + cryptoPrimitive); } - if (!(spi instanceof KeyStoreCryptoOperation)) { + if (spi == null) { + throw new IllegalStateException("Crypto primitive not initialized"); + } else if (!(spi instanceof KeyStoreCryptoOperation)) { throw new IllegalArgumentException( - "Crypto primitive not backed by AndroidKeyStore: " + cryptoPrimitive + "Crypto primitive not backed by AndroidKeyStore provider: " + cryptoPrimitive + ", spi: " + spi); } return ((KeyStoreCryptoOperation) spi).getOperationHandle(); |