|  | // Copyright 2016 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef BSSL_PKI_CERT_ISSUER_SOURCE_STATIC_H_ | 
|  | #define BSSL_PKI_CERT_ISSUER_SOURCE_STATIC_H_ | 
|  |  | 
|  | #include <unordered_map> | 
|  | #include <vector> | 
|  |  | 
|  | #include <openssl/base.h> | 
|  |  | 
|  | #include "cert_issuer_source.h" | 
|  |  | 
|  | BSSL_NAMESPACE_BEGIN | 
|  |  | 
|  | // Synchronously returns issuers from a pre-supplied set. | 
|  | class OPENSSL_EXPORT CertIssuerSourceStatic : public CertIssuerSource { | 
|  | public: | 
|  | CertIssuerSourceStatic(); | 
|  |  | 
|  | CertIssuerSourceStatic(const CertIssuerSourceStatic &) = delete; | 
|  | CertIssuerSourceStatic &operator=(const CertIssuerSourceStatic &) = delete; | 
|  |  | 
|  | ~CertIssuerSourceStatic() override; | 
|  |  | 
|  | // Adds |cert| to the set of certificates that this CertIssuerSource will | 
|  | // provide. | 
|  | void AddCert(std::shared_ptr<const ParsedCertificate> cert); | 
|  |  | 
|  | // Clears the set of certificates. | 
|  | void Clear(); | 
|  |  | 
|  | // Returns a vector containing all the certificates added to this source. | 
|  | std::vector<std::shared_ptr<const ParsedCertificate>> Certs() const; | 
|  |  | 
|  | size_t size() const { return intermediates_.size(); } | 
|  |  | 
|  | // CertIssuerSource implementation: | 
|  | void SyncGetIssuersOf(const ParsedCertificate *cert, | 
|  | ParsedCertificateList *issuers) override; | 
|  | void AsyncGetIssuersOf(const ParsedCertificate *cert, | 
|  | std::unique_ptr<Request> *out_req) override; | 
|  |  | 
|  | private: | 
|  | // The certificates that the CertIssuerSourceStatic can return, keyed on the | 
|  | // normalized subject value. | 
|  | std::unordered_multimap<std::string_view, | 
|  | std::shared_ptr<const ParsedCertificate>> | 
|  | intermediates_; | 
|  | }; | 
|  |  | 
|  | BSSL_NAMESPACE_END | 
|  |  | 
|  | #endif  // BSSL_PKI_CERT_ISSUER_SOURCE_STATIC_H_ |