tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

HMACTest.cpp (1816B)


      1 #include <string>
      2 #include "gtest/gtest.h"
      3 
      4 #include "ScopedNSSTypes.h"
      5 #include "mozilla/gtest/MozAssertions.h"
      6 #include "mozilla/Span.h"
      7 #include "nss.h"
      8 #include "secoidt.h"
      9 
     10 // From RFC 2202
     11 const unsigned char kTestKey[] = "Jefe";
     12 const unsigned char kTestInput[] = "what do ya want for nothing?";
     13 
     14 struct HMACTestCase {
     15  SECOidTag hashAlg;
     16  std::string expectedOutput;
     17 };
     18 
     19 #define EXPECTED_RESULT(val) std::string(val, sizeof(val) - 1)
     20 
     21 MOZ_RUNINIT static const HMACTestCase HMACTestCases[] = {
     22    {
     23        SEC_OID_MD5,
     24        EXPECTED_RESULT(
     25            "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7\x38"),
     26    },
     27    {
     28        SEC_OID_SHA256,
     29        EXPECTED_RESULT(
     30            "\x5b\xdc\xc1\x46\xbf\x60\x75\x4e\x6a\x04\x24\x26\x08\x95\x75\xc7"
     31            "\x5a\x00\x3f\x08\x9d\x27\x39\x83\x9d\xec\x58\xb9\x64\xec\x38\x43"),
     32    },
     33 };
     34 
     35 #undef EXPECTED_RESULT
     36 
     37 class psm_HMAC : public ::testing::Test,
     38                 public ::testing::WithParamInterface<HMACTestCase> {
     39 public:
     40  void SetUp() override { NSS_NoDB_Init(nullptr); }
     41 };
     42 
     43 TEST_P(psm_HMAC, Test) {
     44  mozilla::HMAC hmac;
     45  const HMACTestCase& testCase(GetParam());
     46  nsresult rv = hmac.Begin(testCase.hashAlg,
     47                           mozilla::Span(kTestKey, sizeof(kTestKey) - 1));
     48  ASSERT_NS_SUCCEEDED(rv);
     49  rv = hmac.Update(reinterpret_cast<const unsigned char*>(kTestInput),
     50                   sizeof(kTestInput) - 1);
     51  ASSERT_NS_SUCCEEDED(rv);
     52  nsTArray<uint8_t> output;
     53  rv = hmac.End(output);
     54  ASSERT_NS_SUCCEEDED(rv);
     55  EXPECT_EQ(output.Length(), testCase.expectedOutput.length());
     56  for (size_t i = 0; i < output.Length(); i++) {
     57    EXPECT_EQ(char(output[i]), testCase.expectedOutput[i]);
     58  }
     59 }
     60 
     61 INSTANTIATE_TEST_SUITE_P(psm_HMAC, psm_HMAC,
     62                         ::testing::ValuesIn(HMACTestCases));