15 CHECK(
sum.toString() ==
"0000000000000000000000000000000000000000");
18 SECTION(
"from string, ok") {
19 Sha1Sum sum(
"1234567890123456789012345678901234567890");
21 CHECK(
sum.toString() ==
"1234567890123456789012345678901234567890");
23 SECTION(
"from string, too short") {
24 CHECK_THROWS(
Sha1Sum(
"123456789012345678901234567890123456789"));
26 SECTION(
"from string, too long") {
27 CHECK_THROWS(
Sha1Sum(
"12345678901234567890123456789012345678901"));
29 SECTION(
"from string, invalid char") {
30 CHECK_THROWS(
Sha1Sum(
"g234567890123456789012345678901234567890"));
40 sum.parse40(subspan<40>(
"abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"));
41 CHECK(
sum.toString() ==
"abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd");
43 SECTION(
"invalid char") {
44 CHECK_THROWS(
sum.parse40(subspan<40>(
"abcdabcdabcdabcdabcdabcdabcdabcd-bcdabcd")));
50 Sha1Sum sum(
"1111111111111111111111111111111111111111");
51 REQUIRE(!
sum.empty());
52 REQUIRE(
sum.toString() !=
"0000000000000000000000000000000000000000");
56 CHECK(
sum.toString() ==
"0000000000000000000000000000000000000000");
59static void testCompare(
const Sha1Sum& x,
const Sha1Sum& y,
bool expectEqual,
bool expectLess)
89 Sha1Sum sumA (
"0000000000000000000000000000000000000000");
90 Sha1Sum sumB (
"0000000000000000000000000000000000000001");
91 Sha1Sum sumB2(
"0000000000000000000000000000000000000001");
92 Sha1Sum sumC (
"0000000000100000000000000000000000000001");
94 testCompare(sumB, sumB2,
true,
false);
95 testCompare(sumA, sumB,
false,
true);
96 testCompare(sumC, sumB,
false,
false);
101 Sha1Sum sum(
"abcdef0123ABCDEF0123abcdef0123ABCDEF0123");
102 std::stringstream ss;
104 CHECK(ss.str() ==
"abcdef0123abcdef0123abcdef0123abcdef0123");
110 const char* in =
"abc";
111 Sha1Sum output = SHA1::calc({
reinterpret_cast<const uint8_t*
>(in), strlen(in)});
112 CHECK(output.
toString() ==
"a9993e364706816aba3e25717850c26c9cd0d89d");
118 SECTION(
"single block") {
119 const char* in =
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
120 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), strlen(in)});
124 CHECK(sum1.
toString() ==
"84983e441c3bd26ebaae4aa1f95129e5e54670f1");
126 SECTION(
"multiple blocks") {
127 const char* in =
"aaaaaaaaaaaaaaaaaaaaaaaaa";
128 REQUIRE(strlen(in) == 25);
130 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), strlen(in)});
134 CHECK(
sum.toString() ==
"34aa973cd4c4daa4f61eeb2bdbad27316534016f");
142 const char* in =
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
143 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
145 sha1.
update({
reinterpret_cast<const uint8_t*
>(in),
size_t(0)});
147 CHECK(
sum.toString() ==
"da39a3ee5e6b4b0d3255bfef95601890afd80709");
150 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 25});
152 CHECK(
sum.toString() ==
"44f4647e1542a79d7d68ceb7f75d1dbf77fdebfc");
155 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 55});
157 CHECK(
sum.toString() ==
"c1c8bbdc22796e28c0e15163d20899b65621d65a");
160 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 56});
162 CHECK(
sum.toString() ==
"c2db330f6083854c99d4b5bfb6e8f29f201be699");
165 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 60});
167 CHECK(
sum.toString() ==
"13d956033d9af449bfe2c4ef78c17c20469c4bf1");
170 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 63});
172 CHECK(
sum.toString() ==
"03f09f5b158a7a8cdad920bddc29b81c18a551f5");
175 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 64});
177 CHECK(
sum.toString() ==
"0098ba824b5c16427bd7a1122a5a442a25ec644d");
Helper class to perform a sha1 calculation.
Sha1Sum digest()
Get the final hash.
void update(std::span< const uint8_t > data)
Incrementally calculate the hash value.
This class represents the result of a sha1 calculation (a 160-bit value).
std::string toString() const
This file implemented 3 utility functions:
auto sum(InputRange &&range, Proj proj={})
TEST_CASE("Sha1Sum: constructors")
constexpr void repeat(T n, Op op)
Repeat the given operation 'op' 'n' times.