fizz/tool/CertificateVerifiers.h (36 lines of code) (raw):

/* * Copyright (c) 2018-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include <fizz/protocol/CertificateVerifier.h> namespace fizz { /** * InsecureAcceptAnyCertificate is a CertificateVerifier that accepts any cert * chain Basically a noop CertificateVerifier. */ class InsecureAcceptAnyCertificate : public CertificateVerifier { public: InsecureAcceptAnyCertificate() {} void verify( const std::vector<std::shared_ptr<const fizz::PeerCert>>& /* unused */) const override { return; } std::vector<Extension> getCertificateRequestExtensions() const override { return std::vector<Extension>(); } }; /** * StoreCertificateChain is a CertificateVerifier decorator that stores the most * recent certificate chain that was presented to the client. * * It is not thread safe. Each Fizz connection should use a distinct instance oF * StoreCertificiateChain. */ class StoreCertificateChain : public CertificateVerifier { public: explicit StoreCertificateChain( std::unique_ptr<CertificateVerifier> delegateVerifier) : delegateVerifier_(std::move(delegateVerifier)) {} void verify(const std::vector<std::shared_ptr<const fizz::PeerCert>>& certs) const override { certs_ = certs; delegateVerifier_->verify(certs); } std::vector<Extension> getCertificateRequestExtensions() const override { return delegateVerifier_->getCertificateRequestExtensions(); } std::vector<std::shared_ptr<const fizz::PeerCert>> getCerts() const { return certs_; } private: mutable std::vector<std::shared_ptr<const fizz::PeerCert>> certs_; std::unique_ptr<CertificateVerifier> delegateVerifier_; }; } // namespace fizz