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 */
EcdsaSignature specified in TS 103 097 v1.2.1, section 4.2.9.
Definition signature.hpp:17