diff options
Diffstat (limited to 'lib/trusty/ql-tipc')
-rw-r--r-- | lib/trusty/ql-tipc/keymaster.c | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/lib/trusty/ql-tipc/keymaster.c b/lib/trusty/ql-tipc/keymaster.c index d62ed4aeb2..e0b8217262 100644 --- a/lib/trusty/ql-tipc/keymaster.c +++ b/lib/trusty/ql-tipc/keymaster.c @@ -33,8 +33,9 @@ static struct trusty_ipc_chan km_chan; static bool initialized; static int trusty_km_version = 2; -static const size_t max_ca_request_size = 10000; -static const size_t max_send_size = 4000; +static const size_t kMaxCaRequestSize = 10000; +static const size_t kMaxSendSize = 4000; +static const size_t kUuidSize = 32; #ifndef MIN #define MIN(a, b) ((a) < (b) ? (a) : (b)) @@ -417,11 +418,11 @@ int trusty_atap_get_ca_request(const uint8_t *operation_start, uint8_t **ca_request_p, uint32_t *ca_request_size_p) { - *ca_request_p = trusty_calloc(1, max_ca_request_size); + *ca_request_p = trusty_calloc(1, kMaxCaRequestSize); if (!*ca_request_p) { return TRUSTY_ERR_NO_MEMORY; } - *ca_request_size_p = max_ca_request_size; + *ca_request_size_p = kMaxCaRequestSize; int rc = trusty_send_raw_buffer(KM_ATAP_GET_CA_REQUEST, operation_start, operation_start_size, *ca_request_p, ca_request_size_p); @@ -448,7 +449,7 @@ int trusty_atap_set_ca_response(const uint8_t *ca_response, /* Send the CA Response message in chunks */ while (bytes_sent < ca_response_size) { - send_size = MIN(max_send_size, ca_response_size - bytes_sent); + send_size = MIN(kMaxSendSize, ca_response_size - bytes_sent); rc = trusty_send_raw_buffer(KM_ATAP_SET_CA_RESPONSE_UPDATE, ca_response + bytes_sent, send_size, NULL, NULL); @@ -461,3 +462,24 @@ int trusty_atap_set_ca_response(const uint8_t *ca_response, /* Tell Trusty Keymaster to parse the CA Response message */ return km_do_tipc(KM_ATAP_SET_CA_RESPONSE_FINISH, true, NULL, 0, NULL, NULL); } + + +int trusty_atap_read_uuid_str(char **uuid_p) +{ + *uuid_p = (char*) trusty_calloc(1, kUuidSize); + + uint32_t response_size = kUuidSize; + int rc = km_do_tipc(KM_ATAP_READ_UUID, true, NULL, 0, *uuid_p, + &response_size); + if (rc < 0) { + trusty_error("failed to read uuid: %d\n", rc); + trusty_free(*uuid_p); + return rc; + } + if (response_size != kUuidSize) { + trusty_error("keymaster returned wrong uuid size: %d\n", response_size); + trusty_free(*uuid_p); + rc = TRUSTY_ERR_GENERIC; + } + return rc; +} |