blob: 99a08b0863265d43fef50cad1dc8220a34c7af7f [file] [log] [blame]
// Copyright 2025 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/sha2.h"
#include <string>
#include "base/strings/string_number_conversions.h"
#include "util/test/test.h"
namespace base {
namespace {
std::string Sha256AsHexString(std::string_view in) {
std::array<uint8_t, kSha256Length> result = Sha256(in);
return HexEncode(result.data(), result.size());
}
TEST(Sha2Test, Basic) {
EXPECT_EQ("E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
Sha256AsHexString(""));
// Reference values from
// https://csrc.nist.gov/csrc/media/projects/cryptographic-standards-and-guidelines/documents/examples/sha256.pdf
EXPECT_EQ("BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD",
Sha256AsHexString("abc"));
EXPECT_EQ("248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1",
Sha256AsHexString(
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"));
// Additional tests from
// https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/examples/SHA2_Additional.pdf
EXPECT_EQ("68325720AABD7C82F30F554B313D0570C95ACCBB7DC4B5AAE11204C08FFE732B",
Sha256AsHexString("\xbd"));
EXPECT_EQ("7ABC22C0AE5AF26CE93DBB94433A0E0B2E119D014F8E7F65BD56C61CCCCD9504",
Sha256AsHexString("\xc9\x8c\x8e\x55"));
EXPECT_EQ("02779466CDEC163811D078815C633F21901413081449002F24AA3E80F0B88EF7",
Sha256AsHexString(std::string(55, '\0')));
EXPECT_EQ("D4817AA5497628E7C77E6B606107042BBBA3130888C5F47A375E6179BE789FBB",
Sha256AsHexString(std::string(56, '\0')));
EXPECT_EQ("65A16CB7861335D5ACE3C60718B5052E44660726DA4CD13BB745381B235A1785",
Sha256AsHexString(std::string(57, '\0')));
EXPECT_EQ("F5A5FD42D16A20302798EF6ED309979B43003D2320D9F0E8EA9831A92759FB4B",
Sha256AsHexString(std::string(64, '\0')));
EXPECT_EQ("541B3E9DAA09B20BF85FA273E5CBD3E80185AA4EC298E765DB87742B70138A53",
Sha256AsHexString(std::string(1000, '\0')));
EXPECT_EQ("C2E686823489CED2017F6059B8B239318B6364F6DCD835D0A519105A1EADD6E4",
Sha256AsHexString(std::string(1000, 'A')));
EXPECT_EQ("F4D62DDEC0F3DD90EA1380FA16A5FF8DC4C54B21740650F24AFC4120903552B0",
Sha256AsHexString(std::string(1005, 'U')));
EXPECT_EQ("D29751F2649B32FF572B5E0A9F541EA660A50F94FF0BEEDFB0B692B924CC8025",
Sha256AsHexString(std::string(1000000, '\0')));
}
} // namespace
} // namespace base