Vanetza
Loading...
Searching...
No Matches
header_field.hpp
1#ifndef HEADER_FIELD_HPP_IHIAKD4K
2#define HEADER_FIELD_HPP_IHIAKD4K
3
4#include <vanetza/security/v2/basic_elements.hpp>
5#include <vanetza/security/v2/certificate.hpp>
6#include <vanetza/security/v2/encryption_parameter.hpp>
7#include <vanetza/security/v2/int_x.hpp>
8#include <vanetza/security/v2/recipient_info.hpp>
9#include <vanetza/security/v2/region.hpp>
10#include <vanetza/security/v2/signer_info.hpp>
11#include <boost/variant/variant.hpp>
12#include <list>
13
14namespace vanetza
15{
16namespace security
17{
18namespace v2
19{
20
21/// HeaderFieldType specified in TS 103 097 v1.2.1, section 5.5
22enum class HeaderFieldType : uint8_t
23{
24 Generation_Time = 0, // Time64
25 Generation_Time_Confidence = 1, // Time64WithStandardDeviation
26 Expiration = 2, // Time32
27 Generation_Location = 3, // TreeDLocation
28 Request_Unrecognized_Certificate = 4, // std::list<HashedId3>
29 Its_Aid = 5, // IntX
30 Signer_Info = 128, // SignerInfo
31 Encryption_Parameters = 129, // EncryptionParameters
32 Recipient_Info = 130, // std::list<RecipientInfo>
33};
34
35/// HeaderField specified in TS 103 097 v1.2.1, section 5.4
36using HeaderField = boost::variant<
37 Time64,
38 Time64WithStandardDeviation,
39 Time32,
40 ThreeDLocation,
41 std::list<HashedId3>,
42 IntX,
43 SignerInfo,
44 EncryptionParameter,
45 std::list<RecipientInfo>
46>;
47
48/**
49 * \brief Determines HeaderFieldType to a given HeaderField
50 * \param field
51 * \return type
52 */
53HeaderFieldType get_type(const HeaderField& field);
54
55/**
56 * \brief Calculates size of a HeaderField
57 * \param field
58 * \return number of octets needed to serialize the HeaderField
59 */
60std::size_t get_size(const HeaderField& field);
61
62/**
63 * \brief Serializes a HeaderField into a binary archive
64 * \note Serialization of HeaderField lists is provided by template
65 * \param ar to serialize in
66 * \param field to serialize
67 */
68void serialize(OutputArchive& ar, const HeaderField& field);
69
70/**
71 * \brief Deserializes a list of HeaderFields from a binary archive
72 * \param ar with a serialized list of HeaderFields at the beginning
73 * \param list of HeaderFields to deserialize
74 * \return size of the deserialized list
75 */
76size_t deserialize(InputArchive& ar, std::list<HeaderField>& list);
77
78/**
79 * \brief resolve type for matching HeaderFieldType
80 *
81 * This is kind of the reverse function of get_type(const HeaderField&)
82 */
83template<HeaderFieldType>
85
86template<>
87struct header_field_type<HeaderFieldType::Generation_Time>
88{
89 using type = Time64;
90};
91
92template<>
93struct header_field_type<HeaderFieldType::Generation_Time_Confidence>
94{
95 using type = Time64WithStandardDeviation;
96};
97
98template<>
99struct header_field_type<HeaderFieldType::Expiration>
100{
101 using type = Time32;
102};
103
104template<>
105struct header_field_type<HeaderFieldType::Generation_Location>
106{
107 using type = ThreeDLocation;
108};
109
110template<>
111struct header_field_type<HeaderFieldType::Request_Unrecognized_Certificate>
112{
113 using type = std::list<HashedId3>;
114};
115
116template<>
117struct header_field_type<HeaderFieldType::Its_Aid>
118{
119 using type = IntX;
120};
121
122template<>
123struct header_field_type<HeaderFieldType::Signer_Info>
124{
125 using type = SignerInfo;
126};
127
128template<>
129struct header_field_type<HeaderFieldType::Encryption_Parameters>
130{
131 using type = EncryptionParameter;
132};
133
134template<>
135struct header_field_type<HeaderFieldType::Recipient_Info>
136{
137 using type = std::list<RecipientInfo>;
138};
139
140} // namespace v2
141} // namespace security
142} // namespace vanetza
143
144#endif /* HEADER_FIELD_HPP_IHIAKD4K */
ChunckPacket is a packet consisting of several memory chunks.
ByteBufferConvertible & operator[](OsiLayer ol)
ChunkPacket & merge(ChunkPacket &packet, OsiLayer from, OsiLayer to)
std::size_t size() const
const ByteBufferConvertible & layer(OsiLayer ol) const
const ByteBufferConvertible & operator[](OsiLayer ol) const
ByteBufferConvertible & layer(OsiLayer ol)
std::size_t size(OsiLayer from, OsiLayer to) const
ChunkPacket extract(OsiLayer from, OsiLayer to)
std::size_t size(OsiLayer from, OsiLayer to) const
buffer_const_range operator[](OsiLayer layer) const
std::size_t size() const
void set_boundary(OsiLayer, unsigned bytes)
const ByteBuffer & buffer() const
CohesivePacket(const ByteBuffer &buffer, OsiLayer layer)
void trim(OsiLayer from, unsigned bytes)
std::size_t size(OsiLayer single_layer) const
value_type operator[](size_type) const
Definition byte_view.cpp:48
byte_view_range(ByteBuffer &&)
Definition byte_view.cpp:37
byte_view_range(const ByteBuffer::const_iterator &, const ByteBuffer::const_iterator &)
Definition byte_view.cpp:27
ByteBuffer::const_pointer data() const
Definition byte_view.cpp:42
void encode(units::Duration)
Definition lifetime.cpp:45
units::Duration decode() const
Definition lifetime.cpp:59
bool after(const Timestamp &other) const
Definition timestamp.cpp:76
bool before(const Timestamp &other) const
Definition timestamp.cpp:71
static CertificateValidity valid()
Create CertificateValidity signalling a valid certificate This method is equivalent to default constr...
CertificateValidity(CertificateInvalidReason reason)
CertificateInvalidReason reason() const
Get reason for certificate invalidity This call is only safe if reason is available,...
IntX specified in TS 103 097 v1.2.1, section 4.2.1.
Definition int_x.hpp:21
static DecapConfirm from(VerifyConfirm &&verify_confirm, const SecuredMessageView &msg_view)
Input data for decapsulating a secured message.
Payload specified in TS 103 097 v1.2.1, section 5.2.
Definition payload.hpp:28
SecuredMessage as specified in TS 103 097 v1.2.1, section 5.1.
HeaderField * header_field(HeaderFieldType)
const TrailerField * trailer_field(TrailerFieldType type) const
const HeaderField * header_field(HeaderFieldType type) const
TrailerField * trailer_field(TrailerFieldType)
ThreeDLocation specified in TS 103 097 v1.2.1, section 4.2.19.
Definition region.hpp:21
Time64WithStandardDeviation specified in TS 103 097 v1.2.1, section 4.2.16.
resolve type for matching HeaderFieldType
resolve type for matching TrailerFieldType