4242
4343namespace net {
4444
45- using net::CertVerifier;
46- using net::CTVerifier;
47- using net::MultiLogCTVerifier;
48- using quic::ProofVerifier;
49- using net::ProofVerifierChromium;
50- using quic::QuicStringPiece;
51- using net::TransportSecurityState;
5245using std::cout;
5346using std::cerr;
5447using std::endl;
5548using std::string;
5649
50+ // FakeProofSource for server
51+ class FakeProofSource : public quic ::ProofSource {
52+ public:
53+ FakeProofSource () {}
54+ ~FakeProofSource () override {}
55+
56+ void GetProof (const quic::QuicSocketAddress& server_address,
57+ const std::string& hostname,
58+ const std::string& server_config,
59+ quic::QuicTransportVersion transport_version,
60+ quic::QuicStringPiece chlo_hash,
61+ std::unique_ptr<Callback> callback) override {
62+ quic::QuicReferenceCountedPointer<ProofSource::Chain> chain =
63+ GetCertChain (server_address, hostname);
64+ quic::QuicCryptoProof proof;
65+ proof.signature = " fake signature" ;
66+ proof.leaf_cert_scts = " fake timestamp" ;
67+ callback->Run (true , chain, proof, nullptr );
68+ }
69+
70+ quic::QuicReferenceCountedPointer<Chain> GetCertChain (
71+ const quic::QuicSocketAddress& server_address,
72+ const std::string& hostname) override {
73+ std::vector<std::string> certs;
74+ certs.push_back (" fake cert" );
75+ return quic::QuicReferenceCountedPointer<ProofSource::Chain>(
76+ new ProofSource::Chain (certs));
77+ }
78+
79+ void ComputeTlsSignature (
80+ const quic::QuicSocketAddress& server_address,
81+ const std::string& hostname,
82+ uint16_t signature_algorithm,
83+ quic::QuicStringPiece in,
84+ std::unique_ptr<SignatureCallback> callback) override {
85+ callback->Run (true , " fake signature" );
86+ }
87+ };
88+
5789// FakeProofVerifier for client
5890class FakeProofVerifier : public quic ::ProofVerifier {
5991 public:
@@ -171,6 +203,26 @@ class RawClientImpl : public RQuicClientInterface,
171203 }
172204 }
173205 private:
206+ std::unique_ptr<quic::ProofVerifier> CreateProofVerifier () {
207+ std::unique_ptr<quic::ProofVerifier> proof_verifier;
208+ bool disable_cert = true ;
209+ if (disable_cert) {
210+ proof_verifier.reset (new FakeProofVerifier ());
211+ } else {
212+ // For secure QUIC we need to verify the cert chain.
213+ std::unique_ptr<net::CertVerifier> cert_verifier (net::CertVerifier::CreateDefault ());
214+ std::unique_ptr<net::TransportSecurityState> transport_security_state (
215+ new net::TransportSecurityState);
216+ std::unique_ptr<net::MultiLogCTVerifier> ct_verifier (new net::MultiLogCTVerifier ());
217+ std::unique_ptr<net::CTPolicyEnforcer> ct_policy_enforcer (
218+ new net::DefaultCTPolicyEnforcer ());
219+ proof_verifier.reset (new net::ProofVerifierChromium (
220+ cert_verifier.get (), ct_policy_enforcer.get (),
221+ transport_security_state.get (), ct_verifier.get ()));
222+ }
223+ return proof_verifier;
224+ }
225+
174226 void InitAndRun (std::string host, int port) {
175227 base::MessageLoopForIO message_loop;
176228 base::RunLoop run_loop;
@@ -196,26 +248,8 @@ class RawClientImpl : public RQuicClientInterface,
196248 net::PRIVACY_MODE_DISABLED);
197249 quic::ParsedQuicVersionVector versions = quic::CurrentSupportedVersions ();
198250
199- // For secure QUIC we need to verify the cert chain.
200- std::unique_ptr<CertVerifier> cert_verifier (CertVerifier::CreateDefault ());
201- std::unique_ptr<TransportSecurityState> transport_security_state (
202- new TransportSecurityState);
203- std::unique_ptr<MultiLogCTVerifier> ct_verifier (new MultiLogCTVerifier ());
204- std::unique_ptr<net::CTPolicyEnforcer> ct_policy_enforcer (
205- new net::DefaultCTPolicyEnforcer ());
206- std::unique_ptr<quic::ProofVerifier> proof_verifier;
207-
208- bool disable_cert = true ;
209- if (disable_cert) {
210- proof_verifier.reset (new FakeProofVerifier ());
211- } else {
212- proof_verifier.reset (new ProofVerifierChromium (
213- cert_verifier.get (), ct_policy_enforcer.get (),
214- transport_security_state.get (), ct_verifier.get ()));
215- }
216-
217251 net::QuicRawClient client (quic::QuicSocketAddress (ip_addr, port),
218- server_id, versions, std::move (proof_verifier ));
252+ server_id, versions, CreateProofVerifier ( ));
219253
220254 client.set_initial_max_packet_length (quic::kDefaultMaxPacketSize );
221255 if (!client.Initialize ()) {
@@ -397,13 +431,20 @@ class RawServerImpl : public RQuicServerInterface,
397431 }
398432
399433 private:
400- std::unique_ptr<quic::ProofSource> CreateProofSource (
401- const base::FilePath& cert_path,
402- const base::FilePath& key_path) {
403- std::unique_ptr<net::ProofSourceChromium> proof_source (
404- new net::ProofSourceChromium ());
405- CHECK (proof_source->Initialize (cert_path, key_path, base::FilePath ()));
406- return std::move (proof_source);
434+ std::unique_ptr<quic::ProofSource> CreateProofSource () {
435+ bool disable_cert = true ;
436+ if (disable_cert) {
437+ std::unique_ptr<FakeProofSource> proof_source (
438+ new FakeProofSource ());
439+ return proof_source;
440+ } else {
441+ std::unique_ptr<net::ProofSourceChromium> proof_source (
442+ new net::ProofSourceChromium ());
443+ CHECK (proof_source->Initialize (
444+ base::FilePath (cert_file_),
445+ base::FilePath (key_file_), base::FilePath ()));
446+ return proof_source;
447+ }
407448 }
408449
409450 void InitAndRun (int port) {
@@ -415,7 +456,7 @@ class RawServerImpl : public RQuicServerInterface,
415456
416457 quic::QuicConfig config;
417458 net::QuicRawServer server (
418- CreateProofSource (base::FilePath (cert_file_), base::FilePath (key_file_) ),
459+ CreateProofSource (),
419460 config, quic::QuicCryptoServerConfig::ConfigOptions (),
420461 quic::AllSupportedVersions ());
421462
0 commit comments