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