Change authorization set serialization approach to ensure that 32 vs 64
bit size and alignment differences don't cause problems.
Change-Id: I4a308cfac782161db2f1456adb2d6a56537e61f1
diff --git a/key_blob_test.cpp b/key_blob_test.cpp
index aaef45d..3f4c6e4 100644
--- a/key_blob_test.cpp
+++ b/key_blob_test.cpp
@@ -114,7 +114,7 @@
UniquePtr<uint8_t[]> serialized_blob(new uint8_t[size]);
blob.Serialize(serialized_blob.get(), serialized_blob.get() + size);
- // Find the nonce, then modify it.
+ // Modify the key length
serialized_blob[KeyBlob::NONCE_LENGTH]++;
// Decrypting with wrong nonce should fail.
@@ -219,20 +219,22 @@
uint8_t* begin = serialized_blob.get();
uint8_t* end = begin + size;
- // Find one element of enforced_ serialization and modify it.
- keymaster_key_param_t entry = enforced_[0];
- uint8_t* entry_begin = reinterpret_cast<uint8_t*>(&entry);
- uint8_t* entry_end = entry_begin + sizeof(entry);
- auto entry_ptr = std::search(begin, end, entry_begin, entry_end);
- ASSERT_NE(end, entry_ptr);
- EXPECT_EQ(end, std::search(entry_ptr + 1, end, entry_begin, entry_end));
- reinterpret_cast<keymaster_key_param_t*>(entry_ptr)->integer++;
+ // Find enforced serialization data and modify it.
+ size_t enforced_size = enforced_.SerializedSize();
+ UniquePtr<uint8_t[]> enforced_data(new uint8_t[enforced_size]);
+ enforced_.Serialize(enforced_data.get(), enforced_data.get() + enforced_size);
+
+ auto enforced_ptr =
+ std::search(begin, end, enforced_data.get(), enforced_data.get() + enforced_size);
+ ASSERT_NE(end, enforced_ptr);
+ EXPECT_EQ(end, std::search(enforced_ptr + 1, end, enforced_data.get(),
+ enforced_data.get() + enforced_size));
+ (*(enforced_ptr + enforced_size - 1))++;
// Decrypting with wrong unenforced data should fail.
keymaster_key_blob_t encrypted_blob = {serialized_blob.get(), size};
KeyBlob deserialized(encrypted_blob, master_key_);
EXPECT_EQ(KM_ERROR_INVALID_KEY_BLOB, deserialized.error());
- EXPECT_NE(0, memcmp(deserialized.key_material(), key_data_, array_size(key_data_)));
}
TEST_F(KeyBlobTest, WrongUnenforced) {
@@ -244,20 +246,22 @@
uint8_t* begin = serialized_blob.get();
uint8_t* end = begin + size;
- // Find one element of unenforced_ serialization and modify it.
- keymaster_key_param_t entry = unenforced_[0];
- uint8_t* entry_begin = reinterpret_cast<uint8_t*>(&entry);
- uint8_t* entry_end = entry_begin + sizeof(entry);
- auto entry_ptr = std::search(begin, end, entry_begin, entry_end);
- ASSERT_NE(end, entry_ptr);
- EXPECT_EQ(end, std::search(entry_ptr + 1, end, entry_begin, entry_end));
- reinterpret_cast<keymaster_key_param_t*>(entry_ptr)->integer++;
+ // Find unenforced serialization data and modify it.
+ size_t unenforced_size = unenforced_.SerializedSize();
+ UniquePtr<uint8_t[]> unenforced_data(new uint8_t[unenforced_size]);
+ unenforced_.Serialize(unenforced_data.get(), unenforced_data.get() + unenforced_size);
+
+ auto unenforced_ptr =
+ std::search(begin, end, unenforced_data.get(), unenforced_data.get() + unenforced_size);
+ ASSERT_NE(end, unenforced_ptr);
+ EXPECT_EQ(end, std::search(unenforced_ptr + 1, end, unenforced_data.get(),
+ unenforced_data.get() + unenforced_size));
+ (*(unenforced_ptr + unenforced_size - 1))++;
// Decrypting with wrong unenforced data should fail.
keymaster_key_blob_t encrypted_blob = {serialized_blob.get(), size};
KeyBlob deserialized(encrypted_blob, master_key_);
EXPECT_EQ(KM_ERROR_INVALID_KEY_BLOB, deserialized.error());
- EXPECT_NE(0, memcmp(deserialized.key_material(), key_data_, array_size(key_data_)));
}
} // namespace test