1 #include "MessageDigest.h"
2
3 #include <cppunit/extensions/HelperMacros.h>
4
5 #include "util.h"
6
7 namespace aria2 {
8
9 class MessageDigestTest : public CppUnit::TestFixture {
10
11 CPPUNIT_TEST_SUITE(MessageDigestTest);
12 CPPUNIT_TEST(testDigest);
13 CPPUNIT_TEST(testSupports);
14 CPPUNIT_TEST(testGetDigestLength);
15 CPPUNIT_TEST(testIsStronger);
16 CPPUNIT_TEST(testIsValidHash);
17 CPPUNIT_TEST(testGetCanonicalHashType);
18 CPPUNIT_TEST_SUITE_END();
19
20 std::unique_ptr<MessageDigest> sha1_;
21 std::unique_ptr<MessageDigest> md5_;
22 std::unique_ptr<MessageDigest> adler32_;
23
24 public:
setUp()25 void setUp()
26 {
27 md5_ = MessageDigest::create("md5");
28 sha1_ = MessageDigest::sha1();
29 #ifdef HAVE_ZLIB
30 adler32_ = MessageDigest::create("adler32");
31 #endif // HAVE_ZLIB
32 }
33
34 void testDigest();
35 void testSupports();
36 void testGetDigestLength();
37 void testIsStronger();
38 void testIsValidHash();
39 void testGetCanonicalHashType();
40 };
41
42 CPPUNIT_TEST_SUITE_REGISTRATION(MessageDigestTest);
43
testDigest()44 void MessageDigestTest::testDigest()
45 {
46 md5_->update("aria2", 5);
47 CPPUNIT_ASSERT_EQUAL(std::string("2c90cadbef42945f0dcff2b959977ff8"),
48 util::toHex(md5_->digest()));
49 md5_->reset();
50 md5_->update("abc", 3);
51 CPPUNIT_ASSERT_EQUAL(std::string("900150983cd24fb0d6963f7d28e17f72"),
52 util::toHex(md5_->digest()));
53
54 sha1_->update("aria2", 5);
55 CPPUNIT_ASSERT_EQUAL(std::string("f36003f22b462ffa184390533c500d8989e9f681"),
56 util::toHex(sha1_->digest()));
57 sha1_->reset();
58 sha1_->update("abc", 3);
59 CPPUNIT_ASSERT_EQUAL(std::string("a9993e364706816aba3e25717850c26c9cd0d89d"),
60 util::toHex(sha1_->digest()));
61
62 #ifdef HAVE_ZLIB
63 adler32_->reset();
64 adler32_->update("aria2", 5);
65 CPPUNIT_ASSERT_EQUAL(std::string("05e101d0"),
66 util::toHex(adler32_->digest()));
67
68 adler32_->reset();
69 adler32_->update("abc", 3);
70 CPPUNIT_ASSERT_EQUAL(std::string("024d0127"),
71 util::toHex(adler32_->digest()));
72 #endif // HAVE_ZLIB
73 }
74
testSupports()75 void MessageDigestTest::testSupports()
76 {
77 CPPUNIT_ASSERT(MessageDigest::supports("md5"));
78 CPPUNIT_ASSERT(MessageDigest::supports("sha-1"));
79 // Fails because sha1 is not valid name.
80 CPPUNIT_ASSERT(!MessageDigest::supports("sha1"));
81 }
82
testGetDigestLength()83 void MessageDigestTest::testGetDigestLength()
84 {
85 CPPUNIT_ASSERT_EQUAL((size_t)16, MessageDigest::getDigestLength("md5"));
86 CPPUNIT_ASSERT_EQUAL((size_t)20, MessageDigest::getDigestLength("sha-1"));
87 CPPUNIT_ASSERT_EQUAL((size_t)20, sha1_->getDigestLength());
88 }
89
testIsStronger()90 void MessageDigestTest::testIsStronger()
91 {
92 CPPUNIT_ASSERT(MessageDigest::isStronger("sha-1", "md5"));
93 CPPUNIT_ASSERT(!MessageDigest::isStronger("md5", "sha-1"));
94 CPPUNIT_ASSERT(!MessageDigest::isStronger("unknown", "sha-1"));
95 CPPUNIT_ASSERT(MessageDigest::isStronger("sha-1", "unknown"));
96 }
97
testIsValidHash()98 void MessageDigestTest::testIsValidHash()
99 {
100 CPPUNIT_ASSERT(MessageDigest::isValidHash(
101 "sha-1", "f36003f22b462ffa184390533c500d8989e9f681"));
102 CPPUNIT_ASSERT(
103 !MessageDigest::isValidHash("sha-1", "f36003f22b462ffa184390533c500d89"));
104 }
105
testGetCanonicalHashType()106 void MessageDigestTest::testGetCanonicalHashType()
107 {
108 CPPUNIT_ASSERT_EQUAL(std::string("sha-1"),
109 MessageDigest::getCanonicalHashType("sha1"));
110 CPPUNIT_ASSERT_EQUAL(std::string("sha-256"),
111 MessageDigest::getCanonicalHashType("sha256"));
112 CPPUNIT_ASSERT_EQUAL(std::string("unknown"),
113 MessageDigest::getCanonicalHashType("unknown"));
114 }
115
116 } // namespace aria2
117