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

Unified Diff: net/quic/crypto/aes_128_gcm_12_decrypter_test.cc

Issue 54043003: Remove some duplicate code in quic tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: net/quic/crypto/aes_128_gcm_12_decrypter_test.cc
diff --git a/net/quic/crypto/aes_128_gcm_12_decrypter_test.cc b/net/quic/crypto/aes_128_gcm_12_decrypter_test.cc
index cea6a6e5b6ca5f7743895069da3359e40ec5a418..dd37085894cbb1c0f463bc4fef2423891aad0fa9 100644
--- a/net/quic/crypto/aes_128_gcm_12_decrypter_test.cc
+++ b/net/quic/crypto/aes_128_gcm_12_decrypter_test.cc
@@ -245,47 +245,6 @@ const TestVector* const test_group_array[] = {
test_group_5,
};
-// Returns true if |ch| is a lowercase hexadecimal digit.
-bool IsHexDigit(char ch) {
- return ('0' <= ch && ch <= '9') || ('a' <= ch && ch <= 'f');
-}
-
-// Converts a lowercase hexadecimal digit to its integer value.
-int HexDigitToInt(char ch) {
- if ('0' <= ch && ch <= '9') {
- return ch - '0';
- }
- return ch - 'a' + 10;
-}
-
-// |in| is a string consisting of lowercase hexadecimal digits, where
-// every two digits represent one byte. |out| is a buffer of size |max_len|.
-// Converts |in| to bytes and stores the bytes in the |out| buffer. The
-// number of bytes converted is returned in |*out_len|. Returns true on
-// success, false on failure.
-bool DecodeHexString(const char* in,
- char* out,
- size_t* out_len,
- size_t max_len) {
- if (!in) {
- *out_len = (size_t)-1;
- return true;
- }
- *out_len = 0;
- while (*in != '\0') {
- if (!IsHexDigit(*in) || !IsHexDigit(*(in + 1))) {
- return false;
- }
- if (*out_len >= max_len) {
- return false;
- }
- out[*out_len] = HexDigitToInt(*in) * 16 + HexDigitToInt(*(in + 1));
- (*out_len)++;
- in += 2;
- }
- return true;
-}
-
} // namespace
namespace net {
@@ -314,70 +273,64 @@ TEST(Aes128Gcm12DecrypterTest, Decrypt) {
return;
}
- char key[1024];
- size_t key_len;
- char iv[1024];
- size_t iv_len;
- char ct[1024];
- size_t ct_len;
- char aad[1024];
- size_t aad_len;
- char tag[1024];
- size_t tag_len;
- char pt[1024];
- size_t pt_len;
+ string key;
+ string iv;
+ string ct;
+ string aad;
+ string tag;
+ string pt;
for (size_t i = 0; i < arraysize(test_group_array); i++) {
SCOPED_TRACE(i);
const TestVector* test_vector = test_group_array[i];
const TestGroupInfo& test_info = test_group_info[i];
for (size_t j = 0; test_vector[j].key != NULL; j++) {
+ // If not present then decryption is expected to fail.
+ bool has_pt = test_vector[j].pt;
+
// Decode the test vector.
- ASSERT_TRUE(
- DecodeHexString(test_vector[j].key, key, &key_len, sizeof(key)));
- ASSERT_TRUE(DecodeHexString(test_vector[j].iv, iv, &iv_len, sizeof(iv)));
- ASSERT_TRUE(DecodeHexString(test_vector[j].ct, ct, &ct_len, sizeof(ct)));
- ASSERT_TRUE(
- DecodeHexString(test_vector[j].aad, aad, &aad_len, sizeof(aad)));
- ASSERT_TRUE(
- DecodeHexString(test_vector[j].tag, tag, &tag_len, sizeof(tag)));
- ASSERT_TRUE(DecodeHexString(test_vector[j].pt, pt, &pt_len, sizeof(pt)));
+ ASSERT_TRUE(DecodeHexString(test_vector[j].key, &key));
+ ASSERT_TRUE(DecodeHexString(test_vector[j].iv, &iv));
+ ASSERT_TRUE(DecodeHexString(test_vector[j].ct, &ct));
+ ASSERT_TRUE(DecodeHexString(test_vector[j].aad, &aad));
+ ASSERT_TRUE(DecodeHexString(test_vector[j].tag, &tag));
+ if (has_pt)
+ ASSERT_TRUE(DecodeHexString(test_vector[j].pt, &pt));
// The test vector's lengths should look sane. Note that the lengths
// in |test_info| are in bits.
- EXPECT_EQ(test_info.key_len, key_len * 8);
- EXPECT_EQ(test_info.iv_len, iv_len * 8);
- EXPECT_EQ(test_info.pt_len, ct_len * 8);
- EXPECT_EQ(test_info.aad_len, aad_len * 8);
- EXPECT_EQ(test_info.tag_len, tag_len * 8);
- if (pt_len != static_cast<size_t>(-1)) {
- EXPECT_EQ(test_info.pt_len, pt_len * 8);
- }
+ EXPECT_EQ(test_info.key_len, key.size() * 8);
+ EXPECT_EQ(test_info.iv_len, iv.size() * 8);
+ EXPECT_EQ(test_info.pt_len, pt.size() * 8);
+ EXPECT_EQ(test_info.aad_len, aad.size() * 8);
+ EXPECT_EQ(test_info.tag_len, tag.size() * 8);
+ if (has_pt)
+ EXPECT_EQ(test_info.pt_len, pt.size() * 8);
// The test vectors have 16 byte authenticators but this code only uses
// the first 12.
ASSERT_LE(static_cast<size_t>(Aes128Gcm12Decrypter::kAuthTagSize),
- tag_len);
- tag_len = Aes128Gcm12Decrypter::kAuthTagSize;
+ tag.size());
+ string ciphertext =
+ ct + tag.substr(0, Aes128Gcm12Decrypter::kAuthTagSize);
Aes128Gcm12Decrypter decrypter;
- ASSERT_TRUE(decrypter.SetKey(StringPiece(key, key_len)));
- string ciphertext(ct, ct_len);
- ciphertext.append(tag, tag_len);
+ ASSERT_TRUE(decrypter.SetKey(key));
+
scoped_ptr<QuicData> decrypted(DecryptWithNonce(
- &decrypter, StringPiece(iv, iv_len),
+ &decrypter, iv,
// OpenSSL fails if NULL is set as the AAD, as opposed to a
// zero-length, non-NULL pointer.
- StringPiece(aad_len ? aad : NULL, aad_len), ciphertext));
+ aad.size() ? aad : StringPiece(), ciphertext));
if (!decrypted.get()) {
- EXPECT_EQ((size_t)-1, pt_len);
+ EXPECT_FALSE(has_pt);
continue;
}
- ASSERT_NE((size_t)-1, pt_len);
+ EXPECT_TRUE(has_pt);
- ASSERT_EQ(pt_len, decrypted->length());
+ ASSERT_EQ(pt.size(), decrypted->length());
test::CompareCharArraysWithHexError("plaintext", decrypted->data(),
- pt_len, pt, pt_len);
+ pt.size(), pt.data(), pt.size());
}
}
}
« no previous file with comments | « no previous file | net/quic/crypto/aes_128_gcm_12_encrypter_test.cc » ('j') | net/quic/crypto/aes_128_gcm_12_encrypter_test.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698