Vanetza
Loading...
Searching...
No Matches
validity_restriction.hpp
1#ifndef VALIDITY_RESTRICTION_HPP_LMCUHYLJ
2#define VALIDITY_RESTRICTION_HPP_LMCUHYLJ
3
4#include <vanetza/common/bit_number.hpp>
5#include <vanetza/security/v2/region.hpp>
6#include <vanetza/security/v2/serialization.hpp>
7#include <boost/variant/variant.hpp>
8#include <chrono>
9
10namespace vanetza
11{
12namespace security
13{
14namespace v2
15{
16
17using Time32 = uint32_t;
18using Time64 = uint64_t;
19
21{
22public:
23 enum class Units
24 {
25 Seconds = 0x0,
26 Minutes = 0x1,
27 Hours = 0x2,
28 Sixty_Hour_Blocks = 0x3,
29 Years = 0x4
30 };
31
32 Duration();
33 Duration(BitNumber<uint16_t, 13> value, Units unit);
34 Duration(uint16_t raw);
35
36 uint16_t raw() const
37 {
38 return m_raw;
39 }
40
41 /**
42 * Get duration's unit.
43 * \return unit part of raw value
44 */
45 Units unit() const
46 {
47 return static_cast<Units>(m_raw >> 13);
48 }
49
50 /**
51 * Get duration's ticks value
52 * \return value part of raw value
53 */
54 uint16_t value() const
55 {
56 return m_raw & 0x1FFF; // mask upper 3 bit
57 }
58
59 /**
60 * Convert duration to seconds.
61 * \note std::chrono::seconds is wide enough to represent 2^13 years
62 * \return duration in seconds
63 */
64 std::chrono::seconds to_seconds() const;
65
66private:
67 uint16_t m_raw;
68};
69
70size_t get_size(const Duration&);
71
72enum class ValidityRestrictionType : uint8_t
73{
74 Time_End = 0, // end_validity
75 Time_Start_And_End = 1, // start_and_end_valididty
76 Time_Start_And_Duration = 2, // start_and_duration_validity
77 Region = 3 // GeographicRegion
78};
79
81{
82 StartAndEndValidity() = default;
83 StartAndEndValidity(Time32 start, Time32 end);
84
85 Time32 start_validity;
86 Time32 end_validity;
87};
88
90{
91 StartAndDurationValidity() = default;
92 StartAndDurationValidity(Time32 start, Duration);
93
94 Time32 start_validity;
95 Duration duration;
96};
97
98using EndValidity = Time32;
99
100typedef boost::variant<EndValidity, StartAndEndValidity, StartAndDurationValidity, GeographicRegion> ValidityRestriction;
101
102/**
103 * Determines ValidityRestrictionType to a given ValidityRestriction
104 * \param ValidityRestriction
105 */
106ValidityRestrictionType get_type(const ValidityRestriction&);
107
108/**
109 * Calculates size of an object
110 * \param Object
111 * \return size_t containing the number of octets needed to serialize the object
112 */
113size_t get_size(const StartAndEndValidity&);
114size_t get_size(const StartAndDurationValidity&);
115size_t get_size(const ValidityRestriction&);
116size_t get_size(const Time32&);
117size_t get_size(const Time64&);
118size_t get_size(const Duration&);
119
120/**
121 * Deserializes a ValidityRestriction list from a binary archive
122 * \param archive with a serialized ValidityRestriction list at the beginning
123 * \param ValidityRestriction list to deserialize
124 * \return size of the ValidityRestriction list
125 */
126size_t deserialize(InputArchive&, ValidityRestriction&);
127
128/**
129 * Serializes a ValidityRestriction list into a binary archive
130 * \param archive to serialize in
131 * \param ValidityRestriction list to serialize
132 */
133void serialize(OutputArchive&, const ValidityRestriction&);
134
135namespace detail
136{
137
138template<ValidityRestrictionType>
140
141template<>
142struct validity_restriction_type<ValidityRestrictionType::Time_End>
143{
144 using type = EndValidity;
145};
146
147template<>
148struct validity_restriction_type<ValidityRestrictionType::Time_Start_And_End>
149{
150 using type = StartAndEndValidity;
151};
152
153template<>
154struct validity_restriction_type<ValidityRestrictionType::Time_Start_And_Duration>
155{
156 using type = StartAndDurationValidity;
157};
158
159template<>
160struct validity_restriction_type<ValidityRestrictionType::Region>
161{
162 using type = GeographicRegion;
163};
164
165} // namespace details
166
167/**
168 * \brief resolve type for matching ValidityRestrictionType
169 *
170 * This is kind of the reverse function of get_type(const ValidityRestrictionType&)
171 */
172template<ValidityRestrictionType T>
173using validity_restriction_type = typename detail::validity_restriction_type<T>::type;
174
175} // namespace v2
176} // namespace security
177} // namespace vanetza
178
179#endif /* VALIDITY_RESTRICTION_HPP_LMCUHYLJ */
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
Result create(Args... args) const
Definition factory.hpp:45
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
virtual boost::optional< Uncompressed > decompress_point(const EccPoint &ecc_point)=0
decompress a possibly compressed elliptic curve point
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,...
std::chrono::seconds to_seconds() const
IntX specified in TS 103 097 v1.2.1, section 4.2.1.
Definition int_x.hpp:21
Compressed_Lsb_Y_0 specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:24
Compressed_Lsb_Y_1 specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:30
static DecapConfirm from(VerifyConfirm &&verify_confirm, const SecuredMessageView &msg_view)
Input data for decapsulating a secured message.
EcdsaSignature specified in TS 103 097 v1.2.1, section 4.2.9.
Definition signature.hpp:17
Uncompressed specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:36
X_Coordinate_Only specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:18
described in TS 103 097 v1.2.1, section 4.2.10
described in TS 103 097 v1.2.1 (2015-06), section 6.1
void add_permission(ItsAid aid, const ByteBuffer &ssp)
const ValidityRestriction * get_restriction(ValidityRestrictionType type) const
const SubjectAttribute * get_attribute(SubjectAttributeType type) const
void remove_attribute(SubjectAttributeType type)
const validity_restriction_type< T > * get_restriction() const
const subject_attribute_type< T > * get_attribute() const
void remove_restriction(ValidityRestrictionType type)
EncryptionKey specified in TS 103 097 v1.2.1, section 6.4.
ItsAidSsp specified in TS 103 097 v1.2.1, section 6.9.
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)
SubjectAssurance specified in TS 103 097 v1.2.1 in section 6.6 and 7.4.1.
described in TS 103 097 v1.2.1, section 6.2
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.
VerificationKey specified in TS 103 097 v1.2.1, section 6.4.
ecdsa_nistp256_with_sha256 specified in TS 103 097 v1.2.1, section 4.2.4
ecies_nistp256 specified in TS 103 097 v1.2.1, section 4.2.4
resolve type for matching HeaderFieldType
resolve type for matching TrailerFieldType