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

Side by Side Diff: net/quic/crypto/channel_id_test.cc

Issue 54043003: Remove some duplicate code in quic tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add a "u" to constant to prevent signed/unsigned warning Created 7 years, 1 month 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 | « net/quic/crypto/aes_128_gcm_12_encrypter_test.cc ('k') | net/quic/test_tools/quic_test_utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "net/quic/crypto/channel_id.h" 5 #include "net/quic/crypto/channel_id.h"
6 6
7 #include "net/quic/test_tools/crypto_test_utils.h" 7 #include "net/quic/test_tools/crypto_test_utils.h"
8 #include "net/quic/test_tools/quic_test_utils.h"
8 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
9 10
10 using base::StringPiece; 11 using base::StringPiece;
11 using std::string; 12 using std::string;
12 13
13 namespace net { 14 namespace net {
14 namespace test { 15 namespace test {
15 16
16 namespace { 17 namespace {
17 18
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 "03c7e0d628e50736c7512df0acfa9f2320bd102229f46495ae6d0857cc452a84", 179 "03c7e0d628e50736c7512df0acfa9f2320bd102229f46495ae6d0857cc452a84",
179 "2d98ea01f754d34bbc3003df5050200abf445ec728556d7ed7d5c54c55552b6d", 180 "2d98ea01f754d34bbc3003df5050200abf445ec728556d7ed7d5c54c55552b6d",
180 "9b52672742d637a32add056dfd6d8792f2a33c2e69dafabea09b960bc61e230a", 181 "9b52672742d637a32add056dfd6d8792f2a33c2e69dafabea09b960bc61e230a",
181 "06108e525f845d0155bf60193222b3219c98e3d49424c2fb2a0987f825c17959", 182 "06108e525f845d0155bf60193222b3219c98e3d49424c2fb2a0987f825c17959",
182 "62b5cdd591e5b507e560167ba8f6f7cda74673eb315680cb89ccbc4eec477dce", 183 "62b5cdd591e5b507e560167ba8f6f7cda74673eb315680cb89ccbc4eec477dce",
183 true // P (0 ) 184 true // P (0 )
184 }, 185 },
185 { NULL } 186 { NULL }
186 }; 187 };
187 188
188 // Returns true if |ch| is a lowercase hexadecimal digit.
189 bool IsHexDigit(char ch) {
190 return ('0' <= ch && ch <= '9') || ('a' <= ch && ch <= 'f');
191 }
192
193 // Converts a lowercase hexadecimal digit to its integer value.
194 int HexDigitToInt(char ch) {
195 if ('0' <= ch && ch <= '9') {
196 return ch - '0';
197 }
198 return ch - 'a' + 10;
199 }
200
201 // |in| is a string consisting of lowercase hexadecimal digits, where
202 // every two digits represent one byte. |out| is a buffer of size |max_len|.
203 // Converts |in| to bytes and stores the bytes in the |out| buffer. The
204 // number of bytes converted is returned in |*out_len|. Returns true on
205 // success, false on failure.
206 bool DecodeHexString(const char* in,
207 char* out,
208 size_t* out_len,
209 size_t max_len) {
210 if (!in) {
211 *out_len = (size_t)-1;
212 return true;
213 }
214 *out_len = 0;
215 while (*in != '\0') {
216 if (!IsHexDigit(*in) || !IsHexDigit(*(in + 1))) {
217 return false;
218 }
219 if (*out_len >= max_len) {
220 return false;
221 }
222 out[*out_len] = HexDigitToInt(*in) * 16 + HexDigitToInt(*(in + 1));
223 (*out_len)++;
224 in += 2;
225 }
226 return true;
227 }
228
229 } // namespace 189 } // namespace
230 190
231 // A known answer test for ChannelIDVerifier. 191 // A known answer test for ChannelIDVerifier.
232 TEST(ChannelIDTest, VerifyKnownAnswerTest) { 192 TEST(ChannelIDTest, VerifyKnownAnswerTest) {
233 char msg[1024]; 193 string msg;
234 size_t msg_len; 194 string qx;
235 char key[64]; 195 string qy;
236 size_t qx_len; 196 string r;
237 size_t qy_len; 197 string s;
238 char signature[64];
239 size_t r_len;
240 size_t s_len;
241 198
242 for (size_t i = 0; test_vector[i].msg != NULL; i++) { 199 for (size_t i = 0; test_vector[i].msg != NULL; i++) {
243 SCOPED_TRACE(i); 200 SCOPED_TRACE(i);
244 // Decode the test vector. 201 // Decode the test vector.
245 ASSERT_TRUE( 202 ASSERT_TRUE(DecodeHexString(test_vector[i].msg, &msg));
246 DecodeHexString(test_vector[i].msg, msg, &msg_len, sizeof(msg))); 203 ASSERT_TRUE(DecodeHexString(test_vector[i].qx, &qx));
247 ASSERT_TRUE(DecodeHexString(test_vector[i].qx, key, &qx_len, sizeof(key))); 204 ASSERT_TRUE(DecodeHexString(test_vector[i].qy, &qy));
248 ASSERT_TRUE(DecodeHexString(test_vector[i].qy, key + qx_len, &qy_len, 205 ASSERT_TRUE(DecodeHexString(test_vector[i].r, &r));
249 sizeof(key) - qx_len)); 206 ASSERT_TRUE(DecodeHexString(test_vector[i].s, &s));
250 ASSERT_TRUE(DecodeHexString(test_vector[i].r, signature, &r_len, 207
251 sizeof(signature))); 208 string key = qx + qy;
252 ASSERT_TRUE(DecodeHexString(test_vector[i].s, signature + r_len, &s_len, 209 string signature = r + s;
253 sizeof(signature) - r_len));
254 210
255 // The test vector's lengths should look sane. 211 // The test vector's lengths should look sane.
256 EXPECT_EQ(sizeof(key) / 2, qx_len); 212 EXPECT_EQ(32u, qx.size());
257 EXPECT_EQ(sizeof(key) / 2, qy_len); 213 EXPECT_EQ(32u, qy.size());
258 EXPECT_EQ(sizeof(signature) / 2, r_len); 214 EXPECT_EQ(32u, r.size());
259 EXPECT_EQ(sizeof(signature) / 2, s_len); 215 EXPECT_EQ(32u, s.size());
260 216
261 EXPECT_EQ(test_vector[i].result, 217 EXPECT_EQ(test_vector[i].result,
262 ChannelIDVerifier::VerifyRaw( 218 ChannelIDVerifier::VerifyRaw(key, msg, signature, false));
263 StringPiece(key, sizeof(key)),
264 StringPiece(msg, msg_len),
265 StringPiece(signature, sizeof(signature)),
266 false));
267 } 219 }
268 } 220 }
269 221
270 TEST(ChannelIDTest, SignAndVerify) { 222 TEST(ChannelIDTest, SignAndVerify) {
271 scoped_ptr<ChannelIDSigner> signer( 223 scoped_ptr<ChannelIDSigner> signer(
272 CryptoTestUtils::ChannelIDSignerForTesting()); 224 CryptoTestUtils::ChannelIDSignerForTesting());
273 225
274 const string signed_data = "signed data"; 226 const string signed_data = "signed data";
275 const string hostname = "foo.example.com"; 227 const string hostname = "foo.example.com";
276 string key, signature; 228 string key, signature;
(...skipping 17 matching lines...) Expand all
294 bad_signature[1] ^= 0x80; 246 bad_signature[1] ^= 0x80;
295 EXPECT_FALSE(ChannelIDVerifier::Verify( 247 EXPECT_FALSE(ChannelIDVerifier::Verify(
296 key, signed_data, string(bad_signature.get(), signature.size()))); 248 key, signed_data, string(bad_signature.get(), signature.size())));
297 249
298 EXPECT_FALSE(ChannelIDVerifier::Verify( 250 EXPECT_FALSE(ChannelIDVerifier::Verify(
299 key, "wrong signed data", signature)); 251 key, "wrong signed data", signature));
300 } 252 }
301 253
302 } // namespace test 254 } // namespace test
303 } // namespace net 255 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/crypto/aes_128_gcm_12_encrypter_test.cc ('k') | net/quic/test_tools/quic_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698