From f017b749ea9f1586d2308504553d40bf4cc5439d Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Tue, 6 Feb 2018 11:46:26 +0100 Subject: Update NSS to 3.32.1-RTM --- security/nss/gtests/freebl_gtest/ghash_unittest.cc | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 security/nss/gtests/freebl_gtest/ghash_unittest.cc (limited to 'security/nss/gtests/freebl_gtest/ghash_unittest.cc') 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 000000000..3c9045bec --- /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 "gcm-vectors.h" +#include "gtest/gtest.h" +#include "util.h" + +#include "gcm.h" + +namespace nss_test { + +class GHashTest : public ::testing::TestWithParam { + protected: + void TestGHash(const gcm_kat_value val, bool sw) { + // Read test data. + std::vector hash_key = hex_string_to_bytes(val.hash_key); + ASSERT_EQ(16UL, hash_key.size()); + std::vector additional_data = + hex_string_to_bytes(val.additional_data); + std::vector result = hex_string_to_bytes(val.result); + std::vector cipher_text(result.begin(), result.end() - 16); + std::vector 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(additional_data.data()), + additional_data.size()); + gcmHash_Update(&ghashCtx, + const_cast(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(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_CASE_P(NISTTestVector, GHashTest, + ::testing::ValuesIn(kGcmKatValues)); + +} // nss_test -- cgit v1.2.3