Vanetza
Loading...
Searching...
No Matches
signature.hpp
1#ifndef SIGNATURE_HPP_ZWPLNDVE
2#define SIGNATURE_HPP_ZWPLNDVE
3
4#include <vanetza/security/signature.hpp>
5#include <vanetza/security/v2/ecc_point.hpp>
6#include <vanetza/security/v2/public_key.hpp>
7#include <vanetza/security/v2/serialization.hpp>
8#include <boost/optional/optional.hpp>
9#include <boost/variant/variant.hpp>
10
11namespace vanetza
12{
13namespace security
14{
15namespace v2
16{
17
18struct Signature {
19 SomeEcdsaSignature some_ecdsa;
20
21 Signature() = default;
22
23 Signature(EcdsaSignature&& sig) : some_ecdsa(std::move(sig)) {}
24 Signature& operator=(EcdsaSignature&& sig) { some_ecdsa = std::move(sig); return *this; }
25
26 Signature(const EcdsaSignature& sig) : some_ecdsa(sig) {}
27 Signature& operator=(const EcdsaSignature& sig) { some_ecdsa = sig; return *this; }
28
29 Signature(EcdsaSignatureFuture&& sig) : some_ecdsa(std::move(sig)) {}
30 Signature& operator=(EcdsaSignatureFuture&& sig) { some_ecdsa = std::move(sig); return *this; }
31
32 Signature(SomeEcdsaSignature&& some) : some_ecdsa(std::move(some)) {}
33 Signature& operator=(SomeEcdsaSignature&& some) { this->some_ecdsa = std::move(some); return *this; }
34};
35
36/**
37 * brief Determines PublicKeyAlgorithm of a given Signature
38 * \param signature
39 * \return PublicKeyAlgorithm
40 */
41PublicKeyAlgorithm get_type(const Signature&);
42
43/**
44 * \brief Calculates size of a EcdsaSignature
45 * \param signature
46 * \return number of octets needed for serialization
47 */
48size_t get_size(const EcdsaSignature&);
49
50/**
51 * \brief Calculates size of a EcdsaSignatureFuture
52 * \param signature
53 * \return number of octets needed for serialization
54 */
55size_t get_size(const EcdsaSignatureFuture&);
56
57/**
58 * \brief Calculates size of a Signature
59 * \param signature
60 * \return number of octets needed for serialization
61 */
62size_t get_size(const Signature&);
63
64/**
65 * \brief Serializes a signature into a binary archive
66 * \param ar to serialize in
67 * \param signature
68 */
69void serialize(OutputArchive&, const Signature&);
70void serialize(OutputArchive&, const EcdsaSignature&);
71void serialize(OutputArchive&, const EcdsaSignatureFuture&);
72
73/**
74 * \brief Deserializes an EcdsaSignature from a binary archive
75 * Requires PublicKeyAlgorithm for determining the signature size
76 * \param ar with a serialized EcdsaSignature at the beginning
77 * \param signature to deserialize
78 * \param public_key_algorithm to determine the size of the signature
79 * \return size of the deserialized EcdsaSignature
80 */
81size_t deserialize(InputArchive&, EcdsaSignature&, const PublicKeyAlgorithm&);
82
83/**
84 * \brief Deserializes a Signature from a binary archive
85 * \param ar with a serialized Signature at the beginning
86 * \param signature to deserialize
87 * \return size of the deserialized Signature
88 */
89size_t deserialize(InputArchive&, Signature&);
90
91/**
92 * Try to extract ECDSA signature from signature variant
93 * \param sig Signature variant (of some type)
94 * \return ECDSA signature (optionally)
95 */
96boost::optional<EcdsaSignature> extract_ecdsa_signature(const Signature& sig);
97
98} // namespace v2
99} // namespace security
100} // namespace vanetza
101
102#endif /* SIGNATURE_HPP_ZWPLNDVE */
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,...
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 (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)
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)
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.
resolve type for matching HeaderFieldType
resolve type for matching TrailerFieldType