1#include <vanetza/common/position_provider.hpp>
2#include <vanetza/common/position_fix.hpp>
3#include <vanetza/common/runtime.hpp>
4#include <vanetza/security/v3/certificate.hpp>
5#include <vanetza/security/v3/certificate_validator.hpp>
6#include <vanetza/security/v3/issuer_lookup.hpp>
7#include <vanetza/security/v3/revocation_lookup.hpp>
8#include <vanetza/security/v3/trust_store.hpp>
26 return issuer_time.start_validity <= subject_time.start_validity &&
27 issuer_time.end_validity >= subject_time.end_validity;
45 if (!subject_assurance) {
47 }
else if (!issuer_assurance) {
51 const auto subject_value = *subject_assurance;
52 const auto issuer_value = *issuer_assurance;
53 const std::uint8_t subject_level = (subject_value >> 5) & 0x07;
54 const std::uint8_t issuer_level = (issuer_value >> 5) & 0x07;
55 const std::uint8_t subject_confidence = (subject_value >> 2) & 0x07;
56 const std::uint8_t issuer_confidence = (issuer_value >> 2) & 0x07;
58 return subject_level < issuer_level ||
59 (subject_level == issuer_level && subject_confidence <= issuer_confidence);
71 if (!m_disable_time_checks && !m_runtime) {
72 return Verdict::Misconfiguration;
73 }
else if (!m_disable_location_checks && (!m_position_provider || !m_location_checker)) {
74 return Verdict::Misconfiguration;
76 return Verdict::InsufficientPermission;
78 return Verdict::Expired;
79 }
else if (!is_chain_anchored(signing_cert)) {
80 return Verdict::Untrusted;
81 }
else if (!chain_is_consistent(signing_cert, its_aid)) {
82 return Verdict::InconsistentChain;
83 }
else if (chain_is_revoked(signing_cert)) {
84 return Verdict::Revoked;
86 Verdict verdict = Verdict::Valid;
87 if (!m_disable_location_checks) {
88 if (m_position_provider) {
92 verdict = Verdict::OutsideRegion;
95 auto issuing_cert = find_issuer_certificate(signing_cert);
97 verdict = Verdict::OutsideRegion;
113 m_position_provider = pp;
118 m_issuer_lookup = lookup;
123 m_location_checker = checker;
128 m_revocation_lookup = lookup;
133 m_trust_store = store;
138 m_disable_time_checks = flag;
143 m_disable_location_checks = flag;
148 m_disable_chain_consistency_checks = flag;
153 m_disable_region_consistency_checks = flag;
158 if (m_issuer_lookup) {
160 if (maybe_issuer_digest) {
170 if (!m_trust_store || !m_issuer_lookup) {
175 constexpr int max_chain_depth = 8;
177 for (
int depth = 0; depth < max_chain_depth; ++depth) {
181 return cert_digest && !m_trust_store->lookup(*cert_digest).empty();
184 if (!issuer_digest) {
198 if (m_disable_chain_consistency_checks) {
202 if (!m_issuer_lookup) {
206 constexpr int max_chain_depth = 8;
209 const Certificate* issuer = find_issuer_certificate(*subject);
213 if (!check_consistency(*subject, *issuer, its_aid)) {
224 if (!m_revocation_lookup || !m_issuer_lookup) {
230 constexpr int max_chain_depth = 8;
232 for (
int depth = 0; depth < max_chain_depth; ++depth) {
235 if (!cert_digest || !issuer_digest) {
253 return check_time_consistency(subject, issuer) &&
254 check_permission_consistency(subject, issuer, its_aid) &&
255 check_assurance_consistency(subject, issuer) &&
256 (m_disable_region_consistency_checks || check_region_consistency(subject, issuer));
virtual const PositionFix & position_fix()=0
virtual Clock::time_point now() const =0
bool valid_at_timepoint(const Clock::time_point &time_point) const
StartAndEndValidity get_start_and_end_validity() const
bool is_allowed_to_issue(ItsAid aid) const
bool is_at_certificate() const
bool is_ca_certificate() const
bool issuer_is_self() const
bool valid_for_application(ItsAid aid) const
boost::optional< HashedId8 > calculate_digest() const
bool valid_at_location(const PositionFix &location, const LocationChecker *lc) const
bool has_region_restriction() const
bool region_is_within(const CertificateView &issuer) const
boost::optional< std::uint8_t > assurance_level() const
boost::optional< HashedId8 > issuer_digest() const
Verdict valid_for_signing(const CertificateView &, ItsAid) override
virtual const Certificate * find_issuer(const HashedId8 &digest) const =0
virtual bool is_revoked(const HashedId8 &issuer, const HashedId8 &cert) const =0