1#include <vanetza/security/exception.hpp>
2#include <vanetza/security/v2/trailer_field.hpp>
3#include <boost/variant/get.hpp>
13TrailerFieldType get_type(
const TrailerField& field)
15 struct trailerFieldVisitor :
public boost::static_visitor<TrailerFieldType>
17 TrailerFieldType operator()(
const Signature& sig)
19 return TrailerFieldType::Signature;
22 trailerFieldVisitor visit;
23 return boost::apply_visitor(visit, field);
26size_t get_size(
const TrailerField& field)
28 size_t size =
sizeof(TrailerFieldType);
29 struct trailerFieldVisitor :
public boost::static_visitor<size_t>
36 trailerFieldVisitor visit;
37 size += boost::apply_visitor(visit, field);
41void serialize(OutputArchive& ar,
const TrailerField& field)
43 struct trailer_visitor :
public boost::static_visitor<>
45 trailer_visitor(OutputArchive& ar) :
51 serialize(m_archive, sig);
53 OutputArchive& m_archive;
55 TrailerFieldType type = get_type(field);
57 trailer_visitor visitor(ar);
58 boost::apply_visitor(visitor, field);
61size_t deserialize(InputArchive& ar, TrailerField& field)
64 TrailerFieldType type;
65 deserialize(ar, type);
66 size +=
sizeof(TrailerFieldType);
68 case TrailerFieldType::Signature: {
70 size += deserialize(ar, sig);
75 throw deserialization_error(
"Unknown TrailerFieldType");
80boost::optional<ByteBuffer> extract_signature_buffer(
const TrailerField& trailer_field)
82 assert(TrailerFieldType::Signature == get_type(trailer_field));
83 assert(PublicKeyAlgorithm::ECDSA_NISTP256_With_SHA256 == get_type(boost::get<Signature>(trailer_field)));
85 return extract_signature_buffer(boost::get<Signature>(trailer_field));