diff options
| author | Shawn Willden <swillden@google.com> | 2016-02-01 21:04:22 -0700 |
|---|---|---|
| committer | Shawn Willden <swillden@google.com> | 2016-02-01 21:05:46 -0700 |
| commit | 7f94865e58db668f222eb443fe1fb70ae2cc81f0 (patch) | |
| tree | c203189ae976f1c26b544cacbd82d4c511447a50 | |
| parent | 5c02b59507262a8ebd8092ee84c39a7fe94bdda2 (diff) | |
| download | android_system_keymaster-7f94865e58db668f222eb443fe1fb70ae2cc81f0.tar.gz android_system_keymaster-7f94865e58db668f222eb443fe1fb70ae2cc81f0.tar.bz2 android_system_keymaster-7f94865e58db668f222eb443fe1fb70ae2cc81f0.zip | |
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: I3a98b3bd5872dbc4f6de91db9c89d6e4193c9666
| -rw-r--r-- | include/keymaster/android_keymaster_messages.h | 69 |
1 files changed, 55 insertions, 14 deletions
diff --git a/include/keymaster/android_keymaster_messages.h b/include/keymaster/android_keymaster_messages.h index 008a616..3da7f47 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; @@ -128,8 +129,7 @@ struct SupportedAlgorithmsRequest : public KeymasterMessage { }; struct SupportedByAlgorithmRequest : public KeymasterMessage { - explicit SupportedByAlgorithmRequest(int32_t ver = MAX_MESSAGE_VERSION) - : KeymasterMessage(ver) {} + explicit SupportedByAlgorithmRequest(int32_t ver) : KeymasterMessage(ver) {} size_t SerializedSize() const override { return sizeof(uint32_t); }; uint8_t* Serialize(uint8_t* buf, const uint8_t* end) const override { @@ -142,8 +142,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,12 +170,23 @@ 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) + explicit SupportedResponse(int32_t ver) : KeymasterResponse(ver), results(nullptr), results_length(0) {} ~SupportedResponse() { delete[] results; } @@ -206,12 +224,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) {} |
