diff options
author | Shawn Willden <swillden@google.com> | 2016-02-01 21:51:50 -0700 |
---|---|---|
committer | Shawn Willden <swillden@google.com> | 2016-02-02 07:22:00 -0700 |
commit | e8c8ec844005e525100556ab01e84d1cd7960a26 (patch) | |
tree | b82f6d7f0fcd016919a35eae4e979a0a11a4f3de | |
parent | cb647fec03f71929fd316d2b8f0750f7b24824f3 (diff) | |
download | keymaster-e8c8ec844005e525100556ab01e84d1cd7960a26.tar.gz |
Fix message versioning support.
Message versioning was not implemented correctly for several of the
massage classes. This fixes them. This was discovered while fixing the
bug listed below, though it's a bug regardless.
Bug: 26903982
Change-Id: I0a5b01e41d2d41f4edbf5ab6e8108d6143a1a8b0
-rw-r--r-- | include/keymaster/android_keymaster_messages.h | 64 |
1 files changed, 53 insertions, 11 deletions
diff --git a/include/keymaster/android_keymaster_messages.h b/include/keymaster/android_keymaster_messages.h index 008a616..a2936d1 100644 --- a/include/keymaster/android_keymaster_messages.h +++ b/include/keymaster/android_keymaster_messages.h @@ -83,6 +83,7 @@ inline int32_t MessageVersion(uint8_t major_ver, uint8_t minor_ver, uint8_t /* s message_version = 2; break; } + break; case 2: message_version = 3; break; @@ -142,8 +143,15 @@ struct SupportedByAlgorithmRequest : public KeymasterMessage { keymaster_algorithm_t algorithm; }; -class SupportedImportFormatsRequest : public SupportedByAlgorithmRequest {}; -class SupportedExportFormatsRequest : public SupportedByAlgorithmRequest {}; +struct SupportedImportFormatsRequest : public SupportedByAlgorithmRequest { + SupportedImportFormatsRequest(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedByAlgorithmRequest(ver) {} +}; + +struct SupportedExportFormatsRequest : public SupportedByAlgorithmRequest { + SupportedExportFormatsRequest(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedByAlgorithmRequest(ver) {} +}; struct SupportedByAlgorithmAndPurposeRequest : public KeymasterMessage { explicit SupportedByAlgorithmAndPurposeRequest(int32_t ver = MAX_MESSAGE_VERSION) @@ -163,9 +171,20 @@ struct SupportedByAlgorithmAndPurposeRequest : public KeymasterMessage { keymaster_purpose_t purpose; }; -class SupportedBlockModesRequest : public SupportedByAlgorithmAndPurposeRequest {}; -class SupportedPaddingModesRequest : public SupportedByAlgorithmAndPurposeRequest {}; -class SupportedDigestsRequest : public SupportedByAlgorithmAndPurposeRequest {}; +struct SupportedBlockModesRequest : public SupportedByAlgorithmAndPurposeRequest { + SupportedBlockModesRequest(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedByAlgorithmAndPurposeRequest(ver) {} +}; + +struct SupportedPaddingModesRequest : public SupportedByAlgorithmAndPurposeRequest { + SupportedPaddingModesRequest(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedByAlgorithmAndPurposeRequest(ver) {} +}; + +struct SupportedDigestsRequest : public SupportedByAlgorithmAndPurposeRequest { + SupportedDigestsRequest(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedByAlgorithmAndPurposeRequest(ver) {} +}; template <typename T> struct SupportedResponse : public KeymasterResponse { explicit SupportedResponse(int32_t ver = MAX_MESSAGE_VERSION) @@ -206,12 +225,35 @@ template <typename T> struct SupportedResponse : public KeymasterResponse { size_t results_length; }; -class SupportedAlgorithmsResponse : public SupportedResponse<keymaster_algorithm_t> {}; -class SupportedBlockModesResponse : public SupportedResponse<keymaster_block_mode_t> {}; -class SupportedPaddingModesResponse : public SupportedResponse<keymaster_padding_t> {}; -class SupportedDigestsResponse : public SupportedResponse<keymaster_digest_t> {}; -class SupportedImportFormatsResponse : public SupportedResponse<keymaster_key_format_t> {}; -class SupportedExportFormatsResponse : public SupportedResponse<keymaster_key_format_t> {}; +struct SupportedAlgorithmsResponse : public SupportedResponse<keymaster_algorithm_t> { + SupportedAlgorithmsResponse(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedResponse<keymaster_algorithm_t>(ver) {} +}; + +struct SupportedBlockModesResponse : public SupportedResponse<keymaster_block_mode_t> { + SupportedBlockModesResponse(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedResponse<keymaster_block_mode_t>(ver) {} +}; + +struct SupportedPaddingModesResponse : public SupportedResponse<keymaster_padding_t> { + SupportedPaddingModesResponse(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedResponse<keymaster_padding_t>(ver) {} +}; + +struct SupportedDigestsResponse : public SupportedResponse<keymaster_digest_t> { + SupportedDigestsResponse(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedResponse<keymaster_digest_t>(ver) {} +}; + +struct SupportedImportFormatsResponse : public SupportedResponse<keymaster_key_format_t> { + SupportedImportFormatsResponse(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedResponse<keymaster_key_format_t>(ver) {} +}; + +struct SupportedExportFormatsResponse : public SupportedResponse<keymaster_key_format_t> { + SupportedExportFormatsResponse(int32_t ver = MAX_MESSAGE_VERSION) + : SupportedResponse<keymaster_key_format_t>(ver) {} +}; struct GenerateKeyRequest : public KeymasterMessage { explicit GenerateKeyRequest(int32_t ver = MAX_MESSAGE_VERSION) : KeymasterMessage(ver) {} |