Vanetza
 
Loading...
Searching...
No Matches
sign_header_policy.hpp
1#ifndef SIGN_HEADER_POLICY_HPP_KJIIEGCH
2#define SIGN_HEADER_POLICY_HPP_KJIIEGCH
3
4#include <vanetza/common/clock.hpp>
5#include <vanetza/common/runtime.hpp>
6#include <vanetza/security/hashed_id.hpp>
7#include <vanetza/security/v2/header_field.hpp>
8#include <set>
9
10namespace vanetza
11{
12
13// forward declaration
14class PositionProvider;
15
16namespace security
17{
18
19// forward declarations
20class CertificateProvider;
21struct SignRequest;
22
23namespace v2
24{
25
26/**
27 * SignHeaderPolicy is used while signing messages
28 *
29 * SignHeaderPolicy determines the header fields to be included in the secured message.
30 * Other components can influence the policy's behaviour by calling one of its "report" methods.
31 */
33{
34public:
35 /**
36 * Prepare header fields for next secured message.
37 *
38 * \param req signing request (including ITS-AID for example)
39 * \param certprvd available certificates
40 * \return header fields
41 */
42 virtual std::list<HeaderField> prepare_header(const SignRequest& req, CertificateProvider& certprvd) = 0;
43
44 /**
45 * Mark certificate as unrecognized in next secured message
46 * \param id hash of unknown certificate
47 */
48 virtual void request_unrecognized_certificate(HashedId8 id) = 0;
49
50 /**
51 * Request a full certificate to be included in next secured message
52 */
53 virtual void request_certificate() = 0;
54
55 /**
56 * Request a full certificate chain to be included in next secured message
57 */
58 virtual void request_certificate_chain() = 0;
59
60 virtual ~SignHeaderPolicy() = default;
61};
62
63/**
64 * DefaultSignHeaderPolicy implements the default behaviour specified by ETSI TS 103 097 V1.2.1
65 */
67{
68public:
70
71 std::list<HeaderField> prepare_header(const SignRequest& request, CertificateProvider& certificate_provider) override;
72 void request_unrecognized_certificate(HashedId8 id) override;
73 void request_certificate() override;
74 void request_certificate_chain() override;
75
76private:
77 const Runtime& m_runtime;
78 PositionProvider& m_positioning;
79 Clock::time_point m_cam_next_certificate;
80 std::set<HashedId3> m_unknown_certificates;
81 bool m_cert_requested;
82 bool m_chain_requested;
83};
84
85} // namespace v2
86} // namespace security
87} // namespace vanetza
88
89#endif /* SIGN_HEADER_POLICY_HPP_KJIIEGCH */
void request_unrecognized_certificate(HashedId8 id) override
std::list< HeaderField > prepare_header(const SignRequest &request, CertificateProvider &certificate_provider) override
virtual void request_unrecognized_certificate(HashedId8 id)=0
virtual std::list< HeaderField > prepare_header(const SignRequest &req, CertificateProvider &certprvd)=0