diff options
| author | Alex Klyubin <klyubin@google.com> | 2015-04-30 19:44:13 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-04-30 19:44:15 +0000 |
| commit | 3cd8ec3c6832ee142e217e2653cce58de3f1dba1 (patch) | |
| tree | 8c85af732f0fcf6de5beb229fed5a396fd41491e /keystore/java/android/security/KeyStoreHmacSpi.java | |
| parent | 2619ef3918e15bf415fb038e942cfbd98bff4c6a (diff) | |
| parent | 8c82b4508f0e9f07bb24f106aa817466e39d0cc9 (diff) | |
| download | frameworks_base-3cd8ec3c6832ee142e217e2653cce58de3f1dba1.zip frameworks_base-3cd8ec3c6832ee142e217e2653cce58de3f1dba1.tar.gz frameworks_base-3cd8ec3c6832ee142e217e2653cce58de3f1dba1.tar.bz2 | |
Merge "Cleanup logic for per-op auth keys." into mnc-dev
Diffstat (limited to 'keystore/java/android/security/KeyStoreHmacSpi.java')
| -rw-r--r-- | keystore/java/android/security/KeyStoreHmacSpi.java | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/keystore/java/android/security/KeyStoreHmacSpi.java b/keystore/java/android/security/KeyStoreHmacSpi.java index c52f61b..e993b50 100644 --- a/keystore/java/android/security/KeyStoreHmacSpi.java +++ b/keystore/java/android/security/KeyStoreHmacSpi.java @@ -170,31 +170,27 @@ public abstract class KeyStoreHmacSpi extends MacSpi implements KeyStoreCryptoOp keymasterOutputArgs); if (opResult == null) { throw new KeyStoreConnectException(); - } else if ((opResult.resultCode != KeyStore.NO_ERROR) - && (opResult.resultCode != KeyStore.OP_AUTH_NEEDED)) { - throw mKeyStore.getInvalidKeyException(mKey.getAlias(), opResult.resultCode); } - if (opResult.token == null) { - throw new IllegalStateException("Keystore returned null operation token"); - } - // The operation handle/token is now either valid for use immediately or needs to be - // authorized through user authentication (if the error code was OP_AUTH_NEEDED). + // Store operation token and handle regardless of the error code returned by KeyStore to + // ensure that the operation gets aborted immediately if the code below throws an exception. mOperationToken = opResult.token; mOperationHandle = opResult.operationHandle; + + // If necessary, throw an exception due to KeyStore operation having failed. + InvalidKeyException e = KeyStoreCryptoOperationUtils.getInvalidKeyExceptionForInit( + mKeyStore, mKey, opResult.resultCode); + if (e != null) { + throw e; + } + + if (mOperationToken == null) { + throw new IllegalStateException("Keystore returned null operation token"); + } + mChunkedStreamer = new KeyStoreCryptoOperationChunkedStreamer( new KeyStoreCryptoOperationChunkedStreamer.MainDataStream( mKeyStore, mOperationToken)); - - if (opResult.resultCode != KeyStore.NO_ERROR) { - // The operation requires user authentication. Check whether such authentication is - // possible (e.g., the key may have been permanently invalidated). - InvalidKeyException e = - mKeyStore.getInvalidKeyException(mKey.getAlias(), opResult.resultCode); - if (!(e instanceof UserNotAuthenticatedException)) { - throw e; - } - } } @Override |
