14 CHECK(
sum.toString() ==
"0000000000000000000000000000000000000000");
17 SECTION(
"from string, ok") {
18 Sha1Sum sum(
"1234567890123456789012345678901234567890");
20 CHECK(
sum.toString() ==
"1234567890123456789012345678901234567890");
22 SECTION(
"from string, too short") {
23 CHECK_THROWS(
Sha1Sum(
"123456789012345678901234567890123456789"));
25 SECTION(
"from string, too long") {
26 CHECK_THROWS(
Sha1Sum(
"12345678901234567890123456789012345678901"));
28 SECTION(
"from string, invalid char") {
29 CHECK_THROWS(
Sha1Sum(
"g234567890123456789012345678901234567890"));
39 sum.parse40(
"abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd");
40 CHECK(
sum.toString() ==
"abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd");
42 SECTION(
"invalid char") {
43 CHECK_THROWS(
sum.parse40(
"abcdabcdabcdabcdabcdabcdabcdabcd-bcdabcd"));
49 Sha1Sum sum(
"1111111111111111111111111111111111111111");
50 REQUIRE(!
sum.empty());
51 REQUIRE(
sum.toString() !=
"0000000000000000000000000000000000000000");
55 CHECK(
sum.toString() ==
"0000000000000000000000000000000000000000");
58 static void testCompare(
const Sha1Sum&
x,
const Sha1Sum& y,
bool expectEqual,
bool expectLess)
88 Sha1Sum sumA (
"0000000000000000000000000000000000000000");
89 Sha1Sum sumB (
"0000000000000000000000000000000000000001");
90 Sha1Sum sumB2(
"0000000000000000000000000000000000000001");
91 Sha1Sum sumC (
"0000000000100000000000000000000000000001");
93 testCompare(sumB, sumB2,
true,
false);
94 testCompare(sumA, sumB,
false,
true);
95 testCompare(sumC, sumB,
false,
false);
100 Sha1Sum sum(
"abcdef0123ABCDEF0123abcdef0123ABCDEF0123");
101 std::stringstream ss;
103 CHECK(ss.str() ==
"abcdef0123abcdef0123abcdef0123abcdef0123");
109 const char* in =
"abc";
111 CHECK(output.
toString() ==
"a9993e364706816aba3e25717850c26c9cd0d89d");
117 SECTION(
"single block") {
118 const char* in =
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
119 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), strlen(in)});
123 CHECK(sum1.
toString() ==
"84983e441c3bd26ebaae4aa1f95129e5e54670f1");
125 SECTION(
"multiple blocks") {
126 const char* in =
"aaaaaaaaaaaaaaaaaaaaaaaaa";
127 REQUIRE(strlen(in) == 25);
129 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), strlen(in)});
133 CHECK(
sum.toString() ==
"34aa973cd4c4daa4f61eeb2bdbad27316534016f");
141 const char* in =
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
142 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
144 sha1.
update({
reinterpret_cast<const uint8_t*
>(in),
size_t(0)});
146 CHECK(
sum.toString() ==
"da39a3ee5e6b4b0d3255bfef95601890afd80709");
149 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 25});
151 CHECK(
sum.toString() ==
"44f4647e1542a79d7d68ceb7f75d1dbf77fdebfc");
154 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 55});
156 CHECK(
sum.toString() ==
"c1c8bbdc22796e28c0e15163d20899b65621d65a");
159 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 56});
161 CHECK(
sum.toString() ==
"c2db330f6083854c99d4b5bfb6e8f29f201be699");
164 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 60});
166 CHECK(
sum.toString() ==
"13d956033d9af449bfe2c4ef78c17c20469c4bf1");
169 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 63});
171 CHECK(
sum.toString() ==
"03f09f5b158a7a8cdad920bddc29b81c18a551f5");
174 sha1.
update({
reinterpret_cast<const uint8_t*
>(in), 64});
176 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.
static Sha1Sum calc(std::span< const uint8_t > data)
Easier to use interface, if you can pass all data in one go.
This class represents the result of a sha1 calculation (a 160-bit value).
std::string toString() const
This file implemented 3 utility functions:
constexpr KeyMatrixPosition x
Keyboard bindings.
auto sum(InputRange &&range, Proj proj={})
TEST_CASE("Sha1Sum: constructors")
constexpr void repeat(T n, Op op)
Repeat the given operation 'op' 'n' times.