Vanetza
Loading...
Searching...
No Matches
asn1_conversions.cpp
1#include <vanetza/asn1/security_profile.hpp>
2#include VANETZA_ASN1_SECURITY_HEADER(EccP256CurvePoint.h)
3#include <vanetza/security/v3/asn1_conversions.hpp>
4#include <boost/variant/static_visitor.hpp>
5#include <algorithm>
6#include <cstring>
7
8namespace vanetza
9{
10namespace security
11{
12namespace v3
13{
14
15HashedId8 convert(const Vanetza_Security_HashedId8_t& in)
16{
17 HashedId8 out;
18 std::memcpy(out.data(), in.buf, std::min(out.size(), in.size));
19 return out;
20}
21
22void assign(OCTET_STRING_t* dst, const ByteBuffer& src)
23{
24 OCTET_STRING_fromBuf(dst, reinterpret_cast<const char*>(src.data()), src.size());
25}
26
27asn1::EccP256CurvePoint to_asn1(const EccPoint& point)
28{
29 struct visitor : public boost::static_visitor<asn1::EccP256CurvePoint>
30 {
31 asn1::EccP256CurvePoint operator()(const X_Coordinate_Only& x_only) const
32 {
33 asn1::EccP256CurvePoint result = {};
34 result.present = Vanetza_Security_EccP256CurvePoint_PR_x_only;
35 assign(&result.choice.x_only, x_only.x);
36 return result;
37 }
38
39 asn1::EccP256CurvePoint operator()(const Compressed_Lsb_Y_0& y0) const
40 {
41 asn1::EccP256CurvePoint result = {};
42 result.present = Vanetza_Security_EccP256CurvePoint_PR_compressed_y_0;
43 assign(&result.choice.compressed_y_0, y0.x);
44 return result;
45 }
46
47 asn1::EccP256CurvePoint operator()(const Compressed_Lsb_Y_1& y1) const
48 {
49 asn1::EccP256CurvePoint result = {};
50 result.present = Vanetza_Security_EccP256CurvePoint_PR_compressed_y_1;
51 assign(&result.choice.compressed_y_1, y1.x);
52 return result;
53 }
54
55 asn1::EccP256CurvePoint operator()(const Uncompressed& unc) const
56 {
57 asn1::EccP256CurvePoint result = {};
58 result.present = Vanetza_Security_EccP256CurvePoint_PR_uncompressedP256;
59 assign(&result.choice.uncompressedP256.x, unc.x);
60 assign(&result.choice.uncompressedP256.y, unc.y);
61 return result;
62 }
63 };
64
65 return boost::apply_visitor(visitor(), point);
66}
67
68} // namespace v3
69
70HashedId8 create_hashed_id8(const Vanetza_Security_HashedId8_t& in)
71{
72 HashedId8 out;
73 std::memcpy(out.data(), in.buf, std::min(out.size(), in.size));
74 return out;
75}
76
77HashedId3 create_hashed_id3(const Vanetza_Security_HashedId3_t& in)
78{
79 HashedId3 out;
80 std::memcpy(out.data(), in.buf, std::min(out.size(), in.size));
81 return out;
82}
83
84} // namespace security
85} // namespace vanetza
Compressed_Lsb_Y_0 specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:24
Compressed_Lsb_Y_1 specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:30
Uncompressed specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:36
X_Coordinate_Only specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:18