Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/file_path.h" | 5 #include "base/file_path.h" |
| 6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
| 7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
| 8 #include "base/pickle.h" | 8 #include "base/pickle.h" |
| 9 #include "base/sha1.h" | 9 #include "base/sha1.h" |
| 10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
| (...skipping 1431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1442 } | 1442 } |
| 1443 } | 1443 } |
| 1444 | 1444 |
| 1445 EXPECT_EQ(test_data.expected, X509Certificate::VerifyHostname( | 1445 EXPECT_EQ(test_data.expected, X509Certificate::VerifyHostname( |
| 1446 test_data.hostname, common_name, dns_names, ip_addressses)); | 1446 test_data.hostname, common_name, dns_names, ip_addressses)); |
| 1447 } | 1447 } |
| 1448 | 1448 |
| 1449 INSTANTIATE_TEST_CASE_P(, X509CertificateNameVerifyTest, | 1449 INSTANTIATE_TEST_CASE_P(, X509CertificateNameVerifyTest, |
| 1450 testing::ValuesIn(kNameVerifyTestData)); | 1450 testing::ValuesIn(kNameVerifyTestData)); |
| 1451 | 1451 |
| 1452 // Not implemented on Mac or OpenSSL - http://crbug.com/101123 | |
| 1453 #if defined(USE_NSS) || defined(OS_WIN) | |
| 1454 | |
| 1455 struct WeakDigestTestData { | |
| 1456 const char* root_cert_filename; | |
| 1457 const char* intermediate_cert_filename; | |
| 1458 const char* ee_cert_filename; | |
| 1459 bool expected_has_md5; | |
| 1460 bool expected_has_md4; | |
| 1461 bool expected_has_md2; | |
| 1462 bool expected_has_md5_ca; | |
| 1463 bool expected_has_md2_ca; | |
| 1464 }; | |
| 1465 | |
| 1466 void PrintTo(const WeakDigestTestData& data, std::ostream* os) { | |
|
palmer
2011/10/26 19:09:15
You never use this function, so get rid of it.
Ryan Sleevi
2011/10/26 22:27:47
This is GTest "magic" - code.google.com/p/googlete
| |
| 1467 *os << "root: " | |
| 1468 << (data.root_cert_filename ? data.root_cert_filename : "none") | |
| 1469 << "; intermediate: " << data.intermediate_cert_filename | |
| 1470 << "; end-entity: " << data.ee_cert_filename; | |
| 1471 } | |
| 1472 | |
| 1473 const WeakDigestTestData kVerifyWeakDigestTestData[] = { | |
| 1474 // The signature algorithm of the root CA should not matter. | |
| 1475 { "weak_digest_md2_root.pem", "weak_digest_sha1_intermediate.pem", | |
| 1476 "weak_digest_sha1_ee.pem", false, false, false, false, false }, | |
| 1477 { "weak_digest_md4_root.pem", "weak_digest_sha1_intermediate.pem", | |
| 1478 "weak_digest_sha1_ee.pem", false, false, false, false, false }, | |
| 1479 { "weak_digest_md5_root.pem", "weak_digest_sha1_intermediate.pem", | |
| 1480 "weak_digest_sha1_ee.pem", false, false, false, false, false }, | |
| 1481 // The signature algorithm of intermediates should be properly detected. | |
| 1482 { "weak_digest_sha1_root.pem", "weak_digest_md2_intermediate.pem", | |
| 1483 "weak_digest_sha1_ee.pem", false, false, true, false, true }, | |
| 1484 { "weak_digest_sha1_root.pem", "weak_digest_md4_intermediate.pem", | |
| 1485 "weak_digest_sha1_ee.pem", false, true, false, false, false }, | |
| 1486 { "weak_digest_sha1_root.pem", "weak_digest_md5_intermediate.pem", | |
| 1487 "weak_digest_sha1_ee.pem", true, false, false, true, false }, | |
| 1488 // The signature algorithm of end-entity should be properly detected. | |
| 1489 { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem", | |
| 1490 "weak_digest_md2_ee.pem", false, false, true, false, false }, | |
| 1491 { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem", | |
| 1492 "weak_digest_md4_ee.pem", false, true, false, false, false }, | |
| 1493 { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem", | |
| 1494 "weak_digest_md5_ee.pem", true, false, false, false, false }, | |
| 1495 // Disabled on Windows - currently broken for incomplete chains. | |
| 1496 // http://crbug.com/101123 | |
| 1497 #if !defined(OS_WIN) | |
| 1498 // Incomplete chains should still report the status of the intermediate. | |
| 1499 { NULL, "weak_digest_md2_intermediate.pem", "weak_digest_sha1_ee.pem", | |
| 1500 false, false, true, false, true }, | |
| 1501 { NULL, "weak_digest_md4_intermediate.pem", "weak_digest_sha1_ee.pem", | |
| 1502 false, true, false, false, false }, | |
| 1503 { NULL, "weak_digest_md5_intermediate.pem", "weak_digest_sha1_ee.pem", | |
| 1504 true, false, false, true, false }, | |
| 1505 #endif | |
| 1506 // Incomplete chains should still report the status of the end-entity. | |
| 1507 { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md2_ee.pem", | |
| 1508 false, false, true, false, false }, | |
| 1509 { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md4_ee.pem", | |
| 1510 false, true, false, false, false }, | |
| 1511 { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md5_ee.pem", | |
| 1512 true, false, false, false, false }, | |
| 1513 // Differing algorithms between the intermediate and the EE should still be | |
| 1514 // reported. | |
| 1515 { "weak_digest_sha1_root.pem", "weak_digest_md4_intermediate.pem", | |
| 1516 "weak_digest_md2_ee.pem", false, true, true, false, false }, | |
| 1517 { "weak_digest_sha1_root.pem", "weak_digest_md5_intermediate.pem", | |
| 1518 "weak_digest_md2_ee.pem", true, false, true, true, false }, | |
| 1519 { "weak_digest_sha1_root.pem", "weak_digest_md2_intermediate.pem", | |
| 1520 "weak_digest_md5_ee.pem", true, false, true, false, true }, | |
| 1521 }; | |
| 1522 | |
| 1523 class X509CertificateWeakDigestTest | |
| 1524 : public testing::TestWithParam<WeakDigestTestData> { | |
| 1525 public: | |
| 1526 X509CertificateWeakDigestTest() { | |
| 1527 } | |
| 1528 | |
| 1529 virtual void TearDown() { | |
| 1530 TestRootCerts::GetInstance()->Clear(); | |
| 1531 } | |
| 1532 }; | |
| 1533 | |
| 1534 TEST_P(X509CertificateWeakDigestTest, VerifyWithWeakDigest) { | |
| 1535 WeakDigestTestData data = GetParam(); | |
| 1536 FilePath certs_dir = GetTestCertsDirectory(); | |
| 1537 | |
| 1538 if (data.root_cert_filename) { | |
| 1539 scoped_refptr<X509Certificate> root_cert = | |
| 1540 ImportCertFromFile(certs_dir, data.root_cert_filename); | |
| 1541 ASSERT_NE(static_cast<X509Certificate*>(NULL), root_cert); | |
| 1542 TestRootCerts::GetInstance()->Add(root_cert.get()); | |
| 1543 } | |
|
palmer
2011/10/26 19:09:15
Should be indented two spaces.
| |
| 1544 | |
| 1545 scoped_refptr<X509Certificate> intermediate_cert = | |
| 1546 ImportCertFromFile(certs_dir, data.intermediate_cert_filename); | |
| 1547 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); | |
| 1548 scoped_refptr<X509Certificate> ee_cert = | |
| 1549 ImportCertFromFile(certs_dir, data.ee_cert_filename); | |
| 1550 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_cert); | |
| 1551 | |
| 1552 X509Certificate::OSCertHandles intermediates; | |
| 1553 intermediates.push_back(intermediate_cert->os_cert_handle()); | |
| 1554 | |
| 1555 scoped_refptr<X509Certificate> ee_chain = | |
| 1556 X509Certificate::CreateFromHandle(ee_cert->os_cert_handle(), | |
| 1557 intermediates); | |
| 1558 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_chain); | |
| 1559 | |
| 1560 int flags = 0; | |
| 1561 CertVerifyResult verify_result; | |
| 1562 ee_chain->Verify("127.0.0.1", flags, NULL, &verify_result); | |
| 1563 EXPECT_EQ(data.expected_has_md5, verify_result.has_md5); | |
| 1564 EXPECT_EQ(data.expected_has_md4, verify_result.has_md4); | |
| 1565 EXPECT_EQ(data.expected_has_md2, verify_result.has_md2); | |
| 1566 EXPECT_EQ(data.expected_has_md5_ca, verify_result.has_md5_ca); | |
| 1567 EXPECT_EQ(data.expected_has_md2_ca, verify_result.has_md2_ca); | |
| 1568 } | |
| 1569 | |
| 1570 | |
| 1571 INSTANTIATE_TEST_CASE_P(, X509CertificateWeakDigestTest, | |
| 1572 testing::ValuesIn(kVerifyWeakDigestTestData)); | |
| 1573 #endif // defined(USE_NSS) || defined(OS_WIN) | |
| 1574 | |
| 1452 } // namespace net | 1575 } // namespace net |
| OLD | NEW |