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:749
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:889
void flush_broadcast_forwarding_buffer()
Send all packets in the broadcast forwarding buffer with expired waiting time.
Definition router.cpp:1267
void indicate_extended(IndicationContext &, const CommonHeader &)
Process ExtendedHeader at packet indication.
Definition router.cpp:521
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:1296
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:661
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:763
bool process_extended(const ExtendedPduConstRefs< ShbHeader > &, const UpPacket &, const LinkLayer &ll)
Process ExtendedHeader information. Update router's LocationTable and neighbour relationship....
Definition router.cpp:977
void pass_up(const DataIndication &, UpPacketPtr)
Pass packet up to the transport layer.
Definition router.cpp:697
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:861
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:705
void indicate_common(IndicationContext &, const BasicHeader &)
Process CommonHeader at packet indication.
Definition router.cpp:419
DownPacketPtr encap_packet(ItsAid aid, ByteBuffer ssp, Pdu &pdu, DownPacketPtr packet)
Encaspulate a packet according to security profile.
Definition router.cpp:1344
bool decide_pass_up(bool within_destination, const GeoBroadcastHeader &gbc)
Decide if GBC packet shall be passed up to transport layer.
Definition router.cpp:1251
void set_access_interface(dcc::RequestInterface *ifc)
Register access layer interface.
Definition router.cpp:202
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:219
units::Duration timeout_cbf(const MacAddress &sender) const
Determine (area) CBF buffering time for a packet from a sender.
Definition router.cpp:877
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:843
std::unique_ptr< ShbPdu > create_shb_pdu(const ShbDataRequest &)
Create an initialized Single-Hop-Broadcast PDU.
Definition router.cpp:1311
void flush_unicast_forwarding_buffer(const Address &addr)
Send all matching packets in the unicast forwarding buffer with expired waiting time.
Definition router.cpp:1272
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:1279
std::unique_ptr< BeaconPdu > create_beacon_pdu()
Create an initialzed Beacon PDU.
Definition router.cpp:1322
void indicate_basic(IndicationContextBasic &)
Process BasicHeader at packet indication.
Definition router.cpp:394
void set_dcc_field_generator(DccFieldGenerator *dcc)
Register generator for DCC-MCO fields.
Definition router.cpp:208
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:1012
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:224
void pass_down(const MacAddress &, PduPtr, DownPacketPtr)
Pass down the packet to the access layer.
Definition router.cpp:683
void dispatch_repetition(const DataRequestVariant &, DownPacketPtr)
Callback function for dispatching a packet repetition. Invoked by Repeater when a scheduled repetitio...
Definition router.cpp:757
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:802
bool process_extended(const ExtendedPduConstRefs< GeoBroadcastHeader > &, const UpPacket &, const LinkLayer &ll)
Process ExtendedHeader information. Update router's LocationTable and neighbour relationship....
Definition router.cpp:1130
void indicate(UpPacketPtr, const MacAddress &sender, const MacAddress &destination)
Handle the received packet on network layer. Packet handling involves these steps:
Definition router.cpp:376
void set_transport_handler(UpperProtocol proto, TransportInterface *ifc)
Register a transport protocol handler.
Definition router.cpp:192
void reset_beacon_timer()
Reschedule timer for next Beacon transmission Timer will be scheduled according to MIB's Beacon timer...
Definition router.cpp:736
void update_position(const PositionFix &)
Update router's local position vector.
Definition router.cpp:172
void execute_media_procedures(CommunicationProfile)
Executes media specific functionalities Details are described in TS 102 636-4-2.
Definition router.cpp:640
void set_security_entity(security::SecurityEntity *entity)
Register security entity used when itsGnSecurity is enabled.
Definition router.cpp:197
std::unique_ptr< GbcPdu > create_gbc_pdu(const GbcDataRequest &)
Create an initialized GeoBroadcast PDU.
Definition router.cpp:1334
void set_address(const Address &)
Set Router's own GeoNetworking address.
Definition router.cpp:214
NextHop forwarding_algorithm_selection(PendingPacketForwarding &&, const LinkLayer *ll=nullptr)
Definition router.cpp:592
DataConfirm request(const GbcDataRequest &, DownPacketPtr)
Request to send payload per GeoBroadcast (GBC). If security is enabled, the message gets encapsulated...
Definition router.cpp:286
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:656
bool process_extended(const ExtendedPduConstRefs< BeaconHeader > &, const UpPacket &, const LinkLayer &ll)
Process ExtendedHeader information. Update router's LocationTable and neighbour relationship.
Definition router.cpp:1108
void indicate_secured(IndicationContextBasic &, const BasicHeader &)
Process SecuredMessage at packet indication.
Definition router.cpp:462
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:949
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.