diff options
author | Eran Messeri <eranm@google.com> | 2021-12-13 17:09:17 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-12-13 17:09:17 +0000 |
commit | 3ef44eb5b0e821169f7ea2d04b238ff03269c162 (patch) | |
tree | e428b3abc89be94f659669cc59553f4f2e6e659e /security/keymint/aidl/vts/functional/KeyMintTest.cpp | |
parent | 92b51f25f7d3b31180ea922352929a2617983060 (diff) | |
parent | 4a9da1da1a62bc30aa6a42c4f0a4cad19bd71a00 (diff) |
Merge "Keymint: Test that corrupting the signature for HMAC verification fails" am: 924613950c am: 309c32adb7 am: a7ee9f53ed am: 4a9da1da1a
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1915101
Change-Id: Ifb396f5f61426d445dcbb20453f5b42ea42347e6
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 ae7f1091a1..76f27943b2 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; |