Vanetza
Loading...
Searching...
No Matches
encryption_parameter.cpp
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>
6
7namespace vanetza
8{
9namespace security
10{
11namespace v2
12{
13
14SymmetricAlgorithm get_type(const EncryptionParameter& param)
15{
16 struct Encryption_visitor : public boost::static_visitor<SymmetricAlgorithm>
17 {
18 SymmetricAlgorithm operator()(const Nonce&)
19 {
20 return SymmetricAlgorithm::AES128_CCM;
21 }
22 };
23
24 Encryption_visitor visit;
25 return boost::apply_visitor(visit, param);
26}
27
28void serialize(OutputArchive& ar, const EncryptionParameter& param)
29{
30 struct Encryption_visitor : public boost::static_visitor<>
31 {
32 Encryption_visitor(OutputArchive& ar) :
33 m_archive(ar)
34 {
35 }
36
37 void operator()(const Nonce& nonce)
38 {
39 for (auto& byte : nonce) {
40 m_archive << byte;
41 }
42 }
43
44 OutputArchive& m_archive;
45 };
46
47 SymmetricAlgorithm algo = get_type(param);
48 serialize(ar, algo);
49 Encryption_visitor visit(ar);
50 boost::apply_visitor(visit, param);
51}
52
53size_t get_size(const EncryptionParameter& param)
54{
55 size_t size = sizeof(SymmetricAlgorithm);
56 struct Encryption_visitor : public boost::static_visitor<size_t>
57 {
58 size_t operator()(const Nonce& nonce)
59 {
60 return nonce.size();
61 }
62 };
63
64 Encryption_visitor visit;
65 size += boost::apply_visitor(visit, param);
66 return size;
67}
68
69size_t deserialize(InputArchive& ar, EncryptionParameter& param)
70{
71 SymmetricAlgorithm algo;
72 deserialize(ar, algo);
73 switch (algo) {
74 case SymmetricAlgorithm::AES128_CCM: {
75 Nonce nonce;
76 for (size_t s = 0; s < nonce.size(); s++) {
77 ar >> nonce[s];
78 }
79 param = nonce;
80 break;
81 }
82 default:
83 throw deserialization_error("Unknown Symmetric Algorithm");
84 break;
85 }
86 return get_size(param);
87}
88
89} // namespace v2
90} // namespace security
91} // namespace vanetza
thrown when a deserialization error occurred
Definition exception.hpp:20