diff options
author | Shawn Willden <swillden@google.com> | 2016-01-05 18:01:46 -0700 |
---|---|---|
committer | Shawn Willden <swillden@google.com> | 2016-01-27 16:14:07 -0700 |
commit | 3d68cf64fb4bcea55406c3b6844b397ad264d8b2 (patch) | |
tree | 44c9245cb540e21ced75caf7e7480bb9a25a19a0 /include | |
parent | 239c1664173c941038a1d1d13626e58ce3cef819 (diff) | |
download | keymaster-3d68cf64fb4bcea55406c3b6844b397ad264d8b2.tar.gz |
Add attestation request/response messages
Bug: 22914603
Change-Id: I6f21da2bd7050519dd2b58a10ecacfef71d174c4
Diffstat (limited to 'include')
-rw-r--r-- | include/keymaster/android_keymaster_messages.h | 65 |
1 files changed, 51 insertions, 14 deletions
diff --git a/include/keymaster/android_keymaster_messages.h b/include/keymaster/android_keymaster_messages.h index 7fc300b..bc08dc3 100644 --- a/include/keymaster/android_keymaster_messages.h +++ b/include/keymaster/android_keymaster_messages.h @@ -21,8 +21,8 @@ #include <stdlib.h> #include <string.h> -#include <keymaster/authorization_set.h> #include <keymaster/android_keymaster_utils.h> +#include <keymaster/authorization_set.h> namespace keymaster { @@ -44,6 +44,7 @@ enum AndroidKeymasterCommand { GET_SUPPORTED_IMPORT_FORMATS = 13, GET_SUPPORTED_EXPORT_FORMATS = 14, GET_KEY_CHARACTERISTICS = 15, + ATTEST_KEY = 16, }; /** @@ -165,16 +166,16 @@ class SupportedDigestsRequest : public SupportedByAlgorithmAndPurposeRequest {}; template <typename T> struct SupportedResponse : public KeymasterResponse { explicit SupportedResponse(int32_t ver = MAX_MESSAGE_VERSION) - : KeymasterResponse(ver), results(NULL), results_length(0) {} + : KeymasterResponse(ver), results(nullptr), results_length(0) {} ~SupportedResponse() { delete[] results; } - template <size_t N> void SetResults(const T(&arr)[N]) { SetResults(arr, N); } + template <size_t N> void SetResults(const T (&arr)[N]) { SetResults(arr, N); } void SetResults(const T* arr, size_t n) { delete[] results; results_length = 0; results = dup_array(arr, n); - if (results == NULL) { + if (results == nullptr) { error = KM_ERROR_MEMORY_ALLOCATION_FAILED; } else { results_length = n; @@ -190,7 +191,7 @@ template <typename T> struct SupportedResponse : public KeymasterResponse { } bool NonErrorDeserialize(const uint8_t** buf_ptr, const uint8_t* end) override { delete[] results; - results = NULL; + results = nullptr; UniquePtr<T[]> tmp; if (!copy_uint32_array_from_buf(buf_ptr, end, &tmp, &results_length)) return false; @@ -225,7 +226,7 @@ struct GenerateKeyRequest : public KeymasterMessage { struct GenerateKeyResponse : public KeymasterResponse { explicit GenerateKeyResponse(int32_t ver = MAX_MESSAGE_VERSION) : KeymasterResponse(ver) { - key_blob.key_material = NULL; + key_blob.key_material = nullptr; key_blob.key_material_size = 0; } ~GenerateKeyResponse(); @@ -242,7 +243,7 @@ struct GenerateKeyResponse : public KeymasterResponse { struct GetKeyCharacteristicsRequest : public KeymasterMessage { explicit GetKeyCharacteristicsRequest(int32_t ver = MAX_MESSAGE_VERSION) : KeymasterMessage(ver) { - key_blob.key_material = NULL; + key_blob.key_material = nullptr; key_blob.key_material_size = 0; } ~GetKeyCharacteristicsRequest(); @@ -273,7 +274,7 @@ struct GetKeyCharacteristicsResponse : public KeymasterResponse { struct BeginOperationRequest : public KeymasterMessage { explicit BeginOperationRequest(int32_t ver = MAX_MESSAGE_VERSION) : KeymasterMessage(ver) { - key_blob.key_material = NULL; + key_blob.key_material = nullptr; key_blob.key_material_size = 0; } ~BeginOperationRequest() { delete[] key_blob.key_material; } @@ -397,7 +398,7 @@ struct AddEntropyResponse : public KeymasterResponse { struct ImportKeyRequest : public KeymasterMessage { explicit ImportKeyRequest(int32_t ver = MAX_MESSAGE_VERSION) - : KeymasterMessage(ver), key_data(NULL) {} + : KeymasterMessage(ver), key_data(nullptr) {} ~ImportKeyRequest() { delete[] key_data; } void SetKeyMaterial(const void* key_material, size_t length); @@ -417,7 +418,7 @@ struct ImportKeyRequest : public KeymasterMessage { struct ImportKeyResponse : public KeymasterResponse { explicit ImportKeyResponse(int32_t ver = MAX_MESSAGE_VERSION) : KeymasterResponse(ver) { - key_blob.key_material = NULL; + key_blob.key_material = nullptr; key_blob.key_material_size = 0; } ~ImportKeyResponse() { delete[] key_blob.key_material; } @@ -438,7 +439,7 @@ struct ImportKeyResponse : public KeymasterResponse { struct ExportKeyRequest : public KeymasterMessage { explicit ExportKeyRequest(int32_t ver = MAX_MESSAGE_VERSION) : KeymasterMessage(ver) { - key_blob.key_material = NULL; + key_blob.key_material = nullptr; key_blob.key_material_size = 0; } ~ExportKeyRequest() { delete[] key_blob.key_material; } @@ -459,7 +460,7 @@ struct ExportKeyRequest : public KeymasterMessage { struct ExportKeyResponse : public KeymasterResponse { explicit ExportKeyResponse(int32_t ver = MAX_MESSAGE_VERSION) - : KeymasterResponse(ver), key_data(NULL) {} + : KeymasterResponse(ver), key_data(nullptr) {} ~ExportKeyResponse() { delete[] key_data; } void SetKeyMaterial(const void* key_material, size_t length); @@ -519,7 +520,7 @@ struct DeleteAllKeysResponse : public KeymasterResponse { }; struct GetVersionRequest : public KeymasterMessage { - explicit GetVersionRequest() : KeymasterMessage(0 /* not versionable */) {} + GetVersionRequest() : KeymasterMessage(0 /* not versionable */) {} size_t SerializedSize() const override { return 0; } uint8_t* Serialize(uint8_t* buf, const uint8_t*) const override { return buf; } @@ -527,7 +528,7 @@ struct GetVersionRequest : public KeymasterMessage { }; struct GetVersionResponse : public KeymasterResponse { - explicit GetVersionResponse() + GetVersionResponse() : KeymasterResponse(0 /* not versionable */), major_ver(0), minor_ver(0), subminor_ver(0) {} size_t NonErrorSerializedSize() const override; @@ -539,6 +540,42 @@ struct GetVersionResponse : public KeymasterResponse { uint8_t subminor_ver; }; +struct AttestKeyRequest : public KeymasterMessage { + explicit AttestKeyRequest(int32_t ver = MAX_MESSAGE_VERSION) : KeymasterMessage(ver) { + key_blob.key_material = nullptr; + key_blob.key_material_size = 0; + } + ~AttestKeyRequest(); + + void SetKeyMaterial(const void* key_material, size_t length); + void SetKeyMaterial(const keymaster_key_blob_t& blob) { + SetKeyMaterial(blob.key_material, blob.key_material_size); + } + + size_t SerializedSize() const override; + uint8_t* Serialize(uint8_t* buf, const uint8_t* end) const override; + bool Deserialize(const uint8_t** buf_ptr, const uint8_t* end) override; + + keymaster_key_blob_t key_blob; + AuthorizationSet attest_params; +}; + +struct AttestKeyResponse : public KeymasterResponse { + explicit AttestKeyResponse(int32_t ver = MAX_MESSAGE_VERSION) : KeymasterResponse(ver) { + certificate_chain.entry_count = 0; + certificate_chain.entries = nullptr; + } + ~AttestKeyResponse(); + + bool AllocateChain(size_t entry_count); + + size_t NonErrorSerializedSize() const override; + uint8_t* NonErrorSerialize(uint8_t* buf, const uint8_t* end) const override; + bool NonErrorDeserialize(const uint8_t** buf_ptr, const uint8_t* end) override; + + keymaster_cert_chain_t certificate_chain; +}; + } // namespace keymaster #endif // SYSTEM_KEYMASTER_ANDROID_KEYMASTER_MESSAGES_H_ |