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

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

Issue 189893002: Add ChaCha20Poly1305Encrypter, based on (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Remove the six svn copy files from the CL Created 6 years, 9 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/aes_128_gcm_12_decrypter.h" 5 #include "net/quic/crypto/aes_128_gcm_12_decrypter.h"
6 6
7 #include "net/quic/test_tools/quic_test_utils.h" 7 #include "net/quic/test_tools/quic_test_utils.h"
8 8
9 using base::StringPiece; 9 using base::StringPiece;
10 10
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 261
262 if (!decrypter->Decrypt(nonce, associated_data, ciphertext, 262 if (!decrypter->Decrypt(nonce, associated_data, ciphertext,
263 reinterpret_cast<unsigned char*>(plaintext.get()), 263 reinterpret_cast<unsigned char*>(plaintext.get()),
264 &plaintext_size)) { 264 &plaintext_size)) {
265 return NULL; 265 return NULL;
266 } 266 }
267 return new QuicData(plaintext.release(), plaintext_size, true); 267 return new QuicData(plaintext.release(), plaintext_size, true);
268 } 268 }
269 269
270 TEST(Aes128Gcm12DecrypterTest, Decrypt) { 270 TEST(Aes128Gcm12DecrypterTest, Decrypt) {
271 if (!Aes128Gcm12Decrypter::IsSupported()) {
272 LOG(INFO) << "AES GCM not supported. Test skipped.";
273 return;
274 }
275
276 string key;
277 string iv;
278 string ct;
279 string aad;
280 string tag;
281 string pt;
282
283 for (size_t i = 0; i < arraysize(test_group_array); i++) { 271 for (size_t i = 0; i < arraysize(test_group_array); i++) {
284 SCOPED_TRACE(i); 272 SCOPED_TRACE(i);
285 const TestVector* test_vector = test_group_array[i]; 273 const TestVector* test_vectors = test_group_array[i];
286 const TestGroupInfo& test_info = test_group_info[i]; 274 const TestGroupInfo& test_info = test_group_info[i];
287 for (size_t j = 0; test_vector[j].key != NULL; j++) { 275 for (size_t j = 0; test_vectors[j].key != NULL; j++) {
288 // If not present then decryption is expected to fail. 276 // If not present then decryption is expected to fail.
289 bool has_pt = test_vector[j].pt; 277 bool has_pt = test_vectors[j].pt;
290 278
291 // Decode the test vector. 279 // Decode the test vector.
292 ASSERT_TRUE(DecodeHexString(test_vector[j].key, &key)); 280 string key;
293 ASSERT_TRUE(DecodeHexString(test_vector[j].iv, &iv)); 281 string iv;
294 ASSERT_TRUE(DecodeHexString(test_vector[j].ct, &ct)); 282 string ct;
295 ASSERT_TRUE(DecodeHexString(test_vector[j].aad, &aad)); 283 string aad;
296 ASSERT_TRUE(DecodeHexString(test_vector[j].tag, &tag)); 284 string tag;
297 if (has_pt) 285 string pt;
298 ASSERT_TRUE(DecodeHexString(test_vector[j].pt, &pt)); 286 ASSERT_TRUE(DecodeHexString(test_vectors[j].key, &key));
287 ASSERT_TRUE(DecodeHexString(test_vectors[j].iv, &iv));
288 ASSERT_TRUE(DecodeHexString(test_vectors[j].ct, &ct));
289 ASSERT_TRUE(DecodeHexString(test_vectors[j].aad, &aad));
290 ASSERT_TRUE(DecodeHexString(test_vectors[j].tag, &tag));
291 if (has_pt) {
292 ASSERT_TRUE(DecodeHexString(test_vectors[j].pt, &pt));
293 }
299 294
300 // The test vector's lengths should look sane. Note that the lengths 295 // The test vector's lengths should look sane. Note that the lengths
301 // in |test_info| are in bits. 296 // in |test_info| are in bits.
302 EXPECT_EQ(test_info.key_len, key.size() * 8); 297 EXPECT_EQ(test_info.key_len, key.size() * 8);
303 EXPECT_EQ(test_info.iv_len, iv.size() * 8); 298 EXPECT_EQ(test_info.iv_len, iv.size() * 8);
304 EXPECT_EQ(test_info.pt_len, pt.size() * 8); 299 EXPECT_EQ(test_info.pt_len, ct.size() * 8);
305 EXPECT_EQ(test_info.aad_len, aad.size() * 8); 300 EXPECT_EQ(test_info.aad_len, aad.size() * 8);
306 EXPECT_EQ(test_info.tag_len, tag.size() * 8); 301 EXPECT_EQ(test_info.tag_len, tag.size() * 8);
307 if (has_pt) 302 if (has_pt) {
308 EXPECT_EQ(test_info.pt_len, pt.size() * 8); 303 EXPECT_EQ(test_info.pt_len, pt.size() * 8);
304 }
309 305
310 // The test vectors have 16 byte authenticators but this code only uses 306 // The test vectors have 16 byte authenticators but this code only uses
311 // the first 12. 307 // the first 12.
312 ASSERT_LE(static_cast<size_t>(Aes128Gcm12Decrypter::kAuthTagSize), 308 ASSERT_LE(static_cast<size_t>(Aes128Gcm12Decrypter::kAuthTagSize),
313 tag.size()); 309 tag.size());
314 string ciphertext = 310 string ciphertext =
315 ct + tag.substr(0, Aes128Gcm12Decrypter::kAuthTagSize); 311 ct + tag.substr(0, Aes128Gcm12Decrypter::kAuthTagSize);
316 312
317 Aes128Gcm12Decrypter decrypter; 313 Aes128Gcm12Decrypter decrypter;
318 ASSERT_TRUE(decrypter.SetKey(key)); 314 ASSERT_TRUE(decrypter.SetKey(key));
319 315
320 scoped_ptr<QuicData> decrypted(DecryptWithNonce( 316 scoped_ptr<QuicData> decrypted(DecryptWithNonce(
321 &decrypter, iv, 317 &decrypter, iv,
322 // OpenSSL fails if NULL is set as the AAD, as opposed to a 318 // This deliberately tests that the decrypter can handle an AAD that
323 // zero-length, non-NULL pointer. 319 // is set to NULL, as opposed to a zero-length, non-NULL pointer.
324 aad.size() ? aad : StringPiece(), ciphertext)); 320 aad.size() ? aad : StringPiece(), ciphertext));
325 if (!decrypted.get()) { 321 if (!decrypted.get()) {
326 EXPECT_FALSE(has_pt); 322 EXPECT_FALSE(has_pt);
327 continue; 323 continue;
328 } 324 }
329 EXPECT_TRUE(has_pt); 325 EXPECT_TRUE(has_pt);
330 326
331 ASSERT_EQ(pt.size(), decrypted->length()); 327 ASSERT_EQ(pt.size(), decrypted->length());
332 test::CompareCharArraysWithHexError("plaintext", decrypted->data(), 328 test::CompareCharArraysWithHexError("plaintext", decrypted->data(),
333 pt.size(), pt.data(), pt.size()); 329 pt.size(), pt.data(), pt.size());
334 } 330 }
335 } 331 }
336 } 332 }
337 333
338 } // namespace test 334 } // namespace test
339 } // namespace net 335 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/crypto/aes_128_gcm_12_decrypter_openssl.cc ('k') | net/quic/crypto/aes_128_gcm_12_encrypter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698