From b4598740de1fba486fc3dee952b16873827341ac Mon Sep 17 00:00:00 2001 From: David Drysdale Date: Tue, 23 Apr 2024 13:35:15 +0100 Subject: [PATCH] KeyMint: test for unique HMAC results Bug: 218713582 Test: VtsAidlKeyMintTargetTest Change-Id: I5babfa67e707dc1bf15dd40b1ee4c8c8b97f44a7 --- .../aidl/vts/functional/KeyMintTest.cpp | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/security/keymint/aidl/vts/functional/KeyMintTest.cpp b/security/keymint/aidl/vts/functional/KeyMintTest.cpp index b65218fba9..65a4645536 100644 --- a/security/keymint/aidl/vts/functional/KeyMintTest.cpp +++ b/security/keymint/aidl/vts/functional/KeyMintTest.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -3587,6 +3588,42 @@ TEST_P(SigningOperationsTest, HmacAllDigests) { } } +/* + * SigningOperationsTest.HmacMessageDigestUnique + * + * Verifies that HMAC with different keys gives different results. + */ +TEST_P(SigningOperationsTest, HmacMessageDigestUnique) { + for (int key_len : {64, 128, 192, 256, 512}) { + for (int msg_len = 0; msg_len <= 30; msg_len += 10) { + string message = string(msg_len, 'x'); + for (auto digest : ValidDigests(false /* withNone */, false /* withMD5 */)) { + SCOPED_TRACE(testing::Message() << "Digest::" << digest << "::MsgLen::" << msg_len); + + int count = 10; + std::set results; + for (int ii = 0; ii < count; ii++) { + ASSERT_EQ(ErrorCode::OK, + GenerateKey(AuthorizationSetBuilder() + .Authorization(TAG_NO_AUTH_REQUIRED) + .HmacKey(key_len) + .Digest(digest) + .Authorization(TAG_MIN_MAC_LENGTH, 160))) + << "Failed to create HMAC key with digest " << digest; + string signature = MacMessage(message, digest, 160); + EXPECT_EQ(160U / 8U, signature.size()) + << "Failed to sign with HMAC key with digest " << digest; + CheckedDeleteKey(); + results.insert(signature); + } + EXPECT_EQ(results.size(), count) + << "HMAC of a message '" << message << "' with " << count + << " fresh keys only gave " << results.size() << " distinct results"; + } + } + } +} + /* * SigningOperationsTest.HmacSha256TooLargeMacLength *