17 const HashedId8
id = calculate_hash(certificate);
20 std::list<Certificate> certs =
lookup(
id, certificate.subject_info.subject_type);
24 const auto binary_insert = convert_for_signing(certificate);
25 for (
auto& cert : certs) {
26 const auto binary_found = convert_for_signing(cert);
27 if (binary_insert == binary_found) {
33 Clock::duration lifetime = Clock::duration::zero();
34 if (certificate.subject_info.subject_type == SubjectType::Authorization_Ticket) {
38 lifetime = std::chrono::seconds(2);
39 }
else if (certificate.subject_info.subject_type == SubjectType::Authorization_Authority) {
43 lifetime = std::chrono::seconds(3600);
46 if (lifetime > Clock::duration::zero()) {
48 entry.certificate = certificate;
49 map_type::iterator stored = m_certificates.emplace(
id, entry);
50 heap_type::handle_type& handle = stored->second.handle;
51 handle = m_expiries.push(
Expiry { m_runtime.now() + lifetime, stored });
59 using iterator = std::multimap<HashedId8, CachedCertificate>::iterator;
60 std::pair<iterator, iterator> range = m_certificates.equal_range(
id);
62 std::list<Certificate> matches;
63 for (
auto item = range.first; item != range.second; ++item) {
66 auto subject_type = cert.subject_info.subject_type;
67 if (subject_type != type) {
71 matches.push_back(cert);
74 if (subject_type == SubjectType::Authorization_Ticket) {
75 refresh(item->second.handle, std::chrono::seconds(2));
76 }
else if (subject_type == SubjectType::Authorization_Authority) {
77 refresh(item->second.handle, std::chrono::seconds(3600));