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