1#include <vanetza/security/exception.hpp>
2#include <vanetza/security/v2/encryption_parameter.hpp>
3#include <vanetza/security/v2/public_key.hpp>
4#include <boost/variant/apply_visitor.hpp>
5#include <boost/variant/static_visitor.hpp>
14SymmetricAlgorithm get_type(
const EncryptionParameter& param)
16 struct Encryption_visitor :
public boost::static_visitor<SymmetricAlgorithm>
18 SymmetricAlgorithm operator()(
const Nonce& nonce)
20 return SymmetricAlgorithm::AES128_CCM;
24 Encryption_visitor visit;
25 return boost::apply_visitor(visit, param);
28void serialize(OutputArchive& ar,
const EncryptionParameter& param)
30 struct Encryption_visitor :
public boost::static_visitor<>
32 Encryption_visitor(OutputArchive& ar) :
36 void operator()(
const Nonce& nonce)
38 for (
auto&
byte : nonce) {
42 OutputArchive& m_archive;
45 SymmetricAlgorithm algo = get_type(param);
47 Encryption_visitor visit(ar);
48 boost::apply_visitor(visit, param);
51size_t get_size(
const EncryptionParameter& param)
53 size_t size =
sizeof(SymmetricAlgorithm);
54 struct Encryption_visitor :
public boost::static_visitor<size_t>
56 size_t operator()(
const Nonce& nonce)
62 Encryption_visitor visit;
63 size += boost::apply_visitor(visit, param);
67size_t deserialize(InputArchive& ar, EncryptionParameter& param)
69 SymmetricAlgorithm algo;
70 deserialize(ar, algo);
72 case SymmetricAlgorithm::AES128_CCM: {
74 for (
size_t s = 0; s < nonce.size(); s++) {
81 throw deserialization_error(
"Unknown Symmetric Algorithm");
84 return get_size(param);