Vanetza
Loading...
Searching...
No Matches
sign_header_policy.hpp
1#pragma once
2#include <vanetza/common/clock.hpp>
3#include <vanetza/common/runtime.hpp>
4#include <vanetza/security/hashed_id.hpp>
5#include <vanetza/security/peer_request_tracker.hpp>
6#include <boost/optional/optional.hpp>
7
8namespace vanetza
9{
10
11// forward declaration
13
14namespace security
15{
16
17// forward declarations
18class CertificateProvider;
19struct SignRequest;
20
21namespace v3
22{
23
24
25/**
26 * SignHeaderPolicy is used while signing messages
27 *
28 * SignHeaderPolicy determines the header fields to be included in the secured message.
29 * Other components can influence the policy's behaviour by calling one of its "report" methods.
30 */
32{
33public:
34 /**
35 * Prepare header fields for next secured message.
36 *
37 * \param req signing request (including ITS-AID for example)
38 * \param secured_message output message
39 * \return header fields
40 */
41 virtual void prepare_header(const SignRequest& req, SecuredMessage& secured_message) = 0;
42
43 /**
44 * Mark certificate as unrecognized in next secured message
45 * \param id hash of unknown certificate
46 */
47 virtual void request_unrecognized_certificate(HashedId8 id) = 0;
48
49 /**
50 * Request a full certificate to be included in next secured message
51 */
52 virtual void request_certificate() = 0;
53
54 /**
55 * Enqueue a certificate for P2P distribution.
56 * \param id hash of requested certificate
57 */
58 virtual void enqueue_p2p_request(HashedId3 id) = 0;
59
60 /**
61 * Discard a P2P certificate request.
62 * \param id hash of requested certificate
63 */
64 virtual void discard_p2p_request(HashedId3 id) = 0;
65
66 virtual ~SignHeaderPolicy() = default;
67};
68
69/**
70 * DefaultSignHeaderPolicy implements the default behaviour specified by ETSI TS 103 097 V2.1.1
71 */
72class DefaultSignHeaderPolicy : public SignHeaderPolicy
73{
74public:
75 DefaultSignHeaderPolicy(const Runtime&, PositionProvider& positioning, CertificateProvider&);
76
77 void prepare_header(const SignRequest& request, SecuredMessage& secured_message) override;
78 void request_unrecognized_certificate(HashedId8 id) override;
79 void request_certificate() override;
80 void enqueue_p2p_request(HashedId3) override;
81 void discard_p2p_request(HashedId3) override;
82
83private:
84 const Runtime& m_runtime;
85 PositionProvider& m_positioning;
86 CertificateProvider& m_cert_provider;
87 Clock::time_point m_cam_next_certificate;
88 bool m_cert_requested;
89 PeerRequestTracker m_incoming_requests;
90 PeerRequestTracker m_outgoing_requests;
91};
92
93} // namespace v3
94} // namespace security
95} // namespace vanetza
96
void request_unrecognized_certificate(HashedId8 id) override
void prepare_header(const SignRequest &request, SecuredMessage &secured_message) override
virtual void discard_p2p_request(HashedId3 id)=0
virtual void enqueue_p2p_request(HashedId3 id)=0
virtual void prepare_header(const SignRequest &req, SecuredMessage &secured_message)=0
virtual void request_unrecognized_certificate(HashedId8 id)=0