OLD | NEW |
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/crypto_utils.h" | 5 #include "net/quic/crypto/crypto_utils.h" |
6 | 6 |
| 7 #include "net/quic/test_tools/quic_test_utils.h" |
7 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
8 | 9 |
9 namespace net { | 10 namespace net { |
10 namespace test { | 11 namespace test { |
11 namespace { | 12 namespace { |
12 | 13 |
13 TEST(CryptoUtilsTest, IsValidSNI) { | 14 TEST(CryptoUtilsTest, IsValidSNI) { |
14 // IP as SNI. | 15 // IP as SNI. |
15 EXPECT_FALSE(CryptoUtils::IsValidSNI("192.168.0.1")); | 16 EXPECT_FALSE(CryptoUtils::IsValidSNI("192.168.0.1")); |
16 // SNI without any dot. | 17 // SNI without any dot. |
(...skipping 20 matching lines...) Expand all Loading... |
37 { "www.google.com..", "www.google.com", }, | 38 { "www.google.com..", "www.google.com", }, |
38 { "www.google.com........", "www.google.com", }, | 39 { "www.google.com........", "www.google.com", }, |
39 }; | 40 }; |
40 | 41 |
41 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 42 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
42 EXPECT_EQ(std::string(tests[i].expected), | 43 EXPECT_EQ(std::string(tests[i].expected), |
43 CryptoUtils::NormalizeHostname(tests[i].input)); | 44 CryptoUtils::NormalizeHostname(tests[i].input)); |
44 } | 45 } |
45 } | 46 } |
46 | 47 |
| 48 TEST(CryptoUtilsTest, TestExportKeyingMaterial) { |
| 49 const struct TestVector { |
| 50 // Input (strings of hexadecimal digits): |
| 51 const char* subkey_secret; |
| 52 const char* label; |
| 53 const char* context; |
| 54 size_t result_len; |
| 55 |
| 56 // Expected output (string of hexadecimal digits): |
| 57 const char* expected; // Null if it should fail. |
| 58 } test_vector[] = { |
| 59 // Try a typical input |
| 60 { "4823c1189ecc40fce888fbb4cf9ae6254f19ba12e6d9af54788f195a6f509ca3", |
| 61 "e934f78d7a71dd85420fceeb8cea0317", |
| 62 "b8d766b5d3c8aba0009c7ed3de553eba53b4de1030ea91383dcdf724cd8b7217", |
| 63 32, |
| 64 "a9979da0d5f1c1387d7cbe68f5c4163ddb445a03c4ad6ee72cb49d56726d679e" |
| 65 }, |
| 66 // Don't let the label contain nulls |
| 67 { "14fe51e082ffee7d1b4d8d4ab41f8c55", |
| 68 "3132333435363700", |
| 69 "58585858585858585858585858585858", |
| 70 16, |
| 71 NULL |
| 72 }, |
| 73 // Make sure nulls in the context are fine |
| 74 { "d862c2e36b0a42f7827c67ebc8d44df7", |
| 75 "7a5b95e4e8378123", |
| 76 "4142434445464700", |
| 77 16, |
| 78 "12d418c6d0738a2e4d85b2d0170f76e1" |
| 79 }, |
| 80 // ... and give a different result than without |
| 81 { "d862c2e36b0a42f7827c67ebc8d44df7", |
| 82 "7a5b95e4e8378123", |
| 83 "41424344454647", |
| 84 16, |
| 85 "abfa1c479a6e3ffb98a11dee7d196408" |
| 86 }, |
| 87 // Try weird lengths |
| 88 { "d0ec8a34f6cc9a8c96", |
| 89 "49711798cc6251", |
| 90 "933d4a2f30d22f089cfba842791116adc121e0", |
| 91 23, |
| 92 "c9a46ed0757bd1812f1f21b4d41e62125fec8364a21db7" |
| 93 }, |
| 94 }; |
| 95 |
| 96 for (size_t i = 0; i < arraysize(test_vector); i++) { |
| 97 // Decode the test vector. |
| 98 string subkey_secret; |
| 99 string label; |
| 100 string context; |
| 101 ASSERT_TRUE(DecodeHexString(test_vector[i].subkey_secret, &subkey_secret)); |
| 102 ASSERT_TRUE(DecodeHexString(test_vector[i].label, &label)); |
| 103 ASSERT_TRUE(DecodeHexString(test_vector[i].context, &context)); |
| 104 size_t result_len = test_vector[i].result_len; |
| 105 bool expect_ok = test_vector[i].expected != NULL; |
| 106 string expected; |
| 107 if (expect_ok) { |
| 108 ASSERT_TRUE(DecodeHexString(test_vector[i].expected, &expected)); |
| 109 } |
| 110 |
| 111 string result; |
| 112 bool ok = CryptoUtils::ExportKeyingMaterial(subkey_secret, |
| 113 label, |
| 114 context, |
| 115 result_len, |
| 116 &result); |
| 117 EXPECT_EQ(expect_ok, ok); |
| 118 if (expect_ok) { |
| 119 EXPECT_EQ(result_len, result.length()); |
| 120 test::CompareCharArraysWithHexError("HKDF output", |
| 121 result.data(), |
| 122 result.length(), |
| 123 expected.data(), |
| 124 expected.length()); |
| 125 } |
| 126 } |
| 127 } |
| 128 |
47 } // namespace | 129 } // namespace |
48 } // namespace test | 130 } // namespace test |
49 } // namespace net | 131 } // namespace net |
OLD | NEW |