diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-02-06 11:46:26 +0100 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-02-06 11:46:26 +0100 |
commit | f017b749ea9f1586d2308504553d40bf4cc5439d (patch) | |
tree | c6033924a0de9be1ab140596e305898c651bf57e /security/nss/gtests/freebl_gtest/ghash_unittest.cc | |
parent | 7c728b3c7680662fc4e92b5d03697b8339560b08 (diff) | |
download | UXP-f017b749ea9f1586d2308504553d40bf4cc5439d.tar UXP-f017b749ea9f1586d2308504553d40bf4cc5439d.tar.gz UXP-f017b749ea9f1586d2308504553d40bf4cc5439d.tar.lz UXP-f017b749ea9f1586d2308504553d40bf4cc5439d.tar.xz UXP-f017b749ea9f1586d2308504553d40bf4cc5439d.zip |
Update NSS to 3.32.1-RTM
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 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<gcm_kat_value> { + protected: + void TestGHash(const gcm_kat_value 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_CASE_P(NISTTestVector, GHashTest, + ::testing::ValuesIn(kGcmKatValues)); + +} // nss_test |