Vanetza
Loading...
Searching...
No Matches
sign_service.hpp
1#ifndef SIGN_SERVICE_HPP_4MDQBSEF
2#define SIGN_SERVICE_HPP_4MDQBSEF
3
4#include <vanetza/common/byte_buffer.hpp>
5#include <vanetza/common/its_aid.hpp>
6#include <vanetza/common/position_provider.hpp>
7#include <vanetza/net/packet.hpp>
8#include <vanetza/security/hash_algorithm.hpp>
9#include <vanetza/security/key_type.hpp>
10#include <vanetza/security/secured_message.hpp>
11#include <vanetza/security/signing_policy.hpp>
12#include <boost/optional/optional.hpp>
13#include <functional>
14
15namespace vanetza
16{
17
18// forward declaration
19class Runtime;
20
21namespace security
22{
23
24// mandatory SN-SIGN.request parameters
26{
27 DownPacket plain_message;
28 ItsAid its_aid;
29 ByteBuffer permissions;
30 bool external_payload = false;
31 bool self_signed = false;
32};
33
34enum class SignConfirmError
35{
36 Unspecified,
37 No_Certificate,
38 No_Service,
39};
40
41// mandatory SN-SIGN.confirm parameters
43{
44 SignConfirm(SignConfirmError error, boost::optional<SecuredMessage> message)
45 : error(error), secured_message(std::move(message))
46 {
47 }
48
49 static SignConfirm success(SecuredMessage&& message)
50 {
51 return { SignConfirmError::Unspecified, std::move(message) };
52 }
53
54 static SignConfirm failure(SignConfirmError error)
55 {
56 return { error, boost::none };
57 }
58
59 SignConfirmError error;
60 boost::optional<SecuredMessage> secured_message;
61};
62
63/**
64 * Equivalant of SN-SIGN service in TS 102 723-8 v1.1.1
65 */
67{
68public:
69 virtual ~SignService() = default;
70 virtual SignConfirm sign(SignRequest&&) = 0;
71};
72
73} // namespace security
74} // namespace vanetza
75
76#endif /* SIGN_SERVICE_HPP_4MDQBSEF */
ChunckPacket is a packet consisting of several memory chunks.
virtual const PositionFix & position_fix()=0
virtual void cancel(const void *scope)=0
void update_rate(Clock::duration interval)
PositionUpdater(Runtime &runtime, PositionProvider &pos, Router &router)
void add(const DataRequestVariant &, const DataRequest::Repetition &, const DownPacket &)
Definition repeater.cpp:26
void trigger(std::list< Repetition >::iterator, Clock::time_point)
Definition repeater.cpp:38
Repeater(Runtime &rt, const Callback &cb)
Definition repeater.cpp:16
void add(const REQUEST &request, const DownPacket &payload)
Definition repeater.hpp:42
void reset_beacon_timer(Clock::duration next)
Reschedule timer for next Beacon transmission.
Definition router.cpp:744
const CbfPacketBuffer & get_cbf_buffer() const
Get the Contention-Based-Forwarding buffer.
Definition router.hpp:219
NextHop area_advanced_forwarding(PendingPacketForwarding &&, const LinkLayer *sender)
Determine next hop for area advanced forwarding See EN 302 636-4-1 v1.3.1 Annex F....
Definition router.cpp:884
void flush_broadcast_forwarding_buffer()
Send all packets in the broadcast forwarding buffer with expired waiting time.
Definition router.cpp:1262
void indicate_extended(IndicationContext &, const CommonHeader &)
Process ExtendedHeader at packet indication.
Definition router.cpp:520
const MIB & get_mib() const
Get Management Information Base (MIB).
Definition router.hpp:212
bool detect_duplicate_packet(const Address &source, SequenceNumber sn)
Detect duplicate packets See EN 302 636-4-1 v1.3.1 Annex A.2.
Definition router.cpp:1291
void pass_down(const dcc::DataRequest &, PduPtr, DownPacketPtr)
Send packet using the information in the DataRequest. The packet is formed using the data in PDU and ...
Definition router.cpp:660
NextHop greedy_forwarding(PendingPacketForwarding &&)
Determine next hop for greedy forwarding. See EN 302 636-4-1 v1.3.1 Annex E.2.
Definition router.cpp:758
bool process_extended(const ExtendedPduConstRefs< ShbHeader > &, const UpPacket &, const LinkLayer &ll)
Process ExtendedHeader information. Update router's LocationTable and neighbour relationship....
Definition router.cpp:972
void pass_up(const DataIndication &, UpPacketPtr)
Pass packet up to the transport layer.
Definition router.cpp:696
units::Duration timeout_cbf(units::Length distance) const
Determine CBF buffering time for a packet. Complies to EN 302 636-4-1 v1.3.1 Annex E....
Definition router.cpp:856
void on_beacon_timer_expired()
Send Beacon packet to all neighbours with updated position vector. Only to be called when the beacon ...
Definition router.cpp:704
void indicate_common(IndicationContext &, const BasicHeader &)
Process CommonHeader at packet indication.
Definition router.cpp:418
DownPacketPtr encap_packet(ItsAid aid, ByteBuffer ssp, Pdu &pdu, DownPacketPtr packet)
Encaspulate a packet according to security profile.
Definition router.cpp:1339
bool decide_pass_up(bool within_destination, const GeoBroadcastHeader &gbc)
Decide if GBC packet shall be passed up to transport layer.
Definition router.cpp:1246
void set_access_interface(dcc::RequestInterface *ifc)
Register access layer interface.
Definition router.cpp:201
void set_random_seed(std::uint_fast32_t seed)
Set seed for internal random number generator (RNG) RNG is used e.g. for random Beacon jitter.
Definition router.cpp:218
units::Duration timeout_cbf(const MacAddress &sender) const
Determine (area) CBF buffering time for a packet from a sender.
Definition router.cpp:872
NextHop area_contention_based_forwarding(PendingPacketForwarding &&, const MacAddress *sender)
Determine next hop for area contention-based forwarding See EN 302 636-4-1 v1.3.1 Annex F....
Definition router.cpp:838
std::unique_ptr< ShbPdu > create_shb_pdu(const ShbDataRequest &)
Create an initialized Single-Hop-Broadcast PDU.
Definition router.cpp:1306
void flush_unicast_forwarding_buffer(const Address &addr)
Send all matching packets in the unicast forwarding buffer with expired waiting time.
Definition router.cpp:1267
void detect_duplicate_address(const Address &source, const MacAddress &sender)
Helper method to handle duplicate addresses. If own address collides with the address of a received p...
Definition router.cpp:1274
std::unique_ptr< BeaconPdu > create_beacon_pdu()
Create an initialzed Beacon PDU.
Definition router.cpp:1317
void indicate_basic(IndicationContextBasic &)
Process BasicHeader at packet indication.
Definition router.cpp:393
void set_dcc_field_generator(DccFieldGenerator *dcc)
Register generator for DCC-MCO fields.
Definition router.cpp:207
Hook< PacketDropReason > packet_dropped
When a packet is dropped, this Hook is invoked.
Definition router.hpp:157
bool process_extended(const ExtendedPduConstRefs< TsbHeader > &, const UpPacket &, const LinkLayer &ll)
packet handling of received TSB packet
Definition router.cpp:1007
Hook< ForwardingStopReason > forwarding_stopped
When packet forwarding is stopped, this Hook is invoked.
Definition router.hpp:163
PacketDropReason
Reason for packet drop used by drop hook.
Definition router.hpp:85
const LocationTable & get_location_table() const
Get the LocationTable. The table holds information about neighbouring ITS-Routers.
Definition router.hpp:227
DataConfirm request(const ShbDataRequest &, DownPacketPtr)
Request to send payload per single hop broadcast (SHB). If security is enabled, the message gets enca...
Definition router.cpp:223
void pass_down(const MacAddress &, PduPtr, DownPacketPtr)
Pass down the packet to the access layer.
Definition router.cpp:682
void dispatch_repetition(const DataRequestVariant &, DownPacketPtr)
Callback function for dispatching a packet repetition. Invoked by Repeater when a scheduled repetitio...
Definition router.cpp:752
NextHop non_area_contention_based_forwarding(PendingPacketForwarding &&, const MacAddress *sender)
Determine next hop for non-area contention-based forwarding See EN 302 636-4-1 v1....
Definition router.cpp:797
bool process_extended(const ExtendedPduConstRefs< GeoBroadcastHeader > &, const UpPacket &, const LinkLayer &ll)
Process ExtendedHeader information. Update router's LocationTable and neighbour relationship....
Definition router.cpp:1125
void indicate(UpPacketPtr, const MacAddress &sender, const MacAddress &destination)
Handle the received packet on network layer. Packet handling involves these steps:
Definition router.cpp:375
void set_transport_handler(UpperProtocol proto, TransportInterface *ifc)
Register a transport protocol handler.
Definition router.cpp:191
void reset_beacon_timer()
Reschedule timer for next Beacon transmission Timer will be scheduled according to MIB's Beacon timer...
Definition router.cpp:731
void update_position(const PositionFix &)
Update router's local position vector.
Definition router.cpp:171
void execute_media_procedures(CommunicationProfile)
Executes media specific functionalities Details are described in TS 102 636-4-2.
Definition router.cpp:639
void set_security_entity(security::SecurityEntity *entity)
Register security entity used when itsGnSecurity is enabled.
Definition router.cpp:196
std::unique_ptr< GbcPdu > create_gbc_pdu(const GbcDataRequest &)
Create an initialized GeoBroadcast PDU.
Definition router.cpp:1329
void set_address(const Address &)
Set Router's own GeoNetworking address.
Definition router.cpp:213
NextHop forwarding_algorithm_selection(PendingPacketForwarding &&, const LinkLayer *ll=nullptr)
Definition router.cpp:591
DataConfirm request(const GbcDataRequest &, DownPacketPtr)
Request to send payload per GeoBroadcast (GBC). If security is enabled, the message gets encapsulated...
Definition router.cpp:285
const LongPositionVector & get_local_position_vector() const
Get the local position vector. This vector describes the current position of the router.
Definition router.hpp:235
void execute_itsg5_procedures()
Executes ITS-G5 media specific procedures Details are described in TS 102 636-4-2.
Definition router.cpp:655
bool process_extended(const ExtendedPduConstRefs< BeaconHeader > &, const UpPacket &, const LinkLayer &ll)
Process ExtendedHeader information. Update router's LocationTable and neighbour relationship.
Definition router.cpp:1103
void indicate_secured(IndicationContextBasic &, const BasicHeader &)
Process SecuredMessage at packet indication.
Definition router.cpp:461
bool outside_sectorial_contention_area(const MacAddress &sender, const MacAddress &forwarder) const
Check if router is outside the sectorial contention area See TS 102 636-4-1 v1.2.3 section E....
Definition router.cpp:944
virtual EncapConfirm encapsulate_packet(EncapRequest &&request)=0
Creates a security envelope covering the given payload.
virtual DecapConfirm decapsulate_packet(DecapRequest &&request)=0
Decapsulates the payload within a SecuredMessage.
BasicHeader specified in ETSI EN 302 636-4-1 v1.2.1, section 8.6.
Input data for decapsulating a secured message.