Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Side by Side Diff: crypto/ghash_unittest.cc

Issue 19619003: net: fix buffer overflow in GHASH. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « crypto/ghash.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "crypto/ghash.h" 5 #include "crypto/ghash.h"
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 namespace crypto { 9 namespace crypto {
10 10
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 GaloisHash hash(test.key); 110 GaloisHash hash(test.key);
111 if (test.additional_length) 111 if (test.additional_length)
112 hash.UpdateAdditional(test.additional, test.additional_length); 112 hash.UpdateAdditional(test.additional, test.additional_length);
113 if (test.ciphertext_length) 113 if (test.ciphertext_length)
114 hash.UpdateCiphertext(test.ciphertext, test.ciphertext_length); 114 hash.UpdateCiphertext(test.ciphertext, test.ciphertext_length);
115 hash.Finish(out, sizeof(out)); 115 hash.Finish(out, sizeof(out));
116 EXPECT_TRUE(0 == memcmp(out, test.expected, 16)); 116 EXPECT_TRUE(0 == memcmp(out, test.expected, 16));
117 } 117 }
118 } 118 }
119 119
120 TEST(GaloisHash, TestCasesByteAtATime) { 120 TEST(GaloisHash, VaryLengths) {
121 uint8 out[16]; 121 uint8 out[16];
122 122
123 for (size_t i = 0; i < arraysize(kTestCases); ++i) { 123 for (size_t chunk_size = 1; chunk_size < 16; chunk_size++) {
124 const TestCase& test = kTestCases[i]; 124 for (size_t i = 0; i < arraysize(kTestCases); ++i) {
125 const TestCase& test = kTestCases[i];
125 126
126 GaloisHash hash(test.key); 127 GaloisHash hash(test.key);
127 for (size_t i = 0; i < test.additional_length; ++i) 128 for (size_t i = 0; i < test.additional_length;) {
128 hash.UpdateAdditional(test.additional + i, 1); 129 size_t n = std::min(test.additional_length - i, chunk_size);
129 for (size_t i = 0; i < test.ciphertext_length; ++i) 130 hash.UpdateAdditional(test.additional + i, n);
130 hash.UpdateCiphertext(test.ciphertext + i, 1); 131 i += n;
131 hash.Finish(out, sizeof(out)); 132 }
132 EXPECT_TRUE(0 == memcmp(out, test.expected, 16)); 133 for (size_t i = 0; i < test.ciphertext_length;) {
134 size_t n = std::min(test.ciphertext_length - i, chunk_size);
135 hash.UpdateCiphertext(test.ciphertext + i, n);
136 i += n;
137 }
138 hash.Finish(out, sizeof(out));
139 EXPECT_TRUE(0 == memcmp(out, test.expected, 16));
140 }
133 } 141 }
134 } 142 }
135 143
136 } // namespace 144 } // namespace
137 145
138 } // namespace crypto 146 } // namespace crypto
OLDNEW
« no previous file with comments | « crypto/ghash.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698