diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /security/nss/gtests/freebl_gtest/ghash_unittest.cc | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'security/nss/gtests/freebl_gtest/ghash_unittest.cc')
-rw-r--r-- | security/nss/gtests/freebl_gtest/ghash_unittest.cc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/security/nss/gtests/freebl_gtest/ghash_unittest.cc b/security/nss/gtests/freebl_gtest/ghash_unittest.cc new file mode 100644 index 0000000000..5b7e633486 --- /dev/null +++ b/security/nss/gtests/freebl_gtest/ghash_unittest.cc @@ -0,0 +1,55 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +#include "testvectors/gcm-vectors.h" +#include "gtest/gtest.h" +#include "util.h" + +#include "gcm.h" + +namespace nss_test { + +class GHashTest : public ::testing::TestWithParam<AesGcmKatValue> { + protected: + void TestGHash(const AesGcmKatValue val, bool sw) { + // Read test data. + std::vector<uint8_t> hash_key = hex_string_to_bytes(val.hash_key); + ASSERT_EQ(16UL, hash_key.size()); + std::vector<uint8_t> additional_data = + hex_string_to_bytes(val.additional_data); + std::vector<uint8_t> result = hex_string_to_bytes(val.result); + std::vector<uint8_t> cipher_text(result.begin(), result.end() - 16); + std::vector<uint8_t> expected = hex_string_to_bytes(val.ghash); + ASSERT_EQ(16UL, expected.size()); + + // Prepare context. + gcmHashContext ghashCtx; + ASSERT_EQ(SECSuccess, gcmHash_InitContext(&ghashCtx, hash_key.data(), sw)); + + // Hash additional_data, cipher_text. + gcmHash_Reset(&ghashCtx, + const_cast<const unsigned char *>(additional_data.data()), + additional_data.size()); + gcmHash_Update(&ghashCtx, + const_cast<const unsigned char *>(cipher_text.data()), + cipher_text.size()); + + // Finalise (hash in the length). + uint8_t result_bytes[16]; + unsigned int out_len; + ASSERT_EQ(SECSuccess, gcmHash_Final(&ghashCtx, result_bytes, &out_len, 16)); + ASSERT_EQ(16U, out_len); + EXPECT_EQ(expected, std::vector<uint8_t>(result_bytes, result_bytes + 16)); + } +}; + +#ifdef NSS_X86_OR_X64 +TEST_P(GHashTest, KAT_X86_HW) { TestGHash(GetParam(), false); } +#endif +TEST_P(GHashTest, KAT_Sftw) { TestGHash(GetParam(), true); } + +INSTANTIATE_TEST_SUITE_P(NISTTestVector, GHashTest, + ::testing::ValuesIn(kGcmKatValues)); + +} // namespace nss_test |