Vanetza
Loading...
Searching...
No Matches
signer_info.hpp
1#ifndef SIGNER_INFO_HPP_9K6GXK4R
2#define SIGNER_INFO_HPP_9K6GXK4R
3
4#include <vanetza/security/v2/basic_elements.hpp>
5#include <vanetza/security/v2/public_key.hpp>
6#include <boost/variant/recursive_wrapper.hpp>
7#include <boost/variant/variant.hpp>
8#include <cstddef>
9#include <cstdint>
10#include <list>
11
12namespace vanetza
13{
14namespace security
15{
16namespace v2
17{
18
19struct Certificate;
20
21/// described in TS 103 097 v1.2.1, section 4.2.11
22enum class SignerInfoType : uint8_t
23{
24 Self = 0, // nothing -> nullptr_t
25 Certificate_Digest_With_SHA256 = 1, // HashedId8
26 Certificate = 2, // Certificate
27 Certificate_Chain = 3, // std::list<Certificate>
28 Certificate_Digest_With_Other_Algorithm = 4 // CertificateDigestWithOtherAlgorithm
29};
30
31/// described in TS 103 097 v1.2.1, section 4.2.10
33{
34 PublicKeyAlgorithm algorithm;
35 HashedId8 digest;
36};
37
38/// described in TS 103 097 v1.2.1, section 4.2.10
39using SignerInfo = boost::variant<
40 std::nullptr_t,
41 HashedId8,
42 boost::recursive_wrapper<Certificate>,
43 std::list<Certificate>,
44 CertificateDigestWithOtherAlgorithm
45>;
46
47/**
48 * \brief Determines SignerInfoType of SignerInfo
49 * \param SignerInfo
50 * \return SignerInfoType
51 */
52SignerInfoType get_type(const SignerInfo&);
53
54/**
55 * \brief Calculates size of an CertificateDigestWithOtherAlgorithm
56 * \param CertificateDigestWithOtherAlgorithm
57 * \return number of octets needed to serialize the CertificateDigestWithOtherAlgorithm
58 */
59size_t get_size(const CertificateDigestWithOtherAlgorithm&);
60
61/**
62 * \brief Calculates size of an SignerInfo
63 * \param SignerInfo
64 * \return number of octets needed to serialize the SignerInfo
65 */
66size_t get_size(const SignerInfo&);
67
68/**
69 * \brief Serializes an CertificateDigestWithOtherAlgorithm into a binary archive
70 */
72
73/**
74 * \brief Serializes an SignerInfo into a binary archive
75 */
76void serialize(OutputArchive&, const SignerInfo&);
77
78/**
79 * \brief Deserializes an CertificateDigestWithOtherAlgorithm from a binary archive
80 * \param archive with a CertificateDigestWithOtherAlgorithm at the beginning
81 * \param CertificateDigestWithOtherAlgorithm to deserialize
82 * \return size of the deserialized CertificateDigestWithOtherAlgorithm
83 */
85
86/**
87 * \brief Deserializes an SignerInfo from a binary archive
88 * \param archive with a SignerInfo at the beginning
89 * \param SignerInfo to deserialize
90 * \return size of the deserialized SignerInfo
91 */
92size_t deserialize(InputArchive&, SignerInfo&);
93
94/**
95 * \brief Deserialize SignerInfo of a Certificate from a binary archive
96 * This function rejects SignerInfo types which are invalid for certificates.
97 * \param ar archive with a (legal) SignerInfo at the beginning
98 * \param info SignerInfo to deserialize
99 * \return size of the deserialized SignerInfo
100 */
101size_t deserialize_certificate_signer(InputArchive& ar, SignerInfo& info);
102
103} // namespace v2
104} // namespace security
105} // namespace vanetza
106
107#endif /* SIGNER_INFO_HPP_9K6GXK4R */
ChunckPacket is a packet consisting of several memory chunks.
ByteBufferConvertible & operator[](OsiLayer ol)
ChunkPacket & merge(ChunkPacket &packet, OsiLayer from, OsiLayer to)
std::size_t size() const
const ByteBufferConvertible & layer(OsiLayer ol) const
const ByteBufferConvertible & operator[](OsiLayer ol) const
ByteBufferConvertible & layer(OsiLayer ol)
std::size_t size(OsiLayer from, OsiLayer to) const
ChunkPacket extract(OsiLayer from, OsiLayer to)
std::size_t size(OsiLayer from, OsiLayer to) const
buffer_const_range operator[](OsiLayer layer) const
std::size_t size() const
void set_boundary(OsiLayer, unsigned bytes)
const ByteBuffer & buffer() const
CohesivePacket(const ByteBuffer &buffer, OsiLayer layer)
void trim(OsiLayer from, unsigned bytes)
std::size_t size(OsiLayer single_layer) const
Result create(const std::string &name, Args... args) const
Definition factory.hpp:31
bool configure_default(const std::string &name)
Definition factory.hpp:70
bool add(const std::string &name, Function f)
Definition factory.hpp:60
Result create(Args... args) const
Definition factory.hpp:45
value_type operator[](size_type) const
Definition byte_view.cpp:48
byte_view_range(ByteBuffer &&)
Definition byte_view.cpp:37
byte_view_range(const ByteBuffer::const_iterator &, const ByteBuffer::const_iterator &)
Definition byte_view.cpp:27
ByteBuffer::const_pointer data() const
Definition byte_view.cpp:42
void encode(units::Duration)
Definition lifetime.cpp:45
units::Duration decode() const
Definition lifetime.cpp:59
bool after(const Timestamp &other) const
Definition timestamp.cpp:76
bool before(const Timestamp &other) const
Definition timestamp.cpp:71
virtual ecdsa256::KeyPair generate_key_pair()=0
generate a private key and the corresponding public key
virtual boost::optional< Uncompressed > decompress_point(const EccPoint &ecc_point)=0
decompress a possibly compressed elliptic curve point
virtual Signature sign_digest(const PrivateKey &, const ByteBuffer &digest)=0
calculate signature for given digest and private key
virtual EcdsaSignature sign_data(const ecdsa256::PrivateKey &private_key, const ByteBuffer &data)=0
calculate signature for given data and private key
virtual bool verify_data(const ecdsa256::PublicKey &public_key, const ByteBuffer &data, const EcdsaSignature &sig)=0
try to verify data using public key and signature
virtual bool verify_digest(const PublicKey &public_key, const ByteBuffer &digest, const Signature &sig)=0
try to verify digest using public key and signature
virtual ByteBuffer calculate_hash(HashAlgorithm algo, const ByteBuffer &data)=0
calculate hash value of data
static CertificateValidity valid()
Create CertificateValidity signalling a valid certificate This method is equivalent to default constr...
CertificateValidity(CertificateInvalidReason reason)
CertificateInvalidReason reason() const
Get reason for certificate invalidity This call is only safe if reason is available,...
IntX specified in TS 103 097 v1.2.1, section 4.2.1.
Definition int_x.hpp:21
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
static DecapConfirm from(VerifyConfirm &&verify_confirm, const SecuredMessageView &msg_view)
Input data for decapsulating a secured message.
EcdsaSignature specified in TS 103 097 v1.2.1, section 4.2.9.
Definition signature.hpp:17
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
described in TS 103 097 v1.2.1, section 4.2.10
described in TS 103 097 v1.2.1 (2015-06), section 6.1
void add_permission(ItsAid aid, const ByteBuffer &ssp)
const ValidityRestriction * get_restriction(ValidityRestrictionType type) const
const SubjectAttribute * get_attribute(SubjectAttributeType type) const
void remove_attribute(SubjectAttributeType type)
const validity_restriction_type< T > * get_restriction() const
const subject_attribute_type< T > * get_attribute() const
void remove_restriction(ValidityRestrictionType type)
Payload specified in TS 103 097 v1.2.1, section 5.2.
Definition payload.hpp:28
SecuredMessage as specified in TS 103 097 v1.2.1, section 5.1.
HeaderField * header_field(HeaderFieldType)
const TrailerField * trailer_field(TrailerFieldType type) const
const HeaderField * header_field(HeaderFieldType type) const
TrailerField * trailer_field(TrailerFieldType)
described in TS 103 097 v1.2.1, section 6.2
ThreeDLocation specified in TS 103 097 v1.2.1, section 4.2.19.
Definition region.hpp:21
Time64WithStandardDeviation specified in TS 103 097 v1.2.1, section 4.2.16.
ecdsa_nistp256_with_sha256 specified in TS 103 097 v1.2.1, section 4.2.4
ecies_nistp256 specified in TS 103 097 v1.2.1, section 4.2.4
resolve type for matching HeaderFieldType
resolve type for matching TrailerFieldType