Vanetza
Loading...
Searching...
No Matches
certificate_validator.hpp
1#pragma once
2#include <vanetza/common/its_aid.hpp>
3#include <vanetza/security/v3/location_checker.hpp>
4
5namespace vanetza
6{
7
8// forward declarations
10class Runtime;
11
12namespace security
13{
14namespace v3
15{
16
17// forward declarations
18class Certificate;
19class CertificateView;
20class IssuerLookup;
22class TrustStore;
23
25{
26public:
27 enum class Verdict
28 {
29 Unknown,
30 Valid,
31 Expired,
32 Revoked,
33 Untrusted,
34 InconsistentChain,
35 OutsideRegion,
36 InsufficientPermission,
37 Misconfiguration,
38 };
39
40 /**
41 * Check if a certificate can be used for signing a message
42 * \param certificate pre-validated AT certificate
43 * \param app ITS-AID of the message to be signed
44 */
45 virtual Verdict valid_for_signing(const CertificateView& certificate, ItsAid app) = 0;
46
47 virtual ~CertificateValidator() = default;
48};
49
51{
52public:
53 Verdict valid_for_signing(const CertificateView&, ItsAid) override;
54
55 void use_runtime(const Runtime* runtime);
56 void use_position_provider(PositionProvider* provider);
57 void use_issuer_lookup(const IssuerLookup* lookup);
58 void use_location_checker(const LocationChecker* checker);
59 void use_revocation_lookup(const RevocationLookup* lookup);
60 void use_trust_store(const TrustStore* store);
61
62 void disable_time_checks(bool flag);
63 void disable_location_checks(bool flag);
64 void disable_chain_consistency_checks(bool flag);
65 void disable_region_consistency_checks(bool flag);
66
67private:
68 const Certificate* find_issuer_certificate(const CertificateView& certificate) const;
69 bool chain_is_consistent(const CertificateView& signing_cert, ItsAid its_aid) const;
70 bool chain_is_revoked(const CertificateView& signing_cert) const;
71 bool check_consistency(const CertificateView& subject, const CertificateView& issuer, ItsAid its_aid) const;
72 bool is_chain_anchored(const CertificateView& signing_cert) const;
73
74 const Runtime* m_runtime = nullptr;
75 PositionProvider* m_position_provider = nullptr;
76 const IssuerLookup* m_issuer_lookup = nullptr;
77 const LocationChecker* m_location_checker = nullptr;
78 const RevocationLookup* m_revocation_lookup = nullptr;
79 const TrustStore* m_trust_store = nullptr;
80 bool m_disable_time_checks = false;
81 bool m_disable_location_checks = false;
82 bool m_disable_chain_consistency_checks = false;
83 bool m_disable_region_consistency_checks = false;
84};
85
87{
88public:
89 Verdict valid_for_signing(const CertificateView&, ItsAid) override
90 {
91 return Verdict::Valid;
92 }
93};
94
95} // namespace v3
96} // namespace security
97} // namespace vanetza
Verdict valid_for_signing(const v3::CertificateView &, ItsAid) override
virtual Verdict valid_for_signing(const CertificateView &certificate, ItsAid app)=0
boost::optional< HashedId8 > calculate_digest() 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
Verdict valid_for_signing(const CertificateView &, ItsAid) override