summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn Willden <swillden@google.com>2016-01-29 00:52:28 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-01-29 00:52:28 +0000
commitf0233bc26a5face7e76947899f75ae7ae0318683 (patch)
treef369f87d6986ec11387b609da96397e87fb50760
parentcffcf1400dcb871ae1841d036a6164e5c09bb4f8 (diff)
parent4ed2d7ed2275735ddc4952f310badfa4dcbaf04e (diff)
downloadandroid_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.cpp45
-rw-r--r--android_keymaster_messages_test.cpp10
-rw-r--r--include/keymaster/android_keymaster_messages.h6
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;
};