diff options
author | Alex Klyubin <klyubin@google.com> | 2015-04-01 17:34:08 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-04-01 17:34:08 +0000 |
commit | c6cc9d820d007a6b11df2bb3274d40743e1f1d87 (patch) | |
tree | f0b8ffa379f6cba4d862b178c76d8045d89a4dff /keystore/java/android/security/KeyStoreCipherSpi.java | |
parent | 086071e7306a73c9b3c5a56277884b4e19543b3e (diff) | |
parent | 52886ca77d4d93f6faf5d2a6836625a421e32403 (diff) | |
download | frameworks_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.java | 22 |
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. |