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

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

Issue 2076363002: Introduce the ability to require CT for specific hosts (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@require_ct_enforcer
Patch Set: CanPool tests Created 4 years, 5 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
OLDNEW
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/quic/crypto/proof_verifier_chromium.h" 5 #include "net/quic/crypto/proof_verifier_chromium.h"
6 6
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "net/base/net_errors.h" 8 #include "net/base/net_errors.h"
9 #include "net/cert/cert_status_flags.h" 9 #include "net/cert/cert_status_flags.h"
10 #include "net/cert/cert_verifier.h" 10 #include "net/cert/cert_verifier.h"
11 #include "net/cert/ct_log_verifier.h" 11 #include "net/cert/ct_log_verifier.h"
12 #include "net/cert/ct_policy_enforcer.h" 12 #include "net/cert/ct_policy_enforcer.h"
13 #include "net/cert/ct_policy_status.h" 13 #include "net/cert/ct_policy_status.h"
14 #include "net/cert/ct_serialization.h" 14 #include "net/cert/ct_serialization.h"
15 #include "net/cert/mock_cert_verifier.h" 15 #include "net/cert/mock_cert_verifier.h"
16 #include "net/cert/multi_log_ct_verifier.h" 16 #include "net/cert/multi_log_ct_verifier.h"
17 #include "net/http/transport_security_state.h" 17 #include "net/http/transport_security_state.h"
18 #include "net/quic/crypto/proof_verifier.h" 18 #include "net/quic/crypto/proof_verifier.h"
19 #include "net/test/cert_test_util.h" 19 #include "net/test/cert_test_util.h"
20 #include "net/test/ct_test_util.h" 20 #include "net/test/ct_test_util.h"
21 #include "net/test/test_data_directory.h" 21 #include "net/test/test_data_directory.h"
22 #include "testing/gmock/include/gmock/gmock.h"
22 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
23 24
25 using ::testing::_;
26 using ::testing::Return;
27
24 namespace net { 28 namespace net {
25 namespace test { 29 namespace test {
26 30
27 namespace { 31 namespace {
28 32
29 // CertVerifier that will fail the test if it is ever called. 33 // CertVerifier that will fail the test if it is ever called.
30 class FailsTestCertVerifier : public CertVerifier { 34 class FailsTestCertVerifier : public CertVerifier {
31 public: 35 public:
32 FailsTestCertVerifier() {} 36 FailsTestCertVerifier() {}
33 ~FailsTestCertVerifier() override {} 37 ~FailsTestCertVerifier() override {}
(...skipping 20 matching lines...) Expand all
54 X509Certificate* cert, 58 X509Certificate* cert,
55 const ct::EVCertsWhitelist* ev_whitelist, 59 const ct::EVCertsWhitelist* ev_whitelist,
56 const ct::SCTList& verified_scts, 60 const ct::SCTList& verified_scts,
57 const BoundNetLog& net_log) override { 61 const BoundNetLog& net_log) override {
58 ADD_FAILURE() << "CTPolicyEnforcer::DoesConformToCTEVPolicy() should " 62 ADD_FAILURE() << "CTPolicyEnforcer::DoesConformToCTEVPolicy() should "
59 << "not be called"; 63 << "not be called";
60 return ct::EVPolicyCompliance::EV_POLICY_DOES_NOT_APPLY; 64 return ct::EVPolicyCompliance::EV_POLICY_DOES_NOT_APPLY;
61 } 65 }
62 }; 66 };
63 67
64 // CTPolicyEnforcer that can simulate whether or not a given certificate 68 // A mock CTPolicyEnforcer that returns a custom verification result.
65 // conforms to the CT/EV policy.
66 class MockCTPolicyEnforcer : public CTPolicyEnforcer { 69 class MockCTPolicyEnforcer : public CTPolicyEnforcer {
67 public: 70 public:
68 explicit MockCTPolicyEnforcer(bool is_ev) : is_ev_(is_ev) {} 71 MOCK_METHOD3(DoesConformToCertPolicy,
69 ~MockCTPolicyEnforcer() override {} 72 ct::CertPolicyCompliance(X509Certificate* cert,
73 const ct::SCTList&,
74 const BoundNetLog&));
75 MOCK_METHOD4(DoesConformToCTEVPolicy,
76 ct::EVPolicyCompliance(X509Certificate* cert,
77 const ct::EVCertsWhitelist*,
78 const ct::SCTList&,
79 const BoundNetLog&));
80 };
70 81
71 ct::EVPolicyCompliance DoesConformToCTEVPolicy( 82 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate {
72 X509Certificate* cert, 83 public:
73 const ct::EVCertsWhitelist* ev_whitelist, 84 MOCK_METHOD1(IsCTRequiredForHost,
74 const ct::SCTList& verified_scts, 85 CTRequirementLevel(const std::string& host));
75 const BoundNetLog& net_log) override {
76 return is_ev_ ? ct::EVPolicyCompliance::EV_POLICY_COMPLIES_VIA_SCTS
77 : ct::EVPolicyCompliance::EV_POLICY_NOT_ENOUGH_SCTS;
78 }
79
80 private:
81 bool is_ev_;
82 }; 86 };
83 87
84 class DummyProofVerifierCallback : public ProofVerifierCallback { 88 class DummyProofVerifierCallback : public ProofVerifierCallback {
85 public: 89 public:
86 DummyProofVerifierCallback() {} 90 DummyProofVerifierCallback() {}
87 ~DummyProofVerifierCallback() override {} 91 ~DummyProofVerifierCallback() override {}
88 92
89 void Run(bool ok, 93 void Run(bool ok,
90 const std::string& error_details, 94 const std::string& error_details,
91 std::unique_ptr<ProofVerifyDetails>* details) override { 95 std::unique_ptr<ProofVerifyDetails>* details) override {
92 // Do nothing 96 // Do nothing
93 } 97 }
94 }; 98 };
95 99
96 const char kTestHostname[] = "test.example.com"; 100 const char kTestHostname[] = "test.example.com";
97 const uint16_t kTestPort = 8443; 101 const uint16_t kTestPort = 8443;
98 const char kTestConfig[] = "server config bytes"; 102 const char kTestConfig[] = "server config bytes";
99 const char kLogDescription[] = "somelog"; 103 const char kLogDescription[] = "somelog";
100 104
101 } // namespace 105 } // namespace
102 106
103 class ProofVerifierChromiumTest : public ::testing::Test { 107 class ProofVerifierChromiumTest : public ::testing::Test {
104 public: 108 public:
105 ProofVerifierChromiumTest() 109 ProofVerifierChromiumTest()
106 : ct_policy_enforcer_(false /*is_ev*/), 110 : verify_context_(new ProofVerifyContextChromium(0 /*cert_verify_flags*/,
107 verify_context_(new ProofVerifyContextChromium(0 /*cert_verify_flags*/,
108 BoundNetLog())) {} 111 BoundNetLog())) {}
109 112
110 void SetUp() override { 113 void SetUp() override {
114 EXPECT_CALL(ct_policy_enforcer_, DoesConformToCertPolicy(_, _, _))
115 .WillRepeatedly(
116 Return(ct::CertPolicyCompliance::CERT_POLICY_NOT_ENOUGH_SCTS));
117 EXPECT_CALL(ct_policy_enforcer_, DoesConformToCTEVPolicy(_, _, _, _))
118 .WillRepeatedly(
119 Return(ct::EVPolicyCompliance::EV_POLICY_DOES_NOT_APPLY));
120
111 scoped_refptr<const CTLogVerifier> log(CTLogVerifier::Create( 121 scoped_refptr<const CTLogVerifier> log(CTLogVerifier::Create(
112 ct::GetTestPublicKey(), kLogDescription, "https://test.example.com")); 122 ct::GetTestPublicKey(), kLogDescription, "https://test.example.com"));
113 ASSERT_TRUE(log); 123 ASSERT_TRUE(log);
114 log_verifiers_.push_back(log); 124 log_verifiers_.push_back(log);
115 125
116 ct_verifier_.reset(new MultiLogCTVerifier()); 126 ct_verifier_.reset(new MultiLogCTVerifier());
117 ct_verifier_->AddLogs(log_verifiers_); 127 ct_verifier_->AddLogs(log_verifiers_);
118 128
119 ASSERT_NO_FATAL_FAILURE(GetTestCertificates(&certs_)); 129 ASSERT_NO_FATAL_FAILURE(GetTestCertificates(&certs_));
120 } 130 }
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 scoped_refptr<X509Certificate> test_cert = GetTestServerCertificate(); 300 scoped_refptr<X509Certificate> test_cert = GetTestServerCertificate();
291 ASSERT_TRUE(test_cert); 301 ASSERT_TRUE(test_cert);
292 302
293 CertVerifyResult dummy_result; 303 CertVerifyResult dummy_result;
294 dummy_result.verified_cert = test_cert; 304 dummy_result.verified_cert = test_cert;
295 dummy_result.cert_status = CERT_STATUS_IS_EV; 305 dummy_result.cert_status = CERT_STATUS_IS_EV;
296 306
297 MockCertVerifier dummy_verifier; 307 MockCertVerifier dummy_verifier;
298 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK); 308 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK);
299 309
300 MockCTPolicyEnforcer policy_enforcer(true /*is_ev*/); 310 EXPECT_CALL(ct_policy_enforcer_, DoesConformToCTEVPolicy(_, _, _, _))
311 .WillRepeatedly(
312 Return(ct::EVPolicyCompliance::EV_POLICY_COMPLIES_VIA_SCTS));
davidben 2016/06/23 19:51:43 Just to confirm, clobbering the EXPECT_CALL in Set
Ryan Sleevi 2016/06/23 21:38:31 Yup. https://github.com/google/googletest/blob/mas
301 313
302 ProofVerifierChromium proof_verifier(&dummy_verifier, &policy_enforcer, 314 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
303 &transport_security_state_, 315 &transport_security_state_,
304 ct_verifier_.get()); 316 ct_verifier_.get());
305 317
306 std::unique_ptr<DummyProofVerifierCallback> callback( 318 std::unique_ptr<DummyProofVerifierCallback> callback(
307 new DummyProofVerifierCallback); 319 new DummyProofVerifierCallback);
308 QuicAsyncStatus status = proof_verifier.VerifyProof( 320 QuicAsyncStatus status = proof_verifier.VerifyProof(
309 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "", 321 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
310 GetTestSignature(), verify_context_.get(), &error_details_, &details_, 322 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
311 callback.get()); 323 callback.get());
312 ASSERT_EQ(QUIC_SUCCESS, status); 324 ASSERT_EQ(QUIC_SUCCESS, status);
(...skipping 11 matching lines...) Expand all
324 scoped_refptr<X509Certificate> test_cert = GetTestServerCertificate(); 336 scoped_refptr<X509Certificate> test_cert = GetTestServerCertificate();
325 ASSERT_TRUE(test_cert); 337 ASSERT_TRUE(test_cert);
326 338
327 CertVerifyResult dummy_result; 339 CertVerifyResult dummy_result;
328 dummy_result.verified_cert = test_cert; 340 dummy_result.verified_cert = test_cert;
329 dummy_result.cert_status = CERT_STATUS_IS_EV; 341 dummy_result.cert_status = CERT_STATUS_IS_EV;
330 342
331 MockCertVerifier dummy_verifier; 343 MockCertVerifier dummy_verifier;
332 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK); 344 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK);
333 345
334 MockCTPolicyEnforcer policy_enforcer(false /*is_ev*/); 346 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
335
336 ProofVerifierChromium proof_verifier(&dummy_verifier, &policy_enforcer,
337 &transport_security_state_, 347 &transport_security_state_,
338 ct_verifier_.get()); 348 ct_verifier_.get());
339 349
340 std::unique_ptr<DummyProofVerifierCallback> callback( 350 std::unique_ptr<DummyProofVerifierCallback> callback(
341 new DummyProofVerifierCallback); 351 new DummyProofVerifierCallback);
342 QuicAsyncStatus status = proof_verifier.VerifyProof( 352 QuicAsyncStatus status = proof_verifier.VerifyProof(
343 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "", 353 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
344 GetTestSignature(), verify_context_.get(), &error_details_, &details_, 354 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
345 callback.get()); 355 callback.get());
346 ASSERT_EQ(QUIC_SUCCESS, status); 356 ASSERT_EQ(QUIC_SUCCESS, status);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 CertVerifyResult dummy_result; 412 CertVerifyResult dummy_result;
403 dummy_result.verified_cert = test_cert; 413 dummy_result.verified_cert = test_cert;
404 dummy_result.is_issued_by_known_root = true; 414 dummy_result.is_issued_by_known_root = true;
405 dummy_result.public_key_hashes = MakeHashValueVector(0x01); 415 dummy_result.public_key_hashes = MakeHashValueVector(0x01);
406 dummy_result.cert_status = 0; 416 dummy_result.cert_status = 0;
407 417
408 MockCertVerifier dummy_verifier; 418 MockCertVerifier dummy_verifier;
409 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK); 419 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK);
410 420
411 HashValueVector pin_hashes = MakeHashValueVector(0x02); 421 HashValueVector pin_hashes = MakeHashValueVector(0x02);
412 TransportSecurityState transport_security_state; 422 transport_security_state_.AddHPKP(
413 transport_security_state.AddHPKP(
414 kTestHostname, base::Time::Now() + base::TimeDelta::FromSeconds(10000), 423 kTestHostname, base::Time::Now() + base::TimeDelta::FromSeconds(10000),
415 true, pin_hashes, GURL()); 424 true, pin_hashes, GURL());
416 425
417 MockCTPolicyEnforcer policy_enforcer(true /*is_ev*/); 426 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
418 ProofVerifierChromium proof_verifier(&dummy_verifier, &policy_enforcer, 427 &transport_security_state_,
419 &transport_security_state,
420 ct_verifier_.get()); 428 ct_verifier_.get());
421 429
422 std::unique_ptr<DummyProofVerifierCallback> callback( 430 std::unique_ptr<DummyProofVerifierCallback> callback(
423 new DummyProofVerifierCallback); 431 new DummyProofVerifierCallback);
424 QuicAsyncStatus status = proof_verifier.VerifyProof( 432 QuicAsyncStatus status = proof_verifier.VerifyProof(
425 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "", 433 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
426 GetTestSignature(), verify_context_.get(), &error_details_, &details_, 434 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
427 callback.get()); 435 callback.get());
428 ASSERT_EQ(QUIC_FAILURE, status); 436 ASSERT_EQ(QUIC_FAILURE, status);
429 437
(...skipping 15 matching lines...) Expand all
445 CertVerifyResult dummy_result; 453 CertVerifyResult dummy_result;
446 dummy_result.verified_cert = test_cert; 454 dummy_result.verified_cert = test_cert;
447 dummy_result.is_issued_by_known_root = false; 455 dummy_result.is_issued_by_known_root = false;
448 dummy_result.public_key_hashes = MakeHashValueVector(0x01); 456 dummy_result.public_key_hashes = MakeHashValueVector(0x01);
449 dummy_result.cert_status = 0; 457 dummy_result.cert_status = 0;
450 458
451 MockCertVerifier dummy_verifier; 459 MockCertVerifier dummy_verifier;
452 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK); 460 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK);
453 461
454 HashValueVector expected_hashes = MakeHashValueVector(0x02); 462 HashValueVector expected_hashes = MakeHashValueVector(0x02);
455 TransportSecurityState transport_security_state_fail; 463 transport_security_state_.AddHPKP(
456 transport_security_state_fail.AddHPKP(
457 kTestHostname, base::Time::Now() + base::TimeDelta::FromSeconds(10000), 464 kTestHostname, base::Time::Now() + base::TimeDelta::FromSeconds(10000),
458 true, expected_hashes, GURL()); 465 true, expected_hashes, GURL());
459 466
460 MockCTPolicyEnforcer policy_enforcer(true /*is_ev*/); 467 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
461 ProofVerifierChromium proof_verifier(&dummy_verifier, &policy_enforcer, 468 &transport_security_state_,
462 &transport_security_state_fail,
463 ct_verifier_.get()); 469 ct_verifier_.get());
464 470
465 std::unique_ptr<DummyProofVerifierCallback> callback( 471 std::unique_ptr<DummyProofVerifierCallback> callback(
466 new DummyProofVerifierCallback); 472 new DummyProofVerifierCallback);
467 QuicAsyncStatus status = proof_verifier.VerifyProof( 473 QuicAsyncStatus status = proof_verifier.VerifyProof(
468 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "", 474 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
469 GetTestSignature(), verify_context_.get(), &error_details_, &details_, 475 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
470 callback.get()); 476 callback.get());
471 ASSERT_EQ(QUIC_SUCCESS, status); 477 ASSERT_EQ(QUIC_SUCCESS, status);
472 478
473 ASSERT_TRUE(details_.get()); 479 ASSERT_TRUE(details_.get());
474 ProofVerifyDetailsChromium* verify_details = 480 ProofVerifyDetailsChromium* verify_details =
475 static_cast<ProofVerifyDetailsChromium*>(details_.get()); 481 static_cast<ProofVerifyDetailsChromium*>(details_.get());
476 EXPECT_TRUE(verify_details->pkp_bypassed); 482 EXPECT_TRUE(verify_details->pkp_bypassed);
477 } 483 }
478 484
485 // Test that when CT is required (in this case, by the delegate), the
486 // absence of CT information is a socket error.
487 TEST_F(ProofVerifierChromiumTest, CTIsRequired) {
488 scoped_refptr<X509Certificate> test_cert = GetTestServerCertificate();
489 ASSERT_TRUE(test_cert);
490
491 CertVerifyResult dummy_result;
492 dummy_result.verified_cert = test_cert;
493 dummy_result.is_issued_by_known_root = true;
494 dummy_result.public_key_hashes = MakeHashValueVector(0x01);
495 dummy_result.cert_status = 0;
496
497 MockCertVerifier dummy_verifier;
498 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK);
499
500 // Set up CT.
501 MockRequireCTDelegate require_ct_delegate;
502 transport_security_state_.SetRequireCTDelegate(&require_ct_delegate);
503 EXPECT_CALL(require_ct_delegate, IsCTRequiredForHost(_))
504 .WillRepeatedly(Return(TransportSecurityState::RequireCTDelegate::
505 CTRequirementLevel::NOT_REQUIRED));
davidben 2016/06/23 19:51:43 Does this line do anything?
Ryan Sleevi 2016/06/23 21:38:31 Objectively, no. It just means that if the hostnam
506 EXPECT_CALL(require_ct_delegate, IsCTRequiredForHost(kTestHostname))
507 .WillRepeatedly(Return(TransportSecurityState::RequireCTDelegate::
508 CTRequirementLevel::REQUIRED));
509 EXPECT_CALL(ct_policy_enforcer_, DoesConformToCertPolicy(_, _, _))
510 .WillRepeatedly(
511 Return(ct::CertPolicyCompliance::CERT_POLICY_NOT_ENOUGH_SCTS));
512
513 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
514 &transport_security_state_,
515 ct_verifier_.get());
516
517 std::unique_ptr<DummyProofVerifierCallback> callback(
518 new DummyProofVerifierCallback);
519 QuicAsyncStatus status = proof_verifier.VerifyProof(
520 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
521 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
522 callback.get());
523 ASSERT_EQ(QUIC_FAILURE, status);
524
525 ASSERT_TRUE(details_.get());
526 ProofVerifyDetailsChromium* verify_details =
527 static_cast<ProofVerifyDetailsChromium*>(details_.get());
528 EXPECT_TRUE(verify_details->cert_verify_result.cert_status &
529 CERT_STATUS_CERTIFICATE_TRANSPARENCY_REQUIRED);
530 }
531
532 // Test that CT is considered even when HPKP fails.
533 TEST_F(ProofVerifierChromiumTest, PKPAndCTBothTested) {
534 scoped_refptr<X509Certificate> test_cert = GetTestServerCertificate();
535 ASSERT_TRUE(test_cert);
536
537 CertVerifyResult dummy_result;
538 dummy_result.verified_cert = test_cert;
539 dummy_result.is_issued_by_known_root = true;
540 dummy_result.public_key_hashes = MakeHashValueVector(0x01);
541 dummy_result.cert_status = 0;
542
543 MockCertVerifier dummy_verifier;
544 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK);
545
546 // Set up HPKP.
547 HashValueVector pin_hashes = MakeHashValueVector(0x02);
548 transport_security_state_.AddHPKP(
549 kTestHostname, base::Time::Now() + base::TimeDelta::FromSeconds(10000),
550 true, pin_hashes, GURL());
551
552 // Set up CT.
553 MockRequireCTDelegate require_ct_delegate;
554 transport_security_state_.SetRequireCTDelegate(&require_ct_delegate);
555 EXPECT_CALL(require_ct_delegate, IsCTRequiredForHost(_))
556 .WillRepeatedly(Return(TransportSecurityState::RequireCTDelegate::
557 CTRequirementLevel::NOT_REQUIRED));
558 EXPECT_CALL(require_ct_delegate, IsCTRequiredForHost(kTestHostname))
559 .WillRepeatedly(Return(TransportSecurityState::RequireCTDelegate::
560 CTRequirementLevel::REQUIRED));
561 EXPECT_CALL(ct_policy_enforcer_, DoesConformToCertPolicy(_, _, _))
562 .WillRepeatedly(
563 Return(ct::CertPolicyCompliance::CERT_POLICY_NOT_ENOUGH_SCTS));
564
565 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
566 &transport_security_state_,
567 ct_verifier_.get());
568
569 std::unique_ptr<DummyProofVerifierCallback> callback(
570 new DummyProofVerifierCallback);
571 QuicAsyncStatus status = proof_verifier.VerifyProof(
572 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
573 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
574 callback.get());
575 ASSERT_EQ(QUIC_FAILURE, status);
576
577 ASSERT_TRUE(details_.get());
578 ProofVerifyDetailsChromium* verify_details =
579 static_cast<ProofVerifyDetailsChromium*>(details_.get());
580 EXPECT_TRUE(verify_details->cert_verify_result.cert_status &
581 CERT_STATUS_PINNED_KEY_MISSING);
582 EXPECT_TRUE(verify_details->cert_verify_result.cert_status &
583 CERT_STATUS_CERTIFICATE_TRANSPARENCY_REQUIRED);
584 }
585
479 } // namespace test 586 } // namespace test
480 } // namespace net 587 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698