8 #include <botan/certstor.h>
9 #include <botan/internal/filesystem.h>
10 #include <botan/hash.h>
21 for(
const auto& c : m_certs)
25 m_certs.push_back(std::make_shared<const X509_Certificate>(cert));
30 for(
const auto& c : m_certs)
34 m_certs.push_back(cert);
39 std::vector<X509_DN> subjects;
40 for(
const auto& cert : m_certs)
41 subjects.push_back(cert->subject_dn());
45 std::shared_ptr<const X509_Certificate>
47 const std::vector<uint8_t>& key_id)
const
49 for(
const auto& cert : m_certs)
54 std::vector<uint8_t> skid = cert->subject_key_id();
56 if(skid.size() && skid != key_id)
60 if(cert->subject_dn() == subject_dn)
68 std::shared_ptr<const X509_Certificate>
71 if(key_hash.size() != 20)
72 throw Invalid_Argument(
"Certificate_Store_In_Memory::find_cert_by_pubkey_sha1 invalid hash");
76 for(
const auto& cert : m_certs){
77 hash->update(cert->subject_public_key_bitstring());
78 if(key_hash == hash->final_stdvec())
85 std::shared_ptr<const X509_Certificate>
88 if(subject_hash.size() != 32)
89 throw Invalid_Argument(
"Certificate_Store_In_Memory::find_cert_by_raw_subject_dn_sha256 invalid hash");
93 for(
const auto& cert : m_certs){
94 hash->update(cert->raw_subject_dn());
95 if(subject_hash == hash->final_stdvec())
104 std::shared_ptr<const X509_CRL> crl_s = std::make_shared<const X509_CRL>(crl);
110 X509_DN crl_issuer = crl->issuer_dn();
112 for(
auto& c : m_crls)
115 if(c->issuer_dn() == crl_issuer)
117 if(c->this_update() <= crl->this_update())
124 m_crls.push_back(crl);
131 for(
const auto& c : m_crls)
136 std::vector<uint8_t> akid = c->authority_key_id();
138 if(akid.size() && akid != key_id)
142 if(c->issuer_dn() == subject.
issuer_dn())
154 #if defined(BOTAN_TARGET_OS_HAS_FILESYSTEM)
161 for(
auto&& cert_file : maybe_certs)
165 m_certs.push_back(std::make_shared<X509_Certificate>(cert_file));
167 catch(std::exception&)
virtual std::shared_ptr< const X509_CRL > find_crl_for(const X509_Certificate &subject) const
std::shared_ptr< const X509_Certificate > find_cert_by_raw_subject_dn_sha256(const std::vector< uint8_t > &subject_hash) const override
std::shared_ptr< const X509_Certificate > find_cert(const X509_DN &subject_dn, const std::vector< uint8_t > &key_id) const override
std::shared_ptr< const X509_CRL > find_crl_for(const X509_Certificate &subject) const override
std::vector< X509_DN > all_subjects() const override
Certificate_Store_In_Memory()=default
static std::unique_ptr< HashFunction > create(const std::string &algo_spec, const std::string &provider="")
void add_certificate(const X509_Certificate &cert)
std::shared_ptr< const X509_Certificate > find_cert_by_pubkey_sha1(const std::vector< uint8_t > &key_hash) const override
std::vector< std::string > get_files_recursive(const std::string &dir)
void add_crl(const X509_CRL &crl)
X509_DN issuer_dn() const
std::vector< uint8_t > authority_key_id() const