42
42
43
43
namespace net {
44
44
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;
52
45
using std::cout;
53
46
using std::cerr;
54
47
using std::endl;
55
48
using std::string;
56
49
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
+
57
89
// FakeProofVerifier for client
58
90
class FakeProofVerifier : public quic ::ProofVerifier {
59
91
public:
@@ -171,6 +203,26 @@ class RawClientImpl : public RQuicClientInterface,
171
203
}
172
204
}
173
205
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
+
174
226
void InitAndRun (std::string host, int port) {
175
227
base::MessageLoopForIO message_loop;
176
228
base::RunLoop run_loop;
@@ -196,26 +248,8 @@ class RawClientImpl : public RQuicClientInterface,
196
248
net::PRIVACY_MODE_DISABLED);
197
249
quic::ParsedQuicVersionVector versions = quic::CurrentSupportedVersions ();
198
250
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
-
217
251
net::QuicRawClient client (quic::QuicSocketAddress (ip_addr, port),
218
- server_id, versions, std::move (proof_verifier ));
252
+ server_id, versions, CreateProofVerifier ( ));
219
253
220
254
client.set_initial_max_packet_length (quic::kDefaultMaxPacketSize );
221
255
if (!client.Initialize ()) {
@@ -397,13 +431,20 @@ class RawServerImpl : public RQuicServerInterface,
397
431
}
398
432
399
433
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
+ }
407
448
}
408
449
409
450
void InitAndRun (int port) {
@@ -415,7 +456,7 @@ class RawServerImpl : public RQuicServerInterface,
415
456
416
457
quic::QuicConfig config;
417
458
net::QuicRawServer server (
418
- CreateProofSource (base::FilePath (cert_file_), base::FilePath (key_file_) ),
459
+ CreateProofSource (),
419
460
config, quic::QuicCryptoServerConfig::ConfigOptions (),
420
461
quic::AllSupportedVersions ());
421
462
0 commit comments