| 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 |