OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string.h> | 5 #include <string.h> |
6 #include <string> | 6 #include <string> |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/md5.h" | 10 #include "base/md5.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 | 12 |
13 namespace base { | 13 namespace base { |
14 | 14 |
15 TEST(MD5, DigestToBase16) { | 15 TEST(MD5, DigestToBase16) { |
16 MD5Digest digest; | 16 MD5Digest digest; |
17 | 17 |
18 int data[] = { | 18 int data[] = { |
19 0xd4, 0x1d, 0x8c, 0xd9, | 19 0xd4, 0x1d, 0x8c, 0xd9, |
20 0x8f, 0x00, 0xb2, 0x04, | 20 0x8f, 0x00, 0xb2, 0x04, |
21 0xe9, 0x80, 0x09, 0x98, | 21 0xe9, 0x80, 0x09, 0x98, |
22 0xec, 0xf8, 0x42, 0x7e | 22 0xec, 0xf8, 0x42, 0x7e |
23 }; | 23 }; |
24 | 24 |
25 for (int i = 0; i < 16; ++i) | 25 for (int i = 0; i < 16; ++i) |
26 digest.a[i] = data[i] & 0xff; | 26 digest[i] = data[i] & 0xff; |
27 | 27 |
28 std::string actual = MD5DigestToBase16(digest); | 28 std::string actual = MD5DigestToBase16(digest); |
29 std::string expected = "d41d8cd98f00b204e9800998ecf8427e"; | 29 std::string expected = "d41d8cd98f00b204e9800998ecf8427e"; |
30 | 30 |
31 EXPECT_EQ(expected, actual); | 31 EXPECT_EQ(expected, actual); |
32 } | 32 } |
33 | 33 |
34 TEST(MD5, MD5SumEmtpyData) { | 34 TEST(MD5, MD5SumEmtpyData) { |
35 MD5Digest digest; | 35 MD5Digest digest; |
36 const char data[] = ""; | 36 const char data[] = ""; |
37 | 37 |
38 MD5Sum(data, strlen(data), &digest); | 38 MD5Sum(data, strlen(data), &digest); |
39 | 39 |
40 int expected[] = { | 40 int expected[] = { |
41 0xd4, 0x1d, 0x8c, 0xd9, | 41 0xd4, 0x1d, 0x8c, 0xd9, |
42 0x8f, 0x00, 0xb2, 0x04, | 42 0x8f, 0x00, 0xb2, 0x04, |
43 0xe9, 0x80, 0x09, 0x98, | 43 0xe9, 0x80, 0x09, 0x98, |
44 0xec, 0xf8, 0x42, 0x7e | 44 0xec, 0xf8, 0x42, 0x7e |
45 }; | 45 }; |
46 | 46 |
47 for (int i = 0; i < 16; ++i) | 47 for (int i = 0; i < 16; ++i) |
48 EXPECT_EQ(expected[i], digest.a[i] & 0xFF); | 48 EXPECT_EQ(expected[i], digest[i] & 0xFF); |
49 } | 49 } |
50 | 50 |
51 TEST(MD5, MD5SumOneByteData) { | 51 TEST(MD5, MD5SumOneByteData) { |
52 MD5Digest digest; | 52 MD5Digest digest; |
53 const char data[] = "a"; | 53 const char data[] = "a"; |
54 | 54 |
55 MD5Sum(data, strlen(data), &digest); | 55 MD5Sum(data, strlen(data), &digest); |
56 | 56 |
57 int expected[] = { | 57 int expected[] = { |
58 0x0c, 0xc1, 0x75, 0xb9, | 58 0x0c, 0xc1, 0x75, 0xb9, |
59 0xc0, 0xf1, 0xb6, 0xa8, | 59 0xc0, 0xf1, 0xb6, 0xa8, |
60 0x31, 0xc3, 0x99, 0xe2, | 60 0x31, 0xc3, 0x99, 0xe2, |
61 0x69, 0x77, 0x26, 0x61 | 61 0x69, 0x77, 0x26, 0x61 |
62 }; | 62 }; |
63 | 63 |
64 for (int i = 0; i < 16; ++i) | 64 for (int i = 0; i < 16; ++i) |
65 EXPECT_EQ(expected[i], digest.a[i] & 0xFF); | 65 EXPECT_EQ(expected[i], digest[i] & 0xFF); |
66 } | 66 } |
67 | 67 |
68 TEST(MD5, MD5SumLongData) { | 68 TEST(MD5, MD5SumLongData) { |
69 const int length = 10 * 1024 * 1024 + 1; | 69 const int length = 10 * 1024 * 1024 + 1; |
70 scoped_ptr<char[]> data(new char[length]); | 70 scoped_ptr<char[]> data(new char[length]); |
71 | 71 |
72 for (int i = 0; i < length; ++i) | 72 for (int i = 0; i < length; ++i) |
73 data[i] = i & 0xFF; | 73 data[i] = i & 0xFF; |
74 | 74 |
75 MD5Digest digest; | 75 MD5Digest digest; |
76 MD5Sum(data.get(), length, &digest); | 76 MD5Sum(data.get(), length, &digest); |
77 | 77 |
78 int expected[] = { | 78 int expected[] = { |
79 0x90, 0xbd, 0x6a, 0xd9, | 79 0x90, 0xbd, 0x6a, 0xd9, |
80 0x0a, 0xce, 0xf5, 0xad, | 80 0x0a, 0xce, 0xf5, 0xad, |
81 0xaa, 0x92, 0x20, 0x3e, | 81 0xaa, 0x92, 0x20, 0x3e, |
82 0x21, 0xc7, 0xa1, 0x3e | 82 0x21, 0xc7, 0xa1, 0x3e |
83 }; | 83 }; |
84 | 84 |
85 for (int i = 0; i < 16; ++i) | 85 for (int i = 0; i < 16; ++i) |
86 EXPECT_EQ(expected[i], digest.a[i] & 0xFF); | 86 EXPECT_EQ(expected[i], digest[i] & 0xFF); |
87 } | 87 } |
88 | 88 |
89 TEST(MD5, ContextWithEmptyData) { | 89 TEST(MD5, ContextWithEmptyData) { |
90 MD5Context ctx; | 90 MD5Context ctx; |
91 MD5Init(&ctx); | 91 MD5Init(&ctx); |
92 | 92 |
93 MD5Digest digest; | 93 MD5Digest digest; |
94 MD5Final(&digest, &ctx); | 94 MD5Final(&digest, &ctx); |
95 | 95 |
96 int expected[] = { | 96 int expected[] = { |
97 0xd4, 0x1d, 0x8c, 0xd9, | 97 0xd4, 0x1d, 0x8c, 0xd9, |
98 0x8f, 0x00, 0xb2, 0x04, | 98 0x8f, 0x00, 0xb2, 0x04, |
99 0xe9, 0x80, 0x09, 0x98, | 99 0xe9, 0x80, 0x09, 0x98, |
100 0xec, 0xf8, 0x42, 0x7e | 100 0xec, 0xf8, 0x42, 0x7e |
101 }; | 101 }; |
102 | 102 |
103 for (int i = 0; i < 16; ++i) | 103 for (int i = 0; i < 16; ++i) |
104 EXPECT_EQ(expected[i], digest.a[i] & 0xFF); | 104 EXPECT_EQ(expected[i], digest[i] & 0xFF); |
105 } | 105 } |
106 | 106 |
107 TEST(MD5, ContextWithLongData) { | 107 TEST(MD5, ContextWithLongData) { |
108 MD5Context ctx; | 108 MD5Context ctx; |
109 MD5Init(&ctx); | 109 MD5Init(&ctx); |
110 | 110 |
111 const int length = 10 * 1024 * 1024 + 1; | 111 const int length = 10 * 1024 * 1024 + 1; |
112 scoped_ptr<char[]> data(new char[length]); | 112 scoped_ptr<char[]> data(new char[length]); |
113 | 113 |
114 for (int i = 0; i < length; ++i) | 114 for (int i = 0; i < length; ++i) |
(...skipping 16 matching lines...) Expand all Loading... |
131 MD5Final(&digest, &ctx); | 131 MD5Final(&digest, &ctx); |
132 | 132 |
133 int expected[] = { | 133 int expected[] = { |
134 0x90, 0xbd, 0x6a, 0xd9, | 134 0x90, 0xbd, 0x6a, 0xd9, |
135 0x0a, 0xce, 0xf5, 0xad, | 135 0x0a, 0xce, 0xf5, 0xad, |
136 0xaa, 0x92, 0x20, 0x3e, | 136 0xaa, 0x92, 0x20, 0x3e, |
137 0x21, 0xc7, 0xa1, 0x3e | 137 0x21, 0xc7, 0xa1, 0x3e |
138 }; | 138 }; |
139 | 139 |
140 for (int i = 0; i < 16; ++i) | 140 for (int i = 0; i < 16; ++i) |
141 EXPECT_EQ(expected[i], digest.a[i] & 0xFF); | 141 EXPECT_EQ(expected[i], digest[i] & 0xFF); |
142 } | 142 } |
143 | 143 |
144 // Example data from http://www.ietf.org/rfc/rfc1321.txt A.5 Test Suite | 144 // Example data from http://www.ietf.org/rfc/rfc1321.txt A.5 Test Suite |
145 TEST(MD5, MD5StringTestSuite1) { | 145 TEST(MD5, MD5StringTestSuite1) { |
146 std::string actual = MD5String(""); | 146 std::string actual = MD5String(""); |
147 std::string expected = "d41d8cd98f00b204e9800998ecf8427e"; | 147 std::string expected = "d41d8cd98f00b204e9800998ecf8427e"; |
148 EXPECT_EQ(expected, actual); | 148 EXPECT_EQ(expected, actual); |
149 } | 149 } |
150 | 150 |
151 TEST(MD5, MD5StringTestSuite2) { | 151 TEST(MD5, MD5StringTestSuite2) { |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 | 243 |
244 // The header and full digest pairs are the same, and they aren't the same as | 244 // The header and full digest pairs are the same, and they aren't the same as |
245 // each other. | 245 // each other. |
246 EXPECT_TRUE(!memcmp(&header_digest, &check_header_digest, | 246 EXPECT_TRUE(!memcmp(&header_digest, &check_header_digest, |
247 sizeof(header_digest))); | 247 sizeof(header_digest))); |
248 EXPECT_TRUE(!memcmp(&digest, &check_full_digest, sizeof(digest))); | 248 EXPECT_TRUE(!memcmp(&digest, &check_full_digest, sizeof(digest))); |
249 EXPECT_FALSE(!memcmp(&digest, &header_digest, sizeof(digest))); | 249 EXPECT_FALSE(!memcmp(&digest, &header_digest, sizeof(digest))); |
250 } | 250 } |
251 | 251 |
252 } // namespace base | 252 } // namespace base |
OLD | NEW |