1#include <vanetza/security/exception.hpp>
2#include <vanetza/security/v2/signature.hpp>
3#include <boost/iostreams/stream.hpp>
13PublicKeyAlgorithm get_type(
const Signature& sig)
15 struct Signature_visitor :
public boost::static_visitor<PublicKeyAlgorithm>
19 return PublicKeyAlgorithm::ECDSA_NISTP256_With_SHA256;
24 return PublicKeyAlgorithm::ECDSA_NISTP256_With_SHA256;
27 Signature_visitor visit;
28 return boost::apply_visitor(visit, sig.some_ecdsa);
33 size_t size = sig.s.size();
34 size += get_size(sig.R);
45 size_t size =
sizeof(PublicKeyAlgorithm);
46 struct Signature_visitor :
public boost::static_visitor<size_t>
58 Signature_visitor visit;
59 size += boost::apply_visitor(visit, sig.some_ecdsa);
65 struct signature_visitor :
public boost::static_visitor<>
71 serialize(m_archive, sig);
76 serialize(m_archive, sig);
82 PublicKeyAlgorithm algo = get_type(sig);
84 signature_visitor visitor(ar);
85 boost::apply_visitor(visitor, sig.some_ecdsa);
90 const PublicKeyAlgorithm algo = PublicKeyAlgorithm::ECDSA_NISTP256_With_SHA256;
91 assert(field_size(algo) == sig.s.size());
93 serialize(ar, sig.R, algo);
94 for (
auto& byte : sig.s) {
101 auto& ecdsa = sig.get();
102 serialize(ar, ecdsa);
109 deserialize(ar, point, algo);
110 for (size_t i = 0; i < field_size(algo); i++) {
117 return get_size(sig);
122 PublicKeyAlgorithm algo;
124 deserialize(ar, algo);
125 size +=
sizeof(algo);
127 case PublicKeyAlgorithm::ECDSA_NISTP256_With_SHA256: {
129 size += deserialize(ar, signature, algo);
141 struct signature_visitor :
public boost::static_visitor<
const EcdsaSignature*>
154 signature_visitor visitor;
155 const EcdsaSignature* ecdsa = boost::apply_visitor(visitor, sig.some_ecdsa);
156 return boost::optional<EcdsaSignature>(ecdsa !=
nullptr, *ecdsa);
thrown when a deserialization error occurred
EcdsaSignature specified in TS 103 097 v1.2.1, section 4.2.9.