diff options
Diffstat (limited to 'keystore/keystore.cpp')
-rw-r--r-- | keystore/keystore.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/keystore/keystore.cpp b/keystore/keystore.cpp index 12e52f7..a17ca20 100644 --- a/keystore/keystore.cpp +++ b/keystore/keystore.cpp @@ -2679,7 +2679,8 @@ public: } void finish(const sp<IBinder>& token, const KeymasterArguments& params, - const uint8_t* signature, size_t signatureLength, OperationResult* result) { + const uint8_t* signature, size_t signatureLength, + const uint8_t* entropy, size_t entropyLength, OperationResult* result) { if (!checkAllowedOperationParams(params.params)) { result->resultCode = KM_ERROR_INVALID_ARGUMENT; return; @@ -2696,12 +2697,24 @@ public: result->resultCode = authResult; return; } + keymaster_error_t err; + if (entropy) { + if (dev->add_rng_entropy) { + err = dev->add_rng_entropy(dev, entropy, entropyLength); + } else { + err = KM_ERROR_UNIMPLEMENTED; + } + if (err) { + result->resultCode = err; + return; + } + } keymaster_key_param_set_t inParams = {opParams.data(), opParams.size()}; keymaster_blob_t input = {signature, signatureLength}; keymaster_blob_t output = {NULL, 0}; keymaster_key_param_set_t outParams = {NULL, 0}; - keymaster_error_t err = dev->finish(dev, handle, &inParams, &input, &outParams, &output); + err = dev->finish(dev, handle, &inParams, &input, &outParams, &output); // Remove the operation regardless of the result mOperationMap.removeOperation(token); mAuthTokenTable.MarkCompleted(handle); |