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& 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 void operator()(const Nonce& nonce)
37 {
38 for (auto& byte : nonce) {
39 m_archive << byte;
40 }
41 }
42 OutputArchive& m_archive;
43 };
44
45 SymmetricAlgorithm algo = get_type(param);
46 serialize(ar, algo);
47 Encryption_visitor visit(ar);
48 boost::apply_visitor(visit, param);
49}
50
51size_t get_size(const EncryptionParameter& param)
52{
53 size_t size = sizeof(SymmetricAlgorithm);
54 struct Encryption_visitor : public boost::static_visitor<size_t>
55 {
56 size_t operator()(const Nonce& nonce)
57 {
58 return nonce.size();
59 }
60 };
61
62 Encryption_visitor visit;
63 size += boost::apply_visitor(visit, param);
64 return size;
65}
66
67size_t deserialize(InputArchive& ar, EncryptionParameter& param)
68{
69 SymmetricAlgorithm algo;
70 deserialize(ar, algo);
71 switch (algo) {
72 case SymmetricAlgorithm::AES128_CCM: {
73 Nonce nonce;
74 for (size_t s = 0; s < nonce.size(); s++) {
75 ar >> nonce[s];
76 }
77 param = nonce;
78 break;
79 }
80 default:
81 throw deserialization_error("Unknown Symmetric Algorithm");
82 break;
83 }
84 return get_size(param);
85}
86
87} // namespace v2
88} // namespace security
89} // namespace vanetza