summaryrefslogtreecommitdiffstats
path: root/keystore/keystore.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'keystore/keystore.cpp')
-rw-r--r--keystore/keystore.cpp17
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);