summaryrefslogtreecommitdiffstats
path: root/keystore/java/android/security/KeyStoreCipherSpi.java
diff options
context:
space:
mode:
authorAlex Klyubin <klyubin@google.com>2015-04-01 17:34:08 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-04-01 17:34:08 +0000
commitc6cc9d820d007a6b11df2bb3274d40743e1f1d87 (patch)
treef0b8ffa379f6cba4d862b178c76d8045d89a4dff /keystore/java/android/security/KeyStoreCipherSpi.java
parent086071e7306a73c9b3c5a56277884b4e19543b3e (diff)
parent52886ca77d4d93f6faf5d2a6836625a421e32403 (diff)
downloadframeworks_base-c6cc9d820d007a6b11df2bb3274d40743e1f1d87.zip
frameworks_base-c6cc9d820d007a6b11df2bb3274d40743e1f1d87.tar.gz
frameworks_base-c6cc9d820d007a6b11df2bb3274d40743e1f1d87.tar.bz2
Merge "A way to obtain KeyStore operation handle from crypto primitives."
Diffstat (limited to 'keystore/java/android/security/KeyStoreCipherSpi.java')
-rw-r--r--keystore/java/android/security/KeyStoreCipherSpi.java22
1 files changed, 21 insertions, 1 deletions
diff --git a/keystore/java/android/security/KeyStoreCipherSpi.java b/keystore/java/android/security/KeyStoreCipherSpi.java
index 87f0d8e..bdaa812 100644
--- a/keystore/java/android/security/KeyStoreCipherSpi.java
+++ b/keystore/java/android/security/KeyStoreCipherSpi.java
@@ -45,7 +45,7 @@ import javax.crypto.spec.IvParameterSpec;
*
* @hide
*/
-public abstract class KeyStoreCipherSpi extends CipherSpi {
+public abstract class KeyStoreCipherSpi extends CipherSpi implements KeyStoreCryptoOperation {
public abstract static class AES extends KeyStoreCipherSpi {
protected AES(@KeyStoreKeyConstraints.BlockModeEnum int blockMode,
@@ -129,6 +129,7 @@ public abstract class KeyStoreCipherSpi extends CipherSpi {
* error conditions in between.
*/
private IBinder mOperationToken;
+ private Long mOperationHandle;
private KeyStoreCryptoOperationChunkedStreamer mMainDataStreamer;
protected KeyStoreCipherSpi(
@@ -192,6 +193,7 @@ public abstract class KeyStoreCipherSpi extends CipherSpi {
mOperationToken = null;
mKeyStore.abort(operationToken);
}
+ mOperationHandle = null;
mMainDataStreamer = null;
mAdditionalEntropyForBegin = null;
}
@@ -230,6 +232,7 @@ public abstract class KeyStoreCipherSpi extends CipherSpi {
throw new CryptoOperationException("Keystore returned null operation token");
}
mOperationToken = opResult.token;
+ mOperationHandle = opResult.operationHandle;
loadAlgorithmSpecificParametersFromBeginResult(keymasterOutputArgs);
mFirstOperationInitiated = true;
mMainDataStreamer = new KeyStoreCryptoOperationChunkedStreamer(
@@ -348,6 +351,23 @@ public abstract class KeyStoreCipherSpi extends CipherSpi {
throw new UnsupportedOperationException();
}
+ @Override
+ public void finalize() throws Throwable {
+ try {
+ IBinder operationToken = mOperationToken;
+ if (operationToken != null) {
+ mKeyStore.abort(operationToken);
+ }
+ } finally {
+ super.finalize();
+ }
+ }
+
+ @Override
+ public Long getOperationHandle() {
+ return mOperationHandle;
+ }
+
// The methods below may need to be overridden by subclasses that use algorithm-specific
// parameters.