1#include <vanetza/security/exception.hpp>
2#include <vanetza/security/v2/public_key.hpp>
3#include <boost/variant/apply_visitor.hpp>
4#include <boost/variant/static_visitor.hpp>
13PublicKeyAlgorithm get_type(
const PublicKey& key)
15 struct public_key_visitor :
public boost::static_visitor<PublicKeyAlgorithm>
19 return PublicKeyAlgorithm::ECDSA_NISTP256_With_SHA256;
24 return PublicKeyAlgorithm::ECIES_NISTP256;
28 public_key_visitor visit;
29 return boost::apply_visitor(visit, key);
34 struct public_key_visitor :
public boost::static_visitor<>
36 public_key_visitor(
OutputArchive& ar, PublicKeyAlgorithm algo) :
37 m_archive(ar), m_algo(algo)
43 serialize(m_archive, ecdsa.public_key, m_algo);
48 serialize(m_archive, ecies.supported_symm_alg);
49 serialize(m_archive, ecies.public_key, m_algo);
53 PublicKeyAlgorithm m_algo;
56 PublicKeyAlgorithm type = get_type(key);
58 public_key_visitor visit(ar, type);
59 boost::apply_visitor(visit, key);
62std::size_t field_size(PublicKeyAlgorithm algo)
66 case PublicKeyAlgorithm::ECDSA_NISTP256_With_SHA256:
69 case PublicKeyAlgorithm::ECIES_NISTP256:
76std::size_t field_size(SymmetricAlgorithm algo)
80 case SymmetricAlgorithm::AES128_CCM:
92 PublicKeyAlgorithm type;
93 deserialize(ar, type);
95 case PublicKeyAlgorithm::ECDSA_NISTP256_With_SHA256: {
97 deserialize(ar, ecdsa.public_key, PublicKeyAlgorithm::ECDSA_NISTP256_With_SHA256);
101 case PublicKeyAlgorithm::ECIES_NISTP256: {
103 deserialize(ar, ecies.supported_symm_alg);
104 deserialize(ar, ecies.public_key, PublicKeyAlgorithm::ECIES_NISTP256);
112 return get_size(key);
115size_t get_size(
const PublicKey& key)
117 size_t size =
sizeof(PublicKeyAlgorithm);
118 struct publicKey_visitor :
public boost::static_visitor<size_t>
122 return get_size(key.public_key);
127 return get_size(key.public_key) +
sizeof(key.supported_symm_alg);
130 publicKey_visitor visit;
131 size += boost::apply_visitor(visit, key);
thrown when a deserialization error occurred
ecdsa_nistp256_with_sha256 specified in TS 103 097 v1.2.1, section 4.2.4
ecies_nistp256 specified in TS 103 097 v1.2.1, section 4.2.4