proxygen
HkdfTest.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018-present, Facebook, Inc.
3  * All rights reserved.
4  *
5  * This source code is licensed under the BSD-style license found in the
6  * LICENSE file in the root directory of this source tree.
7  */
8 
9 #include <gtest/gtest.h>
10 
11 #include <fizz/crypto/Hkdf.h>
12 #include <fizz/crypto/Sha256.h>
14 
15 using namespace testing;
16 using namespace folly;
17 
18 namespace fizz {
19 namespace test {
20 
21 struct HashParams {
25  size_t outputBytes;
27 };
28 
29 class HkdfTest : public ::testing::TestWithParam<HashParams> {};
30 
31 TEST_P(HkdfTest, TestHkdfSha256Expand) {
32  auto ikm = toIOBuf(GetParam().ikm);
33  auto salt = toIOBuf(GetParam().salt);
34  auto info = toIOBuf(GetParam().info);
35  size_t outputBytes = GetParam().outputBytes;
36  auto expectedOkm = toIOBuf(GetParam().okm);
37  CHECK_EQ(outputBytes, expectedOkm->length());
38 
39  auto actualOkm = HkdfImpl<Sha256>().hkdf(
40  ikm->coalesce(), salt->coalesce(), *info, outputBytes);
41  EXPECT_FALSE(actualOkm->isChained());
42  EXPECT_EQ(outputBytes, actualOkm->length());
43  EXPECT_FALSE(memcmp(actualOkm->data(), expectedOkm->data(), outputBytes));
44 }
45 
46 // Test cases from https://tools.ietf.org/html/rfc5869
48  TestVectors,
49  HkdfTest,
50  ::testing::Values(
51  HashParams{"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
52  "000102030405060708090a0b0c",
53  "f0f1f2f3f4f5f6f7f8f9",
54  42,
55  "3cb25f25faacd57a90434f64d0362f2a"
56  "2d2d0a90cf1a5a4c5db02d56ecc4c5bf"
57  "34007208d5b887185865"},
58  HashParams{"000102030405060708090a0b0c0d0e0f"
59  "101112131415161718191a1b1c1d1e1f"
60  "202122232425262728292a2b2c2d2e2f"
61  "303132333435363738393a3b3c3d3e3f"
62  "404142434445464748494a4b4c4d4e4f",
63  "606162636465666768696a6b6c6d6e6f"
64  "707172737475767778797a7b7c7d7e7f"
65  "808182838485868788898a8b8c8d8e8f"
66  "909192939495969798999a9b9c9d9e9f"
67  "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
68  "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
69  "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
70  "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
71  "e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
72  "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
73  82,
74  "b11e398dc80327a1c8e7f78c596a4934"
75  "4f012eda2d4efad8a050cc4c19afa97c"
76  "59045a99cac7827271cb41c65e590e09"
77  "da3275600c2f09b8367793a9aca3db71"
78  "cc30c58179ec3e87c14c01d5c1f3434f"
79  "1d87"},
80  HashParams{"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
81  "",
82  "",
83  42,
84  "8da4e775a563c18f715f802a063c5a31"
85  "b8a11f5c5ee1879ec3454e5f3c738d2d"
86  "9d201395faa4b61a96c8"}));
87 } // namespace test
88 } // namespace fizz
INSTANTIATE_TEST_CASE_P(, CodeLocationForTESTP, Values(0))
def info()
Definition: deadlock.py:447
std::unique_ptr< folly::IOBuf > toIOBuf(std::string hexData)
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
—— Concurrent Priority Queue Implementation ——
Definition: AtomicBitSet.h:29
TEST_P(CodeLocationForTESTP, Verify)
Definition: Actions.h:16
const char * string
Definition: Conv.cpp:212
#define EXPECT_FALSE(condition)
Definition: gtest.h:1862