summaryrefslogtreecommitdiffstats
path: root/trusty
diff options
context:
space:
mode:
authorJocelyn Bohr <bohr@google.com>2017-02-09 17:40:47 -0800
committerJocelyn Bohr <bohr@google.com>2017-04-10 17:33:49 -0700
commitd7da42c0fa19114da51fc0d80c74b3d522687b9a (patch)
tree6baa420eca7e7c35cd117693cddc5ec0a9a00466 /trusty
parent22812e9a30e6b8b7c17acb12f2951cf7b05db7a9 (diff)
downloadsystem_core-d7da42c0fa19114da51fc0d80c74b3d522687b9a.tar.gz
system_core-d7da42c0fa19114da51fc0d80c74b3d522687b9a.tar.bz2
system_core-d7da42c0fa19114da51fc0d80c74b3d522687b9a.zip
trusty: keymaster: Implement begin
Test: builds Change-Id: Icb5470a8c95131ee3d68ab2ce41423302b9ed531
Diffstat (limited to 'trusty')
-rw-r--r--trusty/keymaster/trusty_keymaster_device.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/trusty/keymaster/trusty_keymaster_device.cpp b/trusty/keymaster/trusty_keymaster_device.cpp
index 2132ae176..6be07190f 100644
--- a/trusty/keymaster/trusty_keymaster_device.cpp
+++ b/trusty/keymaster/trusty_keymaster_device.cpp
@@ -463,6 +463,41 @@ keymaster_error_t TrustyKeymasterDevice::begin(keymaster_purpose_t purpose,
keymaster_key_param_set_t* out_params,
keymaster_operation_handle_t* operation_handle) {
ALOGD("Device received begin");
+
+ if (error_ != KM_ERROR_OK) {
+ return error_;
+ }
+ if (!key || !key->key_material) {
+ return KM_ERROR_UNEXPECTED_NULL_POINTER;
+ }
+ if (!operation_handle) {
+ return KM_ERROR_OUTPUT_PARAMETER_NULL;
+ }
+
+ if (out_params) {
+ *out_params = {};
+ }
+
+ BeginOperationRequest request;
+ request.purpose = purpose;
+ request.SetKeyMaterial(*key);
+ request.additional_params.Reinitialize(*in_params);
+
+ BeginOperationResponse response;
+ keymaster_error_t err = Send(KM_BEGIN_OPERATION, request, &response);
+ if (err != KM_ERROR_OK) {
+ return err;
+ }
+
+ if (response.output_params.size() > 0) {
+ if (out_params) {
+ response.output_params.CopyToParamSet(out_params);
+ } else {
+ return KM_ERROR_OUTPUT_PARAMETER_NULL;
+ }
+ }
+ *operation_handle = response.op_handle;
+
return KM_ERROR_OK;
}