88 lines
2.9 KiB
C++
88 lines
2.9 KiB
C++
/*
|
|
©AngelaMos | 2026
|
|
test_hashers.cpp
|
|
|
|
Tests for all four hash algorithm implementations against known vectors
|
|
|
|
Verifies MD5, SHA-1, SHA-256, and SHA-512 against NIST/RFC test vectors
|
|
for empty string and "password". Checks static name() and digest_length()
|
|
properties. Confirms deterministic output and non-empty results.
|
|
|
|
Connects to:
|
|
hash/MD5Hasher.hpp - MD5Hasher tested
|
|
hash/SHA1Hasher.hpp - SHA1Hasher tested
|
|
hash/SHA256Hasher.hpp - SHA256Hasher tested
|
|
hash/SHA512Hasher.hpp - SHA512Hasher tested
|
|
hash/EVPHasher.hpp - underlying implementation
|
|
*/
|
|
|
|
#include "src/hash/MD5Hasher.hpp"
|
|
#include "src/hash/SHA1Hasher.hpp"
|
|
#include "src/hash/SHA256Hasher.hpp"
|
|
#include "src/hash/SHA512Hasher.hpp"
|
|
#include <gtest/gtest.h>
|
|
|
|
TEST(SHA256HasherTest, KnownVectors) {
|
|
SHA256Hasher hasher;
|
|
EXPECT_EQ(hasher.hash(""), "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
|
|
EXPECT_EQ(hasher.hash("password"),
|
|
"5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8");
|
|
EXPECT_EQ(hasher.hash("hello"),
|
|
"2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824");
|
|
}
|
|
|
|
TEST(SHA256HasherTest, StaticProperties) {
|
|
EXPECT_EQ(SHA256Hasher::name(), "SHA256");
|
|
EXPECT_EQ(SHA256Hasher::digest_length(), 64);
|
|
}
|
|
|
|
TEST(SHA256HasherTest, Deterministic) {
|
|
SHA256Hasher hasher;
|
|
auto h1 = hasher.hash("test");
|
|
auto h2 = hasher.hash("test");
|
|
EXPECT_EQ(h1, h2);
|
|
}
|
|
|
|
TEST(MD5HasherTest, KnownVectors) {
|
|
MD5Hasher hasher;
|
|
EXPECT_EQ(hasher.hash(""), "d41d8cd98f00b204e9800998ecf8427e");
|
|
EXPECT_EQ(hasher.hash("password"), "5f4dcc3b5aa765d61d8327deb882cf99");
|
|
}
|
|
|
|
TEST(MD5HasherTest, StaticProperties) {
|
|
EXPECT_EQ(MD5Hasher::name(), "MD5");
|
|
EXPECT_EQ(MD5Hasher::digest_length(), 32);
|
|
}
|
|
|
|
TEST(SHA1HasherTest, KnownVectors) {
|
|
SHA1Hasher hasher;
|
|
EXPECT_EQ(hasher.hash(""), "da39a3ee5e6b4b0d3255bfef95601890afd80709");
|
|
EXPECT_EQ(hasher.hash("password"), "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8");
|
|
}
|
|
|
|
TEST(SHA1HasherTest, StaticProperties) {
|
|
EXPECT_EQ(SHA1Hasher::name(), "SHA1");
|
|
EXPECT_EQ(SHA1Hasher::digest_length(), 40);
|
|
}
|
|
|
|
TEST(SHA512HasherTest, KnownVectors) {
|
|
SHA512Hasher hasher;
|
|
EXPECT_EQ(hasher.hash(""), "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce"
|
|
"47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e");
|
|
EXPECT_EQ(hasher.hash("password"),
|
|
"b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb9"
|
|
"80b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86");
|
|
}
|
|
|
|
TEST(SHA512HasherTest, StaticProperties) {
|
|
EXPECT_EQ(SHA512Hasher::name(), "SHA512");
|
|
EXPECT_EQ(SHA512Hasher::digest_length(), 128);
|
|
}
|
|
|
|
TEST(HasherTest, NeverReturnsEmpty) {
|
|
EXPECT_FALSE(MD5Hasher{}.hash("test").empty());
|
|
EXPECT_FALSE(SHA1Hasher{}.hash("test").empty());
|
|
EXPECT_FALSE(SHA256Hasher{}.hash("test").empty());
|
|
EXPECT_FALSE(SHA512Hasher{}.hash("test").empty());
|
|
}
|