diff options
| author | Jocelyn Bohr <bohr@google.com> | 2017-02-09 17:29:59 -0800 |
|---|---|---|
| committer | Jocelyn Bohr <bohr@google.com> | 2017-04-10 17:33:49 -0700 |
| commit | 4cbfa7f2f0dcbea559b46487c1d9f4560eba4f0b (patch) | |
| tree | a5e80aa1a9481f2693b2cb96a47fb0be77a3148a /trusty | |
| parent | 2d768669fae9e45fb852e5e862640aad06294ac2 (diff) | |
| download | system_core-4cbfa7f2f0dcbea559b46487c1d9f4560eba4f0b.tar.gz system_core-4cbfa7f2f0dcbea559b46487c1d9f4560eba4f0b.tar.bz2 system_core-4cbfa7f2f0dcbea559b46487c1d9f4560eba4f0b.zip | |
trusty: keymaster: Implement export_key
Test: builds
Change-Id: I47d1ed4144014fca47fdf67f9f4d2eb0d9b1eb8f
Diffstat (limited to 'trusty')
| -rw-r--r-- | trusty/keymaster/trusty_keymaster_device.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/trusty/keymaster/trusty_keymaster_device.cpp b/trusty/keymaster/trusty_keymaster_device.cpp index 04826dffc..361045624 100644 --- a/trusty/keymaster/trusty_keymaster_device.cpp +++ b/trusty/keymaster/trusty_keymaster_device.cpp @@ -323,6 +323,37 @@ keymaster_error_t TrustyKeymasterDevice::export_key(keymaster_key_format_t expor const keymaster_blob_t* app_data, keymaster_blob_t* export_data) { ALOGD("Device received export_key"); + + if (error_ != KM_ERROR_OK) { + return error_; + } + if (!key_to_export || !key_to_export->key_material) { + return KM_ERROR_UNEXPECTED_NULL_POINTER; + } + if (!export_data) { + return KM_ERROR_OUTPUT_PARAMETER_NULL; + } + + export_data->data = nullptr; + export_data->data_length = 0; + + ExportKeyRequest request(message_version_); + request.key_format = export_format; + request.SetKeyMaterial(*key_to_export); + AddClientAndAppData(client_id, app_data, &request); + + ExportKeyResponse response(message_version_); + keymaster_error_t err = Send(KM_EXPORT_KEY, request, &response); + if (err != KM_ERROR_OK) { + return err; + } + + export_data->data_length = response.key_data_length; + export_data->data = DuplicateBuffer(response.key_data, response.key_data_length); + if (!export_data->data) { + return KM_ERROR_MEMORY_ALLOCATION_FAILED; + } + return KM_ERROR_OK; } |
