diff options
| author | Shawn Willden <swillden@google.com> | 2016-01-29 00:52:28 +0000 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2016-01-29 00:52:28 +0000 |
| commit | f0233bc26a5face7e76947899f75ae7ae0318683 (patch) | |
| tree | f369f87d6986ec11387b609da96397e87fb50760 | |
| parent | cffcf1400dcb871ae1841d036a6164e5c09bb4f8 (diff) | |
| parent | 4ed2d7ed2275735ddc4952f310badfa4dcbaf04e (diff) | |
| download | android_system_keymaster-f0233bc26a5face7e76947899f75ae7ae0318683.tar.gz android_system_keymaster-f0233bc26a5face7e76947899f75ae7ae0318683.tar.bz2 android_system_keymaster-f0233bc26a5face7e76947899f75ae7ae0318683.zip | |
Add input to FinishOperationRequest message.
am: 4ed2d7ed22
* commit '4ed2d7ed2275735ddc4952f310badfa4dcbaf04e':
Add input to FinishOperationRequest message.
| -rw-r--r-- | android_keymaster_messages.cpp | 45 | ||||
| -rw-r--r-- | android_keymaster_messages_test.cpp | 10 | ||||
| -rw-r--r-- | include/keymaster/android_keymaster_messages.h | 6 |
3 files changed, 50 insertions, 11 deletions
diff --git a/android_keymaster_messages.cpp b/android_keymaster_messages.cpp index ddac3b6..1b8f36e 100644 --- a/android_keymaster_messages.cpp +++ b/android_keymaster_messages.cpp @@ -192,17 +192,24 @@ bool UpdateOperationRequest::Deserialize(const uint8_t** buf_ptr, const uint8_t* } size_t UpdateOperationResponse::NonErrorSerializedSize() const { + size_t size = 0; switch (message_version) { - case 0: - return output.SerializedSize(); - case 1: - return output.SerializedSize() + sizeof(uint32_t); + case 3: case 2: - return output.SerializedSize() + sizeof(uint32_t) + output_params.SerializedSize(); + size += output_params.SerializedSize(); + ; /* falls through */ + case 1: + size += sizeof(uint32_t); + ; /* falls through */ + case 0: + size += output.SerializedSize(); + break; + default: assert(false); - return 0; } + + return size; } uint8_t* UpdateOperationResponse::NonErrorSerialize(uint8_t* buf, const uint8_t* end) const { @@ -224,10 +231,24 @@ bool UpdateOperationResponse::NonErrorDeserialize(const uint8_t** buf_ptr, const } size_t FinishOperationRequest::SerializedSize() const { - if (message_version == 0) - return sizeof(op_handle) + signature.SerializedSize(); - else - return sizeof(op_handle) + signature.SerializedSize() + additional_params.SerializedSize(); + size_t size = 0; + switch (message_version) { + case 3: + size += input.SerializedSize(); + ; /* falls through */ + case 2: + case 1: + size += additional_params.SerializedSize(); + ; /* falls through */ + case 0: + size += sizeof(op_handle) + signature.SerializedSize(); + break; + + default: + assert(false); // Should never get here. + } + + return size; } uint8_t* FinishOperationRequest::Serialize(uint8_t* buf, const uint8_t* end) const { @@ -235,6 +256,8 @@ uint8_t* FinishOperationRequest::Serialize(uint8_t* buf, const uint8_t* end) con buf = signature.Serialize(buf, end); if (message_version > 0) buf = additional_params.Serialize(buf, end); + if (message_version > 2) + buf = input.Serialize(buf, end); return buf; } @@ -243,6 +266,8 @@ bool FinishOperationRequest::Deserialize(const uint8_t** buf_ptr, const uint8_t* copy_uint64_from_buf(buf_ptr, end, &op_handle) && signature.Deserialize(buf_ptr, end); if (retval && message_version > 0) retval = additional_params.Deserialize(buf_ptr, end); + if (retval && message_version > 2) + retval = input.Deserialize(buf_ptr, end); return retval; } diff --git a/android_keymaster_messages_test.cpp b/android_keymaster_messages_test.cpp index d987af0..e6b70fa 100644 --- a/android_keymaster_messages_test.cpp +++ b/android_keymaster_messages_test.cpp @@ -222,6 +222,7 @@ TEST(RoundTrip, BeginOperationResponse) { break; case 1: case 2: + case 3: deserialized.reset(round_trip(ver, msg, 39)); break; default: @@ -237,6 +238,7 @@ TEST(RoundTrip, BeginOperationResponse) { break; case 1: case 2: + case 3: EXPECT_EQ(msg.output_params, deserialized->output_params); break; default: @@ -269,6 +271,7 @@ TEST(RoundTrip, UpdateOperationRequest) { break; case 1: case 2: + case 3: deserialized.reset(round_trip(ver, msg, 27)); break; default: @@ -296,6 +299,7 @@ TEST(RoundTrip, UpdateOperationResponse) { deserialized.reset(round_trip(ver, msg, 15)); break; case 2: + case 3: deserialized.reset(round_trip(ver, msg, 42)); break; default: @@ -313,6 +317,7 @@ TEST(RoundTrip, UpdateOperationResponse) { EXPECT_EQ(99U, deserialized->input_consumed); break; case 2: + case 3: EXPECT_EQ(99U, deserialized->input_consumed); EXPECT_EQ(1U, deserialized->output_params.size()); break; @@ -327,6 +332,7 @@ TEST(RoundTrip, FinishOperationRequest) { FinishOperationRequest msg(ver); msg.op_handle = 0xDEADBEEF; msg.signature.Reinitialize("bar", 3); + msg.input.Reinitialize("baz", 3); UniquePtr<FinishOperationRequest> deserialized; switch (ver) { @@ -337,6 +343,9 @@ TEST(RoundTrip, FinishOperationRequest) { case 2: deserialized.reset(round_trip(ver, msg, 27)); break; + case 3: + deserialized.reset(round_trip(ver, msg, 34)); + break; default: FAIL(); } @@ -359,6 +368,7 @@ TEST(Round_Trip, FinishOperationResponse) { deserialized.reset(round_trip(ver, msg, 11)); break; case 2: + case 3: deserialized.reset(round_trip(ver, msg, 23)); break; default: diff --git a/include/keymaster/android_keymaster_messages.h b/include/keymaster/android_keymaster_messages.h index bc08dc3..008a616 100644 --- a/include/keymaster/android_keymaster_messages.h +++ b/include/keymaster/android_keymaster_messages.h @@ -65,7 +65,7 @@ enum AndroidKeymasterCommand { * Note that this approach implies that GetVersionRequest and GetVersionResponse cannot be * versioned. */ -const int32_t MAX_MESSAGE_VERSION = 2; +const int32_t MAX_MESSAGE_VERSION = 3; inline int32_t MessageVersion(uint8_t major_ver, uint8_t minor_ver, uint8_t /* subminor_ver */) { int32_t message_version = -1; switch (major_ver) { @@ -83,6 +83,9 @@ inline int32_t MessageVersion(uint8_t major_ver, uint8_t minor_ver, uint8_t /* s message_version = 2; break; } + case 2: + message_version = 3; + break; }; return message_version; } @@ -337,6 +340,7 @@ struct FinishOperationRequest : public KeymasterMessage { bool Deserialize(const uint8_t** buf_ptr, const uint8_t* end) override; keymaster_operation_handle_t op_handle; + Buffer input; Buffer signature; AuthorizationSet additional_params; }; |
