summaryrefslogtreecommitdiffstats
path: root/keystore/java/android
diff options
context:
space:
mode:
authorAlex Klyubin <klyubin@google.com>2015-05-18 12:59:43 -0700
committerAlex Klyubin <klyubin@google.com>2015-05-18 12:59:43 -0700
commit2cd7673d6e4428338d0b75953a634df552eb08e2 (patch)
tree18360e66faa3799e4a64fab54e8c7fe2de85e272 /keystore/java/android
parentbeda8613ad7bc01affa17857faed04d9589db34c (diff)
downloadframeworks_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.java11
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();