From b24f12226aac7dc878c3aa16ab7570525fb5c1d4 Mon Sep 17 00:00:00 2001 From: Janis Danisevskis Date: Thu, 1 Jul 2021 14:20:06 -0700 Subject: [PATCH] Forward HAT and ConfirmationToken to TA on finish. The Trusty KeyMint HAL did not forward auth tokens and confirmation tokens to the TA. This broke all per-op-bound key operations. Test: CtsVerifier biometrics tests. Bug: 192201272 Merged-In: Ifb2b08514acab78ff3d4fec4bc928260820d4ce0 Change-Id: Ifb2b08514acab78ff3d4fec4bc928260820d4ce0 --- .../keymint/TrustyKeyMintOperation.cpp | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/trusty/keymaster/keymint/TrustyKeyMintOperation.cpp b/trusty/keymaster/keymint/TrustyKeyMintOperation.cpp index 41a21e9f4..9440724da 100644 --- a/trusty/keymaster/keymint/TrustyKeyMintOperation.cpp +++ b/trusty/keymaster/keymint/TrustyKeyMintOperation.cpp @@ -34,6 +34,7 @@ using ::keymaster::FinishOperationRequest; using ::keymaster::FinishOperationResponse; using ::keymaster::TAG_ASSOCIATED_DATA; using ::keymaster::TAG_AUTH_TOKEN; +using ::keymaster::TAG_CONFIRMATION_TOKEN; using ::keymaster::UpdateOperationRequest; using ::keymaster::UpdateOperationResponse; using km_utils::authToken2AidlVec; @@ -106,12 +107,12 @@ ScopedAStatus TrustyKeyMintOperation::update(const vector& input, return ScopedAStatus::ok(); } -ScopedAStatus TrustyKeyMintOperation::finish( - const optional>& input, // - const optional>& signature, // - const optional& authToken, - const optional& /* timestampToken */, - const optional>& /* confirmationToken */, vector* output) { +ScopedAStatus TrustyKeyMintOperation::finish(const optional>& input, // + const optional>& signature, // + const optional& authToken, + const optional& /* timestampToken */, + const optional>& confirmationToken, + vector* output) { if (!output) { return ScopedAStatus(AStatus_fromServiceSpecificError( static_cast(ErrorCode::OUTPUT_PARAMETER_NULL))); @@ -119,6 +120,16 @@ ScopedAStatus TrustyKeyMintOperation::finish( output->clear(); FinishOperationRequest request(impl_->message_version()); + + if (authToken) { + auto tokenAsVec(authToken2AidlVec(*authToken)); + request.additional_params.push_back(TAG_AUTH_TOKEN, tokenAsVec.data(), tokenAsVec.size()); + } + if (confirmationToken) { + request.additional_params.push_back(TAG_CONFIRMATION_TOKEN, confirmationToken->data(), + confirmationToken->size()); + } + request.op_handle = opHandle_; if (signature) request.signature.Reinitialize(signature->data(), signature->size()); size_t serialized_size = request.SerializedSize();