Update SoftKeymasterDevice to track keymaster1 API changes.
Change-Id: I8472a75ea60c73794ce31cacab9bcaad8482358f
diff --git a/soft_keymaster_device.cpp b/soft_keymaster_device.cpp
index baaae6b..d755789 100644
--- a/soft_keymaster_device.cpp
+++ b/soft_keymaster_device.cpp
@@ -614,7 +614,7 @@
/* static */
keymaster_error_t SoftKeymasterDevice::generate_key(
- const keymaster1_device_t* dev, const keymaster_key_param_t* params, size_t params_count,
+ const keymaster1_device_t* dev, const keymaster_key_param_set_t* params,
keymaster_key_blob_t* key_blob, keymaster_key_characteristics_t** characteristics) {
if (!dev || !params)
return KM_ERROR_UNEXPECTED_NULL_POINTER;
@@ -623,7 +623,7 @@
return KM_ERROR_OUTPUT_PARAMETER_NULL;
GenerateKeyRequest request;
- request.key_description.Reinitialize(params, params_count);
+ request.key_description.Reinitialize(*params);
GenerateKeyResponse response;
convert_device(dev)->impl_->GenerateKey(request, &response);
@@ -674,8 +674,8 @@
/* static */
keymaster_error_t SoftKeymasterDevice::import_key(
- const keymaster1_device_t* dev, const keymaster_key_param_t* params, size_t params_count,
- keymaster_key_format_t key_format, const uint8_t* key_data, size_t key_data_length,
+ const keymaster1_device_t* dev, const keymaster_key_param_set_t* params,
+ keymaster_key_format_t key_format, const keymaster_blob_t* key_data,
keymaster_key_blob_t* key_blob, keymaster_key_characteristics_t** characteristics) {
if (!params || !key_data)
return KM_ERROR_UNEXPECTED_NULL_POINTER;
@@ -683,12 +683,12 @@
if (!key_blob)
return KM_ERROR_OUTPUT_PARAMETER_NULL;
- *characteristics = NULL;
+ *characteristics = nullptr;
ImportKeyRequest request;
- request.key_description.Reinitialize(params, params_count);
+ request.key_description.Reinitialize(*params);
request.key_format = key_format;
- request.SetKeyMaterial(key_data, key_data_length);
+ request.SetKeyMaterial(key_data->data, key_data->data_length);
ImportKeyResponse response;
convert_device(dev)->impl_->ImportKey(request, &response);
@@ -711,18 +711,20 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::export_key(
- const keymaster1_device_t* dev, keymaster_key_format_t export_format,
- const keymaster_key_blob_t* key_to_export, const keymaster_blob_t* client_id,
- const keymaster_blob_t* app_data, uint8_t** export_data, size_t* export_data_length) {
+keymaster_error_t SoftKeymasterDevice::export_key(const keymaster1_device_t* dev,
+ keymaster_key_format_t export_format,
+ const keymaster_key_blob_t* key_to_export,
+ const keymaster_blob_t* client_id,
+ const keymaster_blob_t* app_data,
+ keymaster_blob_t* export_data) {
if (!key_to_export || !key_to_export->key_material)
return KM_ERROR_UNEXPECTED_NULL_POINTER;
- if (!export_data || !export_data_length)
+ if (!export_data)
return KM_ERROR_OUTPUT_PARAMETER_NULL;
- *export_data = NULL;
- *export_data_length = 0;
+ export_data->data = nullptr;
+ export_data->data_length = 0;
ExportKeyRequest request;
request.key_format = export_format;
@@ -734,11 +736,12 @@
if (response.error != KM_ERROR_OK)
return response.error;
- *export_data_length = response.key_data_length;
- *export_data = reinterpret_cast<uint8_t*>(malloc(*export_data_length));
- if (!export_data)
+ export_data->data_length = response.key_data_length;
+ uint8_t* tmp = reinterpret_cast<uint8_t*>(malloc(export_data->data_length));
+ if (!tmp)
return KM_ERROR_MEMORY_ALLOCATION_FAILED;
- memcpy(*export_data, response.key_data, *export_data_length);
+ memcpy(tmp, response.key_data, export_data->data_length);
+ export_data->data = tmp;
return KM_ERROR_OK;
}
@@ -754,35 +757,33 @@
}
/* static */
-keymaster_error_t SoftKeymasterDevice::begin(
- const keymaster1_device_t* dev, keymaster_purpose_t purpose, const keymaster_key_blob_t* key,
- const keymaster_key_param_t* params, size_t params_count, keymaster_key_param_t** out_params,
- size_t* out_params_count, keymaster_operation_handle_t* operation_handle) {
+keymaster_error_t SoftKeymasterDevice::begin(const keymaster1_device_t* dev,
+ keymaster_purpose_t purpose,
+ const keymaster_key_blob_t* key,
+ const keymaster_key_param_set_t* in_params,
+ keymaster_key_param_set_t* out_params,
+ keymaster_operation_handle_t* operation_handle) {
if (!key || !key->key_material)
return KM_ERROR_UNEXPECTED_NULL_POINTER;
- if (!operation_handle || !out_params || !out_params_count)
+ if (!operation_handle || !out_params)
return KM_ERROR_OUTPUT_PARAMETER_NULL;
- *out_params = NULL;
- *out_params_count = 0;
+ out_params->params = nullptr;
+ out_params->length = 0;
BeginOperationRequest request;
request.purpose = purpose;
request.SetKeyMaterial(*key);
- request.additional_params.Reinitialize(params, params_count);
+ request.additional_params.Reinitialize(*in_params);
BeginOperationResponse response;
convert_device(dev)->impl_->BeginOperation(request, &response);
if (response.error != KM_ERROR_OK)
return response.error;
- if (response.output_params.size() > 0) {
- keymaster_key_param_set_t out_params_set;
- response.output_params.CopyToParamSet(&out_params_set);
- *out_params = out_params_set.params;
- *out_params_count = out_params_set.length;
- }
+ if (response.output_params.size() > 0)
+ response.output_params.CopyToParamSet(out_params);
*operation_handle = response.op_handle;
return KM_ERROR_OK;
@@ -791,61 +792,82 @@
/* static */
keymaster_error_t SoftKeymasterDevice::update(const keymaster1_device_t* dev,
keymaster_operation_handle_t operation_handle,
- const keymaster_key_param_t* params,
- size_t params_count, const uint8_t* input,
- size_t input_length, size_t* input_consumed,
- uint8_t** output, size_t* output_length) {
+ const keymaster_key_param_set_t* in_params,
+ const keymaster_blob_t* input, size_t* input_consumed,
+ keymaster_key_param_set_t* out_params,
+ keymaster_blob_t* output) {
if (!input)
return KM_ERROR_UNEXPECTED_NULL_POINTER;
- if (!input_consumed || !output || !output_length)
+ if (!input_consumed || !output || !out_params)
return KM_ERROR_OUTPUT_PARAMETER_NULL;
+ out_params->params = nullptr;
+ out_params->length = 0;
+ output->data = nullptr;
+ output->data_length = 0;
+
UpdateOperationRequest request;
request.op_handle = operation_handle;
- request.input.Reinitialize(input, input_length);
- request.additional_params.Reinitialize(params, params_count);
+ if (input)
+ request.input.Reinitialize(input->data, input->data_length);
+ if (in_params)
+ request.additional_params.Reinitialize(*in_params);
UpdateOperationResponse response;
convert_device(dev)->impl_->UpdateOperation(request, &response);
if (response.error != KM_ERROR_OK)
return response.error;
+ if (response.output_params.size() > 0)
+ response.output_params.CopyToParamSet(out_params);
+
*input_consumed = response.input_consumed;
- *output_length = response.output.available_read();
- *output = reinterpret_cast<uint8_t*>(malloc(*output_length));
- if (!*output)
+ output->data_length = response.output.available_read();
+ uint8_t* tmp = reinterpret_cast<uint8_t*>(malloc(output->data_length));
+ if (!tmp)
return KM_ERROR_MEMORY_ALLOCATION_FAILED;
- memcpy(*output, response.output.peek_read(), *output_length);
+ memcpy(tmp, response.output.peek_read(), output->data_length);
+ output->data = tmp;
return KM_ERROR_OK;
}
/* static */
keymaster_error_t SoftKeymasterDevice::finish(const keymaster1_device_t* dev,
keymaster_operation_handle_t operation_handle,
- const keymaster_key_param_t* params,
- size_t params_count, const uint8_t* signature,
- size_t signature_length, uint8_t** output,
- size_t* output_length) {
- if (!output || !output_length)
+ const keymaster_key_param_set_t* params,
+ const keymaster_blob_t* signature,
+ keymaster_key_param_set_t* out_params,
+ keymaster_blob_t* output) {
+ if (!output || !out_params)
return KM_ERROR_OUTPUT_PARAMETER_NULL;
+ out_params->params = nullptr;
+ out_params->length = 0;
+ output->data = nullptr;
+ output->data_length = 0;
+
FinishOperationRequest request;
request.op_handle = operation_handle;
if (signature)
- request.signature.Reinitialize(signature, signature_length);
- request.additional_params.Reinitialize(params, params_count);
+ request.signature.Reinitialize(signature->data, signature->data_length);
+ request.additional_params.Reinitialize(*params);
FinishOperationResponse response;
convert_device(dev)->impl_->FinishOperation(request, &response);
if (response.error != KM_ERROR_OK)
return response.error;
- *output_length = response.output.available_read();
- *output = reinterpret_cast<uint8_t*>(malloc(*output_length));
- if (!*output)
+ if (response.output_params.size() > 0)
+ response.output_params.CopyToParamSet(out_params);
+ else
+
+ output->data_length = response.output.available_read();
+ uint8_t* tmp = reinterpret_cast<uint8_t*>(malloc(output->data_length));
+ if (!tmp)
return KM_ERROR_MEMORY_ALLOCATION_FAILED;
- memcpy(*output, response.output.peek_read(), *output_length);
+ memcpy(tmp, response.output.peek_read(), output->data_length);
+ output->data = tmp;
return KM_ERROR_OK;
}