Vanetza
 
Loading...
Searching...
No Matches
secured_message.hpp
1
2#ifndef SECURED_MESSAGE_HPP_DCBC74AC
3#define SECURED_MESSAGE_HPP_DCBC74AC
4
5#include <vanetza/asn1/asn1c_wrapper.hpp>
6#include <vanetza/asn1/security/EtsiTs103097Data.h>
7#include <vanetza/common/archives.hpp>
8#include <vanetza/common/its_aid.hpp>
9#include <vanetza/net/packet_variant.hpp>
10#include <vanetza/security/hashed_id.hpp>
11#include <vanetza/security/signature.hpp>
12#include <vanetza/security/v3/certificate.hpp>
13#include <cstdint>
14#include <boost/optional/optional_fwd.hpp>
15#include <boost/variant/variant_fwd.hpp>
16
17namespace vanetza
18{
19namespace security
20{
21namespace v3
22{
23
24struct SecuredMessage : public asn1::asn1c_oer_wrapper<EtsiTs103097Data_t>
25{
26 using Time64 = std::uint64_t;
27 using SignerIdentifier = boost::variant<const HashedId8_t*, const Certificate_t*>;
28
30
31 uint8_t protocol_version() const;
32 ItsAid its_aid() const;
33 PacketVariant payload() const;
34 bool is_signed() const;
35 boost::optional<Time64> generation_time() const;
36 boost::optional<Signature> signature() const;
37 SignerIdentifier signer_identifier() const;
38 ByteBuffer signing_payload() const;
39};
40
41/**
42 * \brief Calculate size of encoded secured message
43 * \param msg secured message
44 * \return number of octets needed to serialize this message
45 */
46size_t get_size(const SecuredMessage& msg);
47
48/**
49 * \brief Serialize a secured message
50 *
51 * @param ar output archive
52 * @param msg message to be serialized
53 */
54void serialize(OutputArchive& ar, const SecuredMessage& msg);
55
56/**
57 * \brief Deserialize a secured message
58 *
59 * \param ar input archive
60 * \param msg destination message object
61 * \return size of deserialized message
62 */
63size_t deserialize(InputArchive& ar, SecuredMessage& msg);
64
65ByteBuffer get_payload(const Opaque_t*);
66ByteBuffer get_payload(const SignedData*);
67
68boost::optional<HashedId8> get_certificate_id(const SecuredMessage::SignerIdentifier&);
69
70} // namespace v3
71} // namespace security
72} // namespace vanetza
73
74#endif /* SECURED_MESSAGE_HPP_DCBC74AC */