summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn Willden <swillden@google.com>2016-02-01 21:04:22 -0700
committerShawn Willden <swillden@google.com>2016-02-01 21:05:46 -0700
commit7f94865e58db668f222eb443fe1fb70ae2cc81f0 (patch)
treec203189ae976f1c26b544cacbd82d4c511447a50
parent5c02b59507262a8ebd8092ee84c39a7fe94bdda2 (diff)
downloadandroid_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.h69
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) {}