Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a83b14a authored by Rob Barnes's avatar Rob Barnes Committed by Gerrit Code Review
Browse files

Merge "Allow for input_data on finish."

parents 944fed6b 92743aeb
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -922,15 +922,26 @@ public class KeyStore {
        }
    }

    public OperationResult finish(IBinder token, KeymasterArguments arguments, byte[] signature,
            byte[] entropy) {
    /**
     * Android KeyStore finish operation.
     *
     * @param token Authentication token.
     * @param arguments Keymaster arguments
     * @param input Optional additional input data.
     * @param signature Optional signature to be verified.
     * @param entropy Optional additional entropy
     * @return OperationResult that will indicate success or error of the operation.
     */
    public OperationResult finish(IBinder token, KeymasterArguments arguments, byte[] input,
            byte[] signature, byte[] entropy) {
        OperationPromise promise = new OperationPromise();
        try {
            mBinder.asBinder().linkToDeath(promise, 0);
            arguments = arguments != null ? arguments : new KeymasterArguments();
            entropy = entropy != null ? entropy : new byte[0];
            input = input != null ? input : new byte[0];
            signature = signature != null ? signature : new byte[0];
            int errorCode = mBinder.finish(promise, token, arguments, signature, entropy);
            int errorCode = mBinder.finish(promise, token, arguments, input, signature, entropy);
            if (errorCode == NO_ERROR) {
                return promise.getFuture().get();
            } else {
@@ -948,7 +959,7 @@ public class KeyStore {
    }

    public OperationResult finish(IBinder token, KeymasterArguments arguments, byte[] signature) {
        return finish(token, arguments, signature, null);
        return finish(token, arguments, null, signature, null);
    }

    private class KeystoreResultPromise
+1 −1
Original line number Diff line number Diff line
@@ -432,7 +432,7 @@ abstract class AndroidKeyStoreAuthenticatedAESCipherSpi extends AndroidKeyStoreC
        }

        @Override
        public OperationResult finish(byte[] signature, byte[] additionalEntropy) {
        public OperationResult finish(byte[] input, byte[] signature, byte[] additionalEntropy) {
            if ((additionalEntropy != null) && (additionalEntropy.length > 0)) {
                throw new ProviderException("AAD stream does not support additional entropy");
            }
+5 −4
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ class KeyStoreCryptoOperationChunkedStreamer implements KeyStoreCryptoOperationS
         * Returns the result of the KeyStore {@code finish} operation or null if keystore couldn't
         * be reached.
         */
        OperationResult finish(byte[] siganture, byte[] additionalEntropy);
        OperationResult finish(byte[] input, byte[] siganture, byte[] additionalEntropy);
    }

    // Binder buffer is about 1MB, but it's shared between all active transactions of the process.
@@ -217,7 +217,8 @@ class KeyStoreCryptoOperationChunkedStreamer implements KeyStoreCryptoOperationS
        byte[] output = update(input, inputOffset, inputLength);
        output = ArrayUtils.concat(output, flush());

        OperationResult opResult = mKeyStoreStream.finish(signature, additionalEntropy);
        OperationResult opResult = mKeyStoreStream.finish(EmptyArray.BYTE, signature,
                                                          additionalEntropy);
        if (opResult == null) {
            throw new KeyStoreConnectException();
        } else if (opResult.resultCode != KeyStore.NO_ERROR) {
@@ -334,8 +335,8 @@ class KeyStoreCryptoOperationChunkedStreamer implements KeyStoreCryptoOperationS
        }

        @Override
        public OperationResult finish(byte[] signature, byte[] additionalEntropy) {
            return mKeyStore.finish(mOperationToken, null, signature, additionalEntropy);
        public OperationResult finish(byte[] input, byte[] signature, byte[] additionalEntropy) {
            return mKeyStore.finish(mOperationToken, null, input, signature, additionalEntropy);
        }
    }
}