summaryrefslogtreecommitdiffstats
path: root/trusty
diff options
context:
space:
mode:
authorJocelyn Bohr <bohr@google.com>2017-02-09 17:20:44 -0800
committerJocelyn Bohr <bohr@google.com>2017-04-10 17:33:45 -0700
commita02270fdd9a249717d788ba20419a4c80426bb87 (patch)
tree702aa5b1dc2f935ba38efde0a39e1c0ac46b2fc4 /trusty
parente514dd8ad4468411c38806092c87612e0911e155 (diff)
downloadsystem_core-a02270fdd9a249717d788ba20419a4c80426bb87.tar.gz
system_core-a02270fdd9a249717d788ba20419a4c80426bb87.tar.bz2
system_core-a02270fdd9a249717d788ba20419a4c80426bb87.zip
trusty: keymaster: Implement get_key_characteristics
Test: builds Change-Id: I6e6a28d8eec5ff91a9e8c82597593857732407f3
Diffstat (limited to 'trusty')
-rw-r--r--trusty/keymaster/trusty_keymaster_device.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/trusty/keymaster/trusty_keymaster_device.cpp b/trusty/keymaster/trusty_keymaster_device.cpp
index f66804604..7ada00246 100644
--- a/trusty/keymaster/trusty_keymaster_device.cpp
+++ b/trusty/keymaster/trusty_keymaster_device.cpp
@@ -148,6 +148,18 @@ uint8_t* DuplicateBuffer(const uint8_t* buffer, size_t size) {
return tmp;
}
+template <typename RequestType>
+void AddClientAndAppData(const keymaster_blob_t* client_id, const keymaster_blob_t* app_data,
+ RequestType* request) {
+ request->additional_params.Clear();
+ if (client_id) {
+ request->additional_params.push_back(TAG_APPLICATION_ID, *client_id);
+ }
+ if (app_data) {
+ request->additional_params.push_back(TAG_APPLICATION_DATA, *app_data);
+ }
+}
+
} // unnamed namespace
keymaster_error_t TrustyKeymasterDevice::configure(const keymaster_key_param_set_t* params) {
@@ -234,6 +246,30 @@ keymaster_error_t TrustyKeymasterDevice::get_key_characteristics(
const keymaster_key_blob_t* key_blob, const keymaster_blob_t* client_id,
const keymaster_blob_t* app_data, keymaster_key_characteristics_t* characteristics) {
ALOGD("Device received get_key_characteristics");
+
+ if (error_ != KM_ERROR_OK) {
+ return error_;
+ }
+ if (!key_blob || !key_blob->key_material) {
+ return KM_ERROR_UNEXPECTED_NULL_POINTER;
+ }
+ if (!characteristics) {
+ return KM_ERROR_OUTPUT_PARAMETER_NULL;
+ }
+
+ GetKeyCharacteristicsRequest request;
+ request.SetKeyMaterial(*key_blob);
+ AddClientAndAppData(client_id, app_data, &request);
+
+ GetKeyCharacteristicsResponse response;
+ keymaster_error_t err = Send(KM_GET_KEY_CHARACTERISTICS, request, &response);
+ if (err != KM_ERROR_OK) {
+ return err;
+ }
+
+ response.enforced.CopyToParamSet(&characteristics->hw_enforced);
+ response.unenforced.CopyToParamSet(&characteristics->sw_enforced);
+
return KM_ERROR_OK;
}