|  | // Copyright 2016 The Chromium Authors | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //     https://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | #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_ |