[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 1 | // Copyright 2013 The Chromium Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be | ||||
3 | // found in the LICENSE file. | ||||
4 | |||||
5 | #ifndef NET_QUIC_CRYPTO_PROOF_VERIFIER_CHROMIUM_H_ | ||||
6 | #define NET_QUIC_CRYPTO_PROOF_VERIFIER_CHROMIUM_H_ | ||||
7 | |||||
[email protected] | 5c78ce6 | 2014-03-13 19:48:01 | [diff] [blame] | 8 | #include <set> |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 9 | #include <string> |
10 | #include <vector> | ||||
11 | |||||
12 | #include "base/basictypes.h" | ||||
13 | #include "base/compiler_specific.h" | ||||
14 | #include "base/memory/scoped_ptr.h" | ||||
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 15 | #include "net/base/net_export.h" |
16 | #include "net/base/net_log.h" | ||||
17 | #include "net/cert/cert_verify_result.h" | ||||
[email protected] | c817c67 | 2014-03-21 22:25:34 | [diff] [blame^] | 18 | #include "net/cert/x509_certificate.h" |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 19 | #include "net/quic/crypto/proof_verifier.h" |
20 | |||||
21 | namespace net { | ||||
22 | |||||
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 23 | class CertVerifier; |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 24 | class SingleRequestCertVerifier; |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 25 | |
[email protected] | 72e6599 | 2013-07-30 17:16:14 | [diff] [blame] | 26 | // ProofVerifyDetailsChromium is the implementation-specific information that a |
27 | // ProofVerifierChromium returns about a certificate verification. | ||||
28 | struct ProofVerifyDetailsChromium : public ProofVerifyDetails { | ||||
29 | public: | ||||
30 | CertVerifyResult cert_verify_result; | ||||
31 | }; | ||||
32 | |||||
[email protected] | c817c67 | 2014-03-21 22:25:34 | [diff] [blame^] | 33 | // ProofVerifyContextChromium is the implementation-specific information that a |
34 | // ProofVerifierChromium needs in order to log correctly. | ||||
35 | struct ProofVerifyContextChromium : public ProofVerifyContext { | ||||
36 | public: | ||||
37 | explicit ProofVerifyContextChromium(const BoundNetLog& net_log) | ||||
38 | : net_log(net_log) {} | ||||
39 | |||||
40 | BoundNetLog net_log; | ||||
41 | }; | ||||
42 | |||||
[email protected] | 5c78ce6 | 2014-03-13 19:48:01 | [diff] [blame] | 43 | // ProofVerifierChromium implements the QUIC ProofVerifier interface. It is |
44 | // capable of handling multiple simultaneous requests. | ||||
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 45 | class NET_EXPORT_PRIVATE ProofVerifierChromium : public ProofVerifier { |
46 | public: | ||||
[email protected] | c817c67 | 2014-03-21 22:25:34 | [diff] [blame^] | 47 | explicit ProofVerifierChromium(CertVerifier* cert_verifier); |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 48 | virtual ~ProofVerifierChromium(); |
49 | |||||
50 | // ProofVerifier interface | ||||
[email protected] | d5c9e4ba | 2013-09-14 05:25:58 | [diff] [blame] | 51 | virtual Status VerifyProof(const std::string& hostname, |
[email protected] | 72e6599 | 2013-07-30 17:16:14 | [diff] [blame] | 52 | const std::string& server_config, |
53 | const std::vector<std::string>& certs, | ||||
54 | const std::string& signature, | ||||
[email protected] | c817c67 | 2014-03-21 22:25:34 | [diff] [blame^] | 55 | const ProofVerifyContext* verify_context, |
[email protected] | 72e6599 | 2013-07-30 17:16:14 | [diff] [blame] | 56 | std::string* error_details, |
[email protected] | c817c67 | 2014-03-21 22:25:34 | [diff] [blame^] | 57 | scoped_ptr<ProofVerifyDetails>* verify_details, |
[email protected] | 72e6599 | 2013-07-30 17:16:14 | [diff] [blame] | 58 | ProofVerifierCallback* callback) OVERRIDE; |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 59 | |
60 | private: | ||||
[email protected] | 5c78ce6 | 2014-03-13 19:48:01 | [diff] [blame] | 61 | class Job; |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 62 | |
[email protected] | 5c78ce6 | 2014-03-13 19:48:01 | [diff] [blame] | 63 | void OnJobComplete(Job* job); |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 64 | |
[email protected] | 5c78ce6 | 2014-03-13 19:48:01 | [diff] [blame] | 65 | // Set owning pointers to active jobs. |
66 | typedef std::set<Job*> JobSet; | ||||
67 | JobSet active_jobs_; | ||||
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 68 | |
[email protected] | 5c78ce6 | 2014-03-13 19:48:01 | [diff] [blame] | 69 | // Underlying verifier used to verify certificates. |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 70 | CertVerifier* const cert_verifier_; |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 71 | |
[email protected] | 2662ed56 | 2013-07-03 10:27:46 | [diff] [blame] | 72 | DISALLOW_COPY_AND_ASSIGN(ProofVerifierChromium); |
73 | }; | ||||
74 | |||||
75 | } // namespace net | ||||
76 | |||||
77 | #endif // NET_QUIC_CRYPTO_PROOF_VERIFIER_CHROMIUM_H_ |