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>
12class EccPointVisitor :
public boost::static_visitor<ByteBuffer>
16 ByteBuffer operator()(
const T& point)
22ByteBuffer convert_for_signing(
const EccPoint& ecc_point)
24 EccPointVisitor visit;
25 return boost::apply_visitor(visit, ecc_point);
28class EccPointLengthVisitor :
public boost::static_visitor<std::size_t>
31 std::size_t operator()(
const X_Coordinate_Only& x_only)
const
33 return x_only.x.size();
36 std::size_t operator()(
const Compressed_Lsb_Y_0& y0)
const
41 std::size_t operator()(
const Compressed_Lsb_Y_1& y1)
const
46 std::size_t operator()(
const Uncompressed& unc)
const
48 return unc.x.size() + unc.y.size();
52std::size_t get_length(
const EccPoint& point)
54 EccPointLengthVisitor visitor;
55 return boost::apply_visitor(visitor, point);
58EccPoint compress_public_key(
const PublicKey& public_key)
60 switch (public_key.compression)
62 case KeyCompression::NoCompression:
63 if (!public_key.y.empty() && public_key.y.back() & 0x01) {
68 case KeyCompression::Y0:
70 case KeyCompression::Y1:
79 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.