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