• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2020 The Chromium Authors
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_CERT_CERT_AND_CT_VERIFIER_H_
6 #define NET_CERT_CERT_AND_CT_VERIFIER_H_
7 
8 #include <memory>
9 
10 #include "net/base/completion_once_callback.h"
11 #include "net/base/net_export.h"
12 #include "net/cert/cert_verifier.h"
13 #include "net/cert/cert_verify_result.h"
14 #include "net/log/net_log_with_source.h"
15 
16 namespace net {
17 
18 class CTVerifier;
19 
20 // CertVerifier that also performs certificate transparency (CT) verification.
21 class NET_EXPORT CertAndCTVerifier : public CertVerifier {
22  public:
23   // Creates a CertAndCTVerifier that will use |cert_verifier| to perform the
24   // actual underlying cert verification and |ct_verifier| to perform the CT
25   // verification.
26   CertAndCTVerifier(std::unique_ptr<CertVerifier> cert_verifier,
27                     std::unique_ptr<CTVerifier> ct_verifier);
28 
29   ~CertAndCTVerifier() override;
30   CertAndCTVerifier(const CertAndCTVerifier&) = delete;
31   CertAndCTVerifier& operator=(const CertAndCTVerifier&) = delete;
32 
33   // CertVerifier implementation:
34   int Verify(const RequestParams& params,
35              CertVerifyResult* verify_result,
36              CompletionOnceCallback callback,
37              std::unique_ptr<Request>* out_req,
38              const NetLogWithSource& net_log) override;
39   void SetConfig(const Config& config) override;
40   void AddObserver(Observer* observer) override;
41   void RemoveObserver(Observer* observer) override;
42 
43  private:
44   void OnCertVerifyComplete(const RequestParams& params,
45                             CompletionOnceCallback callback,
46                             CertVerifyResult* verify_result,
47                             const NetLogWithSource& net_log,
48                             int result);
49 
50   // TODO(crbug.com/1211074): Expose CT log list as part of
51   // CertVerifier::Config.
52   std::unique_ptr<CertVerifier> cert_verifier_;
53   std::unique_ptr<CTVerifier> ct_verifier_;
54 };
55 
56 }  // namespace net
57 
58 #endif  // NET_CERT_CERT_AND_CT_VERIFIER_H_
59