@Override
protected int engineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output,
int outputOffset) throws ShortBufferException {
- ensureKeystoreOperationInitialized();
-
byte[] outputCopy = engineUpdate(input, inputOffset, inputLen);
if (outputCopy == null) {
return 0;
}
mKeyAliasInKeyStore = ((KeyStoreSecretKey) key).getAlias();
+ if (mKeyAliasInKeyStore == null) {
+ throw new InvalidKeyException("Key's KeyStore alias not known");
+ }
engineReset();
+ ensureKeystoreOperationInitialized();
}
@Override
}
mOperationHandle = null;
mChunkedStreamer = null;
+ }
+
+ private void ensureKeystoreOperationInitialized() {
+ if (mChunkedStreamer != null) {
+ return;
+ }
+ if (mKeyAliasInKeyStore == null) {
+ throw new IllegalStateException("Not initialized");
+ }
KeymasterArguments keymasterArgs = new KeymasterArguments();
+ keymasterArgs.addInt(KeymasterDefs.KM_TAG_ALGORITHM, KeyStoreKeyConstraints.Algorithm.HMAC);
keymasterArgs.addInt(KeymasterDefs.KM_TAG_DIGEST, mDigest);
OperationResult opResult = mKeyStore.begin(mKeyAliasInKeyStore,
} else if (opResult.resultCode != KeyStore.NO_ERROR) {
throw KeymasterUtils.getCryptoOperationException(opResult.resultCode);
}
- mOperationToken = opResult.token;
- if (mOperationToken == null) {
+ if (opResult.token == null) {
throw new CryptoOperationException("Keystore returned null operation token");
}
+ mOperationToken = opResult.token;
mOperationHandle = opResult.operationHandle;
mChunkedStreamer = new KeyStoreCryptoOperationChunkedStreamer(
new KeyStoreCryptoOperationChunkedStreamer.MainDataStream(
@Override
protected void engineUpdate(byte[] input, int offset, int len) {
- if (mChunkedStreamer == null) {
- throw new IllegalStateException("Not initialized");
- }
+ ensureKeystoreOperationInitialized();
byte[] output;
try {
@Override
protected byte[] engineDoFinal() {
- if (mChunkedStreamer == null) {
- throw new IllegalStateException("Not initialized");
- }
+ ensureKeystoreOperationInitialized();
byte[] result;
try {