Vanetza
Loading...
Searching...
No Matches
hybrid_certificate_validator.hpp
1#pragma once
2
3#include <vanetza/security/v3/certificate_validator.hpp>
4#include <vanetza/security/pqc/fndsa512.hpp>
5
6namespace vanetza
7{
8
10class Runtime;
11
12namespace security
13{
14
15class Backend;
16
17namespace v3
18{
19class CertificateView;
20class IssuerLookup;
21class LocationChecker;
23class TrustStore;
24} // namespace v3
25
26namespace pqc
27{
28
29/**
30 * Default V3 policy checks plus cryptographic certificate-chain validation.
31 *
32 * This class is compiled only for the experimental profile. Message
33 * signatures remain classical ECC; this validator concerns the nested
34 * signatures on certificates in the Root -> AA -> AT chain.
35 */
37{
38public:
39 enum class VerificationPolicy
40 {
41 ClassicalOnly,
42 HybridIfPresent,
43 HybridRequired,
44 };
45
46 Verdict valid_for_signing(const v3::CertificateView&, ItsAid) override;
47
48 void use_runtime(const Runtime*);
49 void use_position_provider(PositionProvider*);
50 void use_issuer_lookup(const v3::IssuerLookup*);
51 void use_location_checker(const v3::LocationChecker*);
52 void use_revocation_lookup(const v3::RevocationLookup*);
53 void use_trust_store(const v3::TrustStore*);
54 void use_backends(::vanetza::security::Backend*, Backend*);
55 void use_verification_policy(VerificationPolicy);
56
57 void disable_time_checks(bool);
58 void disable_location_checks(bool);
59 void disable_chain_consistency_checks(bool);
60 void disable_region_consistency_checks(bool);
61
62private:
63 bool chain_is_authentic(const v3::CertificateView&) const;
64 bool alternative_signature_is_accepted(
65 const v3::CertificateView& subject, const v3::CertificateView* issuer) const;
66
67 v3::DefaultCertificateValidator m_policy_validator;
68 const v3::IssuerLookup* m_issuer_lookup = nullptr;
69 const v3::TrustStore* m_trust_store = nullptr;
70 ::vanetza::security::Backend* m_ecc_backend = nullptr;
71 Backend* m_pqc_backend = nullptr;
72 VerificationPolicy m_verification_policy = VerificationPolicy::HybridRequired;
73};
74
75} // namespace pqc
76} // namespace security
77} // namespace vanetza
Verdict valid_for_signing(const v3::CertificateView &, ItsAid) override
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