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 */
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
virtual const PositionFix & position_fix()=0
virtual Clock::time_point now() const =0
static CertificateValidity valid()
Create CertificateValidity signalling a valid certificate This method is equivalent to default constr...
CertificateInvalidReason reason() const
Get reason for certificate invalidity This call is only safe if reason is available,...
void insert(const Certificate &certificate)
std::list< Certificate > lookup(const HashedId8 &id, SubjectType type)
virtual const ecdsa256::PrivateKey & own_private_key()=0
virtual const Certificate & own_certificate()=0
virtual std::list< Certificate > own_chain()=0
virtual CertificateValidity check_certificate(const Certificate &certificate)=0
void request_unrecognized_certificate(HashedId8 id) override
std::list< HeaderField > prepare_header(const SignRequest &request, CertificateProvider &certificate_provider) override
IntX specified in TS 103 097 v1.2.1, section 4.2.1.
Definition int_x.hpp:21
virtual void request_unrecognized_certificate(HashedId8 id)=0
virtual std::list< HeaderField > prepare_header(const SignRequest &req, CertificateProvider &certprvd)=0
bool is_known(const HashedId8 &digest) const
bool announce(const HashedId8 &digest)
const Certificate * lookup(const HashedId8 &digest) const
virtual CertificateCache & cache()=0
virtual const PrivateKey & own_private_key()=0
virtual const Certificate & own_certificate()=0
virtual Verdict valid_for_signing(const CertificateView &certificate, ItsAid app)=0
Verdict valid_for_signing(const CertificateView &, ItsAid) override
void request_unrecognized_certificate(HashedId8 id) override
void prepare_header(const SignRequest &request, SecuredMessage &secured_message) override
Verdict valid_for_signing(const CertificateView &, ItsAid) 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
described in TS 103 097 v1.2.1 (2015-06), section 6.1
SecuredMessage as specified in TS 103 097 v1.2.1, section 5.1.
const TrailerField * trailer_field(TrailerFieldType type) const