Merge "Adding testing functionality for TAG_ROLLBACK_RESISTANCE" am: 28a7fed681
am: dddf75c01b
am: 28446e0722
am: 9031031e47
Change-Id: If2d2705df193223cf5c542c4d7270cf5e29f6bb3
This commit is contained in:
commit
eb651fa35d
1 changed files with 44 additions and 63 deletions
|
@ -4339,75 +4339,61 @@ typedef KeymasterHidlTest KeyDeletionTest;
|
|||
*
|
||||
* This test checks that if rollback protection is implemented, DeleteKey invalidates a formerly
|
||||
* valid key blob.
|
||||
*
|
||||
* TODO(swillden): Update to incorporate changes in rollback resistance semantics.
|
||||
*/
|
||||
TEST_F(KeyDeletionTest, DeleteKey) {
|
||||
ASSERT_EQ(ErrorCode::OK, GenerateKey(AuthorizationSetBuilder()
|
||||
.RsaSigningKey(2048, 65537)
|
||||
.Digest(Digest::NONE)
|
||||
.Padding(PaddingMode::NONE)
|
||||
.Authorization(TAG_NO_AUTH_REQUIRED)));
|
||||
auto error = GenerateKey(AuthorizationSetBuilder()
|
||||
.RsaSigningKey(2048, 65537)
|
||||
.Digest(Digest::NONE)
|
||||
.Padding(PaddingMode::NONE)
|
||||
.Authorization(TAG_NO_AUTH_REQUIRED)
|
||||
.Authorization(TAG_ROLLBACK_RESISTANCE));
|
||||
ASSERT_TRUE(error == ErrorCode::ROLLBACK_RESISTANCE_UNAVAILABLE || error == ErrorCode::OK);
|
||||
|
||||
// Delete must work if rollback protection is implemented
|
||||
AuthorizationSet hardwareEnforced(key_characteristics_.hardwareEnforced);
|
||||
bool rollback_protected = hardwareEnforced.Contains(TAG_ROLLBACK_RESISTANCE);
|
||||
if (error == ErrorCode::OK) {
|
||||
AuthorizationSet hardwareEnforced(key_characteristics_.hardwareEnforced);
|
||||
ASSERT_TRUE(hardwareEnforced.Contains(TAG_ROLLBACK_RESISTANCE));
|
||||
|
||||
if (rollback_protected) {
|
||||
ASSERT_EQ(ErrorCode::OK, DeleteKey(true /* keep key blob */));
|
||||
} else {
|
||||
auto delete_result = DeleteKey(true /* keep key blob */);
|
||||
ASSERT_TRUE(delete_result == ErrorCode::OK | delete_result == ErrorCode::UNIMPLEMENTED);
|
||||
}
|
||||
|
||||
string message = "12345678901234567890123456789012";
|
||||
AuthorizationSet begin_out_params;
|
||||
|
||||
if (rollback_protected) {
|
||||
string message = "12345678901234567890123456789012";
|
||||
AuthorizationSet begin_out_params;
|
||||
EXPECT_EQ(ErrorCode::INVALID_KEY_BLOB,
|
||||
Begin(KeyPurpose::SIGN, key_blob_,
|
||||
AuthorizationSetBuilder().Digest(Digest::NONE).Padding(PaddingMode::NONE),
|
||||
&begin_out_params, &op_handle_));
|
||||
} else {
|
||||
EXPECT_EQ(ErrorCode::OK,
|
||||
Begin(KeyPurpose::SIGN, key_blob_,
|
||||
AuthorizationSetBuilder().Digest(Digest::NONE).Padding(PaddingMode::NONE),
|
||||
&begin_out_params, &op_handle_));
|
||||
AbortIfNeeded();
|
||||
key_blob_ = HidlBuf();
|
||||
}
|
||||
AbortIfNeeded();
|
||||
key_blob_ = HidlBuf();
|
||||
}
|
||||
|
||||
/**
|
||||
* KeyDeletionTest.DeleteInvalidKey
|
||||
*
|
||||
* This test checks that the HAL excepts invalid key blobs.
|
||||
*
|
||||
* TODO(swillden): Update to incorporate changes in rollback resistance semantics.
|
||||
* This test checks that the HAL excepts invalid key blobs..
|
||||
*/
|
||||
TEST_F(KeyDeletionTest, DeleteInvalidKey) {
|
||||
// Generate key just to check if rollback protection is implemented
|
||||
ASSERT_EQ(ErrorCode::OK, GenerateKey(AuthorizationSetBuilder()
|
||||
.RsaSigningKey(2048, 65537)
|
||||
.Digest(Digest::NONE)
|
||||
.Padding(PaddingMode::NONE)
|
||||
.Authorization(TAG_NO_AUTH_REQUIRED)));
|
||||
auto error = GenerateKey(AuthorizationSetBuilder()
|
||||
.RsaSigningKey(2048, 65537)
|
||||
.Digest(Digest::NONE)
|
||||
.Padding(PaddingMode::NONE)
|
||||
.Authorization(TAG_NO_AUTH_REQUIRED)
|
||||
.Authorization(TAG_ROLLBACK_RESISTANCE));
|
||||
ASSERT_TRUE(error == ErrorCode::ROLLBACK_RESISTANCE_UNAVAILABLE || error == ErrorCode::OK);
|
||||
|
||||
// Delete must work if rollback protection is implemented
|
||||
AuthorizationSet hardwareEnforced(key_characteristics_.hardwareEnforced);
|
||||
bool rollback_protected = hardwareEnforced.Contains(TAG_ROLLBACK_RESISTANCE);
|
||||
if (error == ErrorCode::OK) {
|
||||
AuthorizationSet hardwareEnforced(key_characteristics_.hardwareEnforced);
|
||||
ASSERT_TRUE(hardwareEnforced.Contains(TAG_ROLLBACK_RESISTANCE));
|
||||
|
||||
// Delete the key we don't care about the result at this point.
|
||||
DeleteKey();
|
||||
// Delete the key we don't care about the result at this point.
|
||||
DeleteKey();
|
||||
|
||||
// Now create an invalid key blob and delete it.
|
||||
key_blob_ = HidlBuf("just some garbage data which is not a valid key blob");
|
||||
// Now create an invalid key blob and delete it.
|
||||
key_blob_ = HidlBuf("just some garbage data which is not a valid key blob");
|
||||
|
||||
if (rollback_protected) {
|
||||
ASSERT_EQ(ErrorCode::OK, DeleteKey());
|
||||
} else {
|
||||
auto delete_result = DeleteKey();
|
||||
ASSERT_TRUE(delete_result == ErrorCode::OK | delete_result == ErrorCode::UNIMPLEMENTED);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4421,39 +4407,34 @@ TEST_F(KeyDeletionTest, DeleteInvalidKey) {
|
|||
* device has been wiped manually (e.g., fastboot flashall -w), and new FBE/FDE keys have
|
||||
* been provisioned. Use this test only on dedicated testing devices that have no valuable
|
||||
* credentials stored in Keystore/Keymaster.
|
||||
*
|
||||
* TODO(swillden): Update to incorporate changes in rollback resistance semantics.
|
||||
*/
|
||||
TEST_F(KeyDeletionTest, DeleteAllKeys) {
|
||||
if (!arm_deleteAllKeys) return;
|
||||
ASSERT_EQ(ErrorCode::OK, GenerateKey(AuthorizationSetBuilder()
|
||||
.RsaSigningKey(2048, 65537)
|
||||
.Digest(Digest::NONE)
|
||||
.Padding(PaddingMode::NONE)
|
||||
.Authorization(TAG_NO_AUTH_REQUIRED)));
|
||||
auto error = GenerateKey(AuthorizationSetBuilder()
|
||||
.RsaSigningKey(2048, 65537)
|
||||
.Digest(Digest::NONE)
|
||||
.Padding(PaddingMode::NONE)
|
||||
.Authorization(TAG_NO_AUTH_REQUIRED)
|
||||
.Authorization(TAG_ROLLBACK_RESISTANCE));
|
||||
ASSERT_TRUE(error == ErrorCode::ROLLBACK_RESISTANCE_UNAVAILABLE || error == ErrorCode::OK);
|
||||
|
||||
// Delete must work if rollback protection is implemented
|
||||
AuthorizationSet hardwareEnforced(key_characteristics_.hardwareEnforced);
|
||||
bool rollback_protected = hardwareEnforced.Contains(TAG_ROLLBACK_RESISTANCE);
|
||||
if (error == ErrorCode::OK) {
|
||||
AuthorizationSet hardwareEnforced(key_characteristics_.hardwareEnforced);
|
||||
ASSERT_TRUE(hardwareEnforced.Contains(TAG_ROLLBACK_RESISTANCE));
|
||||
|
||||
ASSERT_EQ(ErrorCode::OK, DeleteAllKeys());
|
||||
ASSERT_EQ(ErrorCode::OK, DeleteAllKeys());
|
||||
|
||||
string message = "12345678901234567890123456789012";
|
||||
AuthorizationSet begin_out_params;
|
||||
string message = "12345678901234567890123456789012";
|
||||
AuthorizationSet begin_out_params;
|
||||
|
||||
if (rollback_protected) {
|
||||
EXPECT_EQ(ErrorCode::INVALID_KEY_BLOB,
|
||||
Begin(KeyPurpose::SIGN, key_blob_,
|
||||
AuthorizationSetBuilder().Digest(Digest::NONE).Padding(PaddingMode::NONE),
|
||||
&begin_out_params, &op_handle_));
|
||||
} else {
|
||||
EXPECT_EQ(ErrorCode::OK,
|
||||
Begin(KeyPurpose::SIGN, key_blob_,
|
||||
AuthorizationSetBuilder().Digest(Digest::NONE).Padding(PaddingMode::NONE),
|
||||
&begin_out_params, &op_handle_));
|
||||
AbortIfNeeded();
|
||||
key_blob_ = HidlBuf();
|
||||
}
|
||||
AbortIfNeeded();
|
||||
key_blob_ = HidlBuf();
|
||||
}
|
||||
|
||||
using UpgradeKeyTest = KeymasterHidlTest;
|
||||
|
|
Loading…
Reference in a new issue