diff options
author | Prashant Patil <patilprashant@google.com> | 2021-12-08 15:25:47 +0000 |
---|---|---|
committer | Prashant Patil <patilprashant@google.com> | 2021-12-09 13:41:30 +0000 |
commit | dec9fdc81d4f3c6a190a56a98ba2933ca1247ce3 (patch) | |
tree | 7780c7dacf6b2662dce411bbbef6f1af573793e0 /security/keymint/aidl/vts/functional/KeyMintTest.cpp | |
parent | 4c12800dd80134b666ebe418888efd56498dd8fc (diff) |
Keymint: Test that corrupting the signature for HMAC verification fails
A VTS test case to verify HMAC signature verification fails if data or
signature is currupted.
Bug: 209452930
Test: run vts -m VtsAidlKeyMintTargetTest
Change-Id: I2177fd99cfab4ef4a347d50461db0d2e3ad8c612
Diffstat (limited to 'security/keymint/aidl/vts/functional/KeyMintTest.cpp')
-rw-r--r-- | security/keymint/aidl/vts/functional/KeyMintTest.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/security/keymint/aidl/vts/functional/KeyMintTest.cpp b/security/keymint/aidl/vts/functional/KeyMintTest.cpp index 2a7911cc36..dc14771a14 100644 --- a/security/keymint/aidl/vts/functional/KeyMintTest.cpp +++ b/security/keymint/aidl/vts/functional/KeyMintTest.cpp @@ -3151,6 +3151,58 @@ TEST_P(VerificationOperationsTest, HmacSigningKeyCannotVerify) { CheckedDeleteKey(&verification_key); } +/* + * VerificationOperationsTest.HmacVerificationFailsForCorruptSignature + * + * Verifies HMAC signature verification should fails if message or signature is corrupted. + */ +TEST_P(VerificationOperationsTest, HmacVerificationFailsForCorruptSignature) { + string key_material = "HelloThisIsAKey"; + + vector<uint8_t> signing_key, verification_key; + vector<KeyCharacteristics> signing_key_chars, verification_key_chars; + EXPECT_EQ(ErrorCode::OK, + ImportKey(AuthorizationSetBuilder() + .Authorization(TAG_NO_AUTH_REQUIRED) + .Authorization(TAG_ALGORITHM, Algorithm::HMAC) + .Authorization(TAG_PURPOSE, KeyPurpose::SIGN) + .Digest(Digest::SHA_2_256) + .Authorization(TAG_MIN_MAC_LENGTH, 160), + KeyFormat::RAW, key_material, &signing_key, &signing_key_chars)); + EXPECT_EQ(ErrorCode::OK, + ImportKey(AuthorizationSetBuilder() + .Authorization(TAG_NO_AUTH_REQUIRED) + .Authorization(TAG_ALGORITHM, Algorithm::HMAC) + .Authorization(TAG_PURPOSE, KeyPurpose::VERIFY) + .Digest(Digest::SHA_2_256) + .Authorization(TAG_MIN_MAC_LENGTH, 160), + KeyFormat::RAW, key_material, &verification_key, &verification_key_chars)); + + string message = "This is a message."; + string signature = SignMessage( + signing_key, message, + AuthorizationSetBuilder().Digest(Digest::SHA_2_256).Authorization(TAG_MAC_LENGTH, 160)); + + AuthorizationSet begin_out_params; + ASSERT_EQ(ErrorCode::OK, + Begin(KeyPurpose::VERIFY, verification_key, + AuthorizationSetBuilder().Digest(Digest::SHA_2_256), &begin_out_params)); + + string corruptMessage = "This is b message."; // Corrupted message + string output; + EXPECT_EQ(ErrorCode::VERIFICATION_FAILED, Finish(corruptMessage, signature, &output)); + + ASSERT_EQ(ErrorCode::OK, + Begin(KeyPurpose::VERIFY, verification_key, + AuthorizationSetBuilder().Digest(Digest::SHA_2_256), &begin_out_params)); + + signature[0] += 1; // Corrupt a signature + EXPECT_EQ(ErrorCode::VERIFICATION_FAILED, Finish(message, signature, &output)); + + CheckedDeleteKey(&signing_key); + CheckedDeleteKey(&verification_key); +} + INSTANTIATE_KEYMINT_AIDL_TEST(VerificationOperationsTest); typedef KeyMintAidlTestBase ExportKeyTest; |