| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/cert/internal/parse_certificate.h" | 5 #include "net/cert/internal/parse_certificate.h" |
| 6 | 6 |
| 7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
| 8 #include "net/cert/internal/test_helpers.h" | 8 #include "net/cert/internal/test_helpers.h" |
| 9 #include "net/der/input.h" | 9 #include "net/der/input.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 EnsureParsingTbsSucceeds("tbs_validity_generalized_time_and_utc_time.pem", | 319 EnsureParsingTbsSucceeds("tbs_validity_generalized_time_and_utc_time.pem", |
| 320 CertificateVersion::V3); | 320 CertificateVersion::V3); |
| 321 } | 321 } |
| 322 | 322 |
| 323 // Parses a TBSCertificate whose "validity" field does not strictly follow | 323 // Parses a TBSCertificate whose "validity" field does not strictly follow |
| 324 // the DER rules (and fails to be parsed). | 324 // the DER rules (and fails to be parsed). |
| 325 TEST(ParseTbsCertificateTest, ValidityRelaxed) { | 325 TEST(ParseTbsCertificateTest, ValidityRelaxed) { |
| 326 EnsureParsingTbsFails("tbs_validity_relaxed.pem"); | 326 EnsureParsingTbsFails("tbs_validity_relaxed.pem"); |
| 327 } | 327 } |
| 328 | 328 |
| 329 // Reads a PEM file containing a block "EXTENSION". This input will be |
| 330 // passed to ParseExtension, and the results filled in |out|. |
| 331 bool ParseExtensionFromFile(const std::string& file_name, |
| 332 ParsedExtension* out, |
| 333 std::string* data) { |
| 334 const PemBlockMapping mappings[] = { |
| 335 {"EXTENSION", data}, |
| 336 }; |
| 337 |
| 338 EXPECT_TRUE(ReadTestDataFromPemFile(GetFilePath(file_name), mappings)); |
| 339 return ParseExtension(InputFromString(data), out); |
| 340 } |
| 341 |
| 342 // Parses an Extension whose critical field is true (255). |
| 343 TEST(ParseExtensionTest, Critical) { |
| 344 std::string data; |
| 345 ParsedExtension extension; |
| 346 ASSERT_TRUE( |
| 347 ParseExtensionFromFile("extension_critical.pem", &extension, &data)); |
| 348 |
| 349 EXPECT_TRUE(extension.critical); |
| 350 |
| 351 const uint8_t kExpectedOid[] = {0x55, 0x1d, 0x13}; |
| 352 EXPECT_EQ(der::Input(kExpectedOid), extension.oid); |
| 353 |
| 354 const uint8_t kExpectedValue[] = {0x30, 0x00}; |
| 355 EXPECT_EQ(der::Input(kExpectedValue), extension.value); |
| 356 } |
| 357 |
| 358 // Parses an Extension whose critical field is false (omitted). |
| 359 TEST(ParseExtensionTest, NotCritical) { |
| 360 std::string data; |
| 361 ParsedExtension extension; |
| 362 ASSERT_TRUE( |
| 363 ParseExtensionFromFile("extension_not_critical.pem", &extension, &data)); |
| 364 |
| 365 EXPECT_FALSE(extension.critical); |
| 366 |
| 367 const uint8_t kExpectedOid[] = {0x55, 0x1d, 0x13}; |
| 368 EXPECT_EQ(der::Input(kExpectedOid), extension.oid); |
| 369 |
| 370 const uint8_t kExpectedValue[] = {0x30, 0x00}; |
| 371 EXPECT_EQ(der::Input(kExpectedValue), extension.value); |
| 372 } |
| 373 |
| 374 // Parses an Extension whose critical field is 0. This is in one sense FALSE, |
| 375 // however because critical has DEFAULT of false this is in fact invalid |
| 376 // DER-encoding. |
| 377 TEST(ParseExtensionTest, Critical0) { |
| 378 std::string data; |
| 379 ParsedExtension extension; |
| 380 ASSERT_FALSE( |
| 381 ParseExtensionFromFile("extension_critical_0.pem", &extension, &data)); |
| 382 } |
| 383 |
| 384 // Parses an Extension whose critical field is 3. Under DER-encoding BOOLEAN |
| 385 // values must an octet of either all zero bits, or all 1 bits, so this is not |
| 386 // valid. |
| 387 TEST(ParseExtensionTest, Critical3) { |
| 388 std::string data; |
| 389 ParsedExtension extension; |
| 390 ASSERT_FALSE( |
| 391 ParseExtensionFromFile("extension_critical_3.pem", &extension, &data)); |
| 392 } |
| 393 |
| 329 } // namespace | 394 } // namespace |
| 330 | 395 |
| 331 } // namespace net | 396 } // namespace net |
| OLD | NEW |