1#include <vanetza/security/ecc_point.hpp>
2#include <vanetza/security/ecdsa256.hpp>
3#include <vanetza/security/public_key.hpp>
4#include <boost/variant/apply_visitor.hpp>
5#include <boost/variant/static_visitor.hpp>
13class EccPointVisitor :
public boost::static_visitor<ByteBuffer>
17 ByteBuffer operator()(
const T& point)
23ByteBuffer convert_for_signing(
const EccPoint& ecc_point)
25 EccPointVisitor visit;
26 return boost::apply_visitor(visit, ecc_point);
29class EccPointLengthVisitor :
public boost::static_visitor<std::size_t>
34 return x_only.x.size();
49 return unc.x.size() + unc.y.size();
53std::size_t get_length(
const EccPoint& point)
55 EccPointLengthVisitor visitor;
56 return boost::apply_visitor(visitor, point);
59EccPoint compress_public_key(
const PublicKey& public_key)
61 switch (public_key.compression)
63 case KeyCompression::NoCompression:
64 if (!public_key.y.empty() && public_key.y.back() & 0x01) {
69 case KeyCompression::Y0:
71 case KeyCompression::Y1:
78EccPoint make_ecc_point(
const PublicKey& public_key)
80 switch (public_key.compression)
82 case KeyCompression::NoCompression:
84 case KeyCompression::Y0:
86 case KeyCompression::Y1:
89 throw std::invalid_argument(
"public key has an unknown point compression");
92EccPoint compress_public_key(
const ecdsa256::
PublicKey& public_key)
94 if (!public_key.y.empty() && public_key.y.back() & 0x01) {
Compressed_Lsb_Y_0 specified in TS 103 097 v1.2.1 in section 4.2.5.
Compressed_Lsb_Y_1 specified in TS 103 097 v1.2.1 in section 4.2.5.
Uncompressed specified in TS 103 097 v1.2.1 in section 4.2.5.
X_Coordinate_Only specified in TS 103 097 v1.2.1 in section 4.2.5.