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" |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
197 | 197 |
198 MD5Digest digest; | 198 MD5Digest digest; |
199 MD5Final(&digest, &ctx); | 199 MD5Final(&digest, &ctx); |
200 | 200 |
201 std::string actual = MD5DigestToBase16(digest); | 201 std::string actual = MD5DigestToBase16(digest); |
202 std::string expected = "900150983cd24fb0d6963f7d28e17f72"; | 202 std::string expected = "900150983cd24fb0d6963f7d28e17f72"; |
203 | 203 |
204 EXPECT_EQ(expected, actual); | 204 EXPECT_EQ(expected, actual); |
205 } | 205 } |
206 | 206 |
207 // Test that a digest generated by MD5IntermediateFinal() gives the same results | |
208 // as an independently-calculated digest, and also does not modify the context. | |
209 TEST(MD5, IntermediateFinal) { | |
210 // Independent context over the header. | |
211 MD5Context check_header_context; | |
212 MD5Init(&check_header_context); | |
213 | |
214 // Independent context over entire input. | |
215 MD5Context check_full_context; | |
216 MD5Init(&check_full_context); | |
217 | |
218 // Context intermediate digest will be calculated from. | |
219 MD5Context context; | |
220 MD5Init(&context); | |
221 | |
222 const char kHeader[] = "header data"; | |
awong
2014/03/31 20:22:19
static const char blah[]?
Scott Hess - ex-Googler
2014/03/31 20:48:26
Done.
| |
223 const char kBody[] = "payload data"; | |
224 | |
225 MD5Update(&context, kHeader); | |
226 MD5Update(&check_header_context, kHeader); | |
227 MD5Update(&check_full_context, kHeader); | |
228 | |
229 MD5Digest check_header_digest; | |
230 MD5Final(&check_header_digest, &check_header_context); | |
231 | |
232 MD5Digest header_digest; | |
233 MD5IntermediateFinal(&header_digest, &context); | |
234 | |
235 MD5Update(&context, kBody); | |
236 MD5Update(&check_full_context, kBody); | |
237 | |
238 MD5Digest check_full_digest; | |
239 MD5Final(&check_full_digest, &check_full_context); | |
240 | |
241 MD5Digest digest; | |
242 MD5Final(&digest, &context); | |
243 | |
244 // The header and full digest pairs are the same, and they aren't the same as | |
245 // each other. | |
246 EXPECT_TRUE(!memcmp(&header_digest, &check_header_digest, | |
247 sizeof(header_digest))); | |
248 EXPECT_TRUE(!memcmp(&digest, &check_full_digest, sizeof(digest))); | |
249 EXPECT_FALSE(!memcmp(&digest, &header_digest, sizeof(digest))); | |
250 } | |
251 | |
207 } // namespace base | 252 } // namespace base |
OLD | NEW |