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

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: Android is weird Created 4 years, 6 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
« no previous file with comments | « net/quic/crypto/proof_verifier_chromium.cc ('k') | net/socket/ssl_client_socket_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
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 EXPECT_CALL(ct_policy_enforcer_, DoesConformToCTEVPolicy(_, _, _, _))
347 .WillRepeatedly(
348 Return(ct::EVPolicyCompliance::EV_POLICY_NOT_ENOUGH_SCTS));
335 349
336 ProofVerifierChromium proof_verifier(&dummy_verifier, &policy_enforcer, 350 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
337 &transport_security_state_, 351 &transport_security_state_,
338 ct_verifier_.get()); 352 ct_verifier_.get());
339 353
340 std::unique_ptr<DummyProofVerifierCallback> callback( 354 std::unique_ptr<DummyProofVerifierCallback> callback(
341 new DummyProofVerifierCallback); 355 new DummyProofVerifierCallback);
342 QuicAsyncStatus status = proof_verifier.VerifyProof( 356 QuicAsyncStatus status = proof_verifier.VerifyProof(
343 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "", 357 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
344 GetTestSignature(), verify_context_.get(), &error_details_, &details_, 358 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
345 callback.get()); 359 callback.get());
346 ASSERT_EQ(QUIC_SUCCESS, status); 360 ASSERT_EQ(QUIC_SUCCESS, status);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 CertVerifyResult dummy_result; 416 CertVerifyResult dummy_result;
403 dummy_result.verified_cert = test_cert; 417 dummy_result.verified_cert = test_cert;
404 dummy_result.is_issued_by_known_root = true; 418 dummy_result.is_issued_by_known_root = true;
405 dummy_result.public_key_hashes = MakeHashValueVector(0x01); 419 dummy_result.public_key_hashes = MakeHashValueVector(0x01);
406 dummy_result.cert_status = 0; 420 dummy_result.cert_status = 0;
407 421
408 MockCertVerifier dummy_verifier; 422 MockCertVerifier dummy_verifier;
409 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK); 423 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK);
410 424
411 HashValueVector pin_hashes = MakeHashValueVector(0x02); 425 HashValueVector pin_hashes = MakeHashValueVector(0x02);
412 TransportSecurityState transport_security_state; 426 transport_security_state_.AddHPKP(
413 transport_security_state.AddHPKP(
414 kTestHostname, base::Time::Now() + base::TimeDelta::FromSeconds(10000), 427 kTestHostname, base::Time::Now() + base::TimeDelta::FromSeconds(10000),
415 true, pin_hashes, GURL()); 428 true, pin_hashes, GURL());
416 429
417 MockCTPolicyEnforcer policy_enforcer(true /*is_ev*/); 430 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
418 ProofVerifierChromium proof_verifier(&dummy_verifier, &policy_enforcer, 431 &transport_security_state_,
419 &transport_security_state,
420 ct_verifier_.get()); 432 ct_verifier_.get());
421 433
422 std::unique_ptr<DummyProofVerifierCallback> callback( 434 std::unique_ptr<DummyProofVerifierCallback> callback(
423 new DummyProofVerifierCallback); 435 new DummyProofVerifierCallback);
424 QuicAsyncStatus status = proof_verifier.VerifyProof( 436 QuicAsyncStatus status = proof_verifier.VerifyProof(
425 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "", 437 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
426 GetTestSignature(), verify_context_.get(), &error_details_, &details_, 438 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
427 callback.get()); 439 callback.get());
428 ASSERT_EQ(QUIC_FAILURE, status); 440 ASSERT_EQ(QUIC_FAILURE, status);
429 441
(...skipping 15 matching lines...) Expand all
445 CertVerifyResult dummy_result; 457 CertVerifyResult dummy_result;
446 dummy_result.verified_cert = test_cert; 458 dummy_result.verified_cert = test_cert;
447 dummy_result.is_issued_by_known_root = false; 459 dummy_result.is_issued_by_known_root = false;
448 dummy_result.public_key_hashes = MakeHashValueVector(0x01); 460 dummy_result.public_key_hashes = MakeHashValueVector(0x01);
449 dummy_result.cert_status = 0; 461 dummy_result.cert_status = 0;
450 462
451 MockCertVerifier dummy_verifier; 463 MockCertVerifier dummy_verifier;
452 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK); 464 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK);
453 465
454 HashValueVector expected_hashes = MakeHashValueVector(0x02); 466 HashValueVector expected_hashes = MakeHashValueVector(0x02);
455 TransportSecurityState transport_security_state_fail; 467 transport_security_state_.AddHPKP(
456 transport_security_state_fail.AddHPKP(
457 kTestHostname, base::Time::Now() + base::TimeDelta::FromSeconds(10000), 468 kTestHostname, base::Time::Now() + base::TimeDelta::FromSeconds(10000),
458 true, expected_hashes, GURL()); 469 true, expected_hashes, GURL());
459 470
460 MockCTPolicyEnforcer policy_enforcer(true /*is_ev*/); 471 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
461 ProofVerifierChromium proof_verifier(&dummy_verifier, &policy_enforcer, 472 &transport_security_state_,
462 &transport_security_state_fail,
463 ct_verifier_.get()); 473 ct_verifier_.get());
464 474
465 std::unique_ptr<DummyProofVerifierCallback> callback( 475 std::unique_ptr<DummyProofVerifierCallback> callback(
466 new DummyProofVerifierCallback); 476 new DummyProofVerifierCallback);
467 QuicAsyncStatus status = proof_verifier.VerifyProof( 477 QuicAsyncStatus status = proof_verifier.VerifyProof(
468 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "", 478 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
469 GetTestSignature(), verify_context_.get(), &error_details_, &details_, 479 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
470 callback.get()); 480 callback.get());
471 ASSERT_EQ(QUIC_SUCCESS, status); 481 ASSERT_EQ(QUIC_SUCCESS, status);
472 482
473 ASSERT_TRUE(details_.get()); 483 ASSERT_TRUE(details_.get());
474 ProofVerifyDetailsChromium* verify_details = 484 ProofVerifyDetailsChromium* verify_details =
475 static_cast<ProofVerifyDetailsChromium*>(details_.get()); 485 static_cast<ProofVerifyDetailsChromium*>(details_.get());
476 EXPECT_TRUE(verify_details->pkp_bypassed); 486 EXPECT_TRUE(verify_details->pkp_bypassed);
477 } 487 }
478 488
489 // Test that when CT is required (in this case, by the delegate), the
490 // absence of CT information is a socket error.
491 TEST_F(ProofVerifierChromiumTest, CTIsRequired) {
492 scoped_refptr<X509Certificate> test_cert = GetTestServerCertificate();
493 ASSERT_TRUE(test_cert);
494
495 CertVerifyResult dummy_result;
496 dummy_result.verified_cert = test_cert;
497 dummy_result.is_issued_by_known_root = true;
498 dummy_result.public_key_hashes = MakeHashValueVector(0x01);
499 dummy_result.cert_status = 0;
500
501 MockCertVerifier dummy_verifier;
502 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK);
503
504 // Set up CT.
505 MockRequireCTDelegate require_ct_delegate;
506 transport_security_state_.SetRequireCTDelegate(&require_ct_delegate);
507 EXPECT_CALL(require_ct_delegate, IsCTRequiredForHost(_))
508 .WillRepeatedly(Return(TransportSecurityState::RequireCTDelegate::
509 CTRequirementLevel::NOT_REQUIRED));
510 EXPECT_CALL(require_ct_delegate, IsCTRequiredForHost(kTestHostname))
511 .WillRepeatedly(Return(TransportSecurityState::RequireCTDelegate::
512 CTRequirementLevel::REQUIRED));
513 EXPECT_CALL(ct_policy_enforcer_, DoesConformToCertPolicy(_, _, _))
514 .WillRepeatedly(
515 Return(ct::CertPolicyCompliance::CERT_POLICY_NOT_ENOUGH_SCTS));
516
517 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
518 &transport_security_state_,
519 ct_verifier_.get());
520
521 std::unique_ptr<DummyProofVerifierCallback> callback(
522 new DummyProofVerifierCallback);
523 QuicAsyncStatus status = proof_verifier.VerifyProof(
524 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
525 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
526 callback.get());
527 ASSERT_EQ(QUIC_FAILURE, status);
528
529 ASSERT_TRUE(details_.get());
530 ProofVerifyDetailsChromium* verify_details =
531 static_cast<ProofVerifyDetailsChromium*>(details_.get());
532 EXPECT_TRUE(verify_details->cert_verify_result.cert_status &
533 CERT_STATUS_CERTIFICATE_TRANSPARENCY_REQUIRED);
534 }
535
536 // Test that CT is considered even when HPKP fails.
537 TEST_F(ProofVerifierChromiumTest, PKPAndCTBothTested) {
538 scoped_refptr<X509Certificate> test_cert = GetTestServerCertificate();
539 ASSERT_TRUE(test_cert);
540
541 CertVerifyResult dummy_result;
542 dummy_result.verified_cert = test_cert;
543 dummy_result.is_issued_by_known_root = true;
544 dummy_result.public_key_hashes = MakeHashValueVector(0x01);
545 dummy_result.cert_status = 0;
546
547 MockCertVerifier dummy_verifier;
548 dummy_verifier.AddResultForCert(test_cert.get(), dummy_result, OK);
549
550 // Set up HPKP.
551 HashValueVector pin_hashes = MakeHashValueVector(0x02);
552 transport_security_state_.AddHPKP(
553 kTestHostname, base::Time::Now() + base::TimeDelta::FromSeconds(10000),
554 true, pin_hashes, GURL());
555
556 // Set up CT.
557 MockRequireCTDelegate require_ct_delegate;
558 transport_security_state_.SetRequireCTDelegate(&require_ct_delegate);
559 EXPECT_CALL(require_ct_delegate, IsCTRequiredForHost(_))
560 .WillRepeatedly(Return(TransportSecurityState::RequireCTDelegate::
561 CTRequirementLevel::NOT_REQUIRED));
562 EXPECT_CALL(require_ct_delegate, IsCTRequiredForHost(kTestHostname))
563 .WillRepeatedly(Return(TransportSecurityState::RequireCTDelegate::
564 CTRequirementLevel::REQUIRED));
565 EXPECT_CALL(ct_policy_enforcer_, DoesConformToCertPolicy(_, _, _))
566 .WillRepeatedly(
567 Return(ct::CertPolicyCompliance::CERT_POLICY_NOT_ENOUGH_SCTS));
568
569 ProofVerifierChromium proof_verifier(&dummy_verifier, &ct_policy_enforcer_,
570 &transport_security_state_,
571 ct_verifier_.get());
572
573 std::unique_ptr<DummyProofVerifierCallback> callback(
574 new DummyProofVerifierCallback);
575 QuicAsyncStatus status = proof_verifier.VerifyProof(
576 kTestHostname, kTestPort, kTestConfig, QUIC_VERSION_25, "", certs_, "",
577 GetTestSignature(), verify_context_.get(), &error_details_, &details_,
578 callback.get());
579 ASSERT_EQ(QUIC_FAILURE, status);
580
581 ASSERT_TRUE(details_.get());
582 ProofVerifyDetailsChromium* verify_details =
583 static_cast<ProofVerifyDetailsChromium*>(details_.get());
584 EXPECT_TRUE(verify_details->cert_verify_result.cert_status &
585 CERT_STATUS_PINNED_KEY_MISSING);
586 EXPECT_TRUE(verify_details->cert_verify_result.cert_status &
587 CERT_STATUS_CERTIFICATE_TRANSPARENCY_REQUIRED);
588 }
589
479 } // namespace test 590 } // namespace test
480 } // namespace net 591 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/crypto/proof_verifier_chromium.cc ('k') | net/socket/ssl_client_socket_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698