Vanetza
Loading...
Searching...
No Matches
encap_service.hpp
1#ifndef FD3D1A69_8B8D_4DC1_8975_9FEB7A791B56
2#define FD3D1A69_8B8D_4DC1_8975_9FEB7A791B56
3
4#include <vanetza/security/secured_message.hpp>
5#include <vanetza/security/sign_service.hpp>
6#include <boost/variant/variant.hpp>
7
8namespace vanetza
9{
10namespace security
11{
12
13/**
14 * Input data for encapsulating a packet in a secured message.
15 *
16 * According to TS 102 723-8 V1.1.1, SN-ENCAP.request offers the very same
17 * functionality as SN-SIGN.request and SN-ENCRYPT.request.
18 *
19 * Since encryption is not yet implemented, so only SignRequest is included.
20 */
21using EncapRequest = boost::variant<SignRequest>;
22
23/**
24 * Confirmation of the encapsulation process (SN-ENCAP.confirm).
25 *
26 * TS 102 723-8 V1.1.1 includes only sec_packet but cannot report any errors.
27 * Instead of throwing exceptions, the variant may convey an error code instead
28 * of a SecuredMessage.
29 */
30struct EncapConfirm : public boost::variant<SecuredMessage, SignConfirmError>
31{
32public:
33 static EncapConfirm from(SignConfirm&&);
34
35 const SecuredMessage* secured_message() const;
36 SecuredMessage* secured_message();
37
38private:
39 using variant::variant;
40};
41
42/**
43 * Dispatch an encapsulation request to the responsible service.
44 *
45 * \param encap_request SN-ENCAP.request data
46 * \param sign_service service handling signing requests
47 * \return SN-ENCAP.confirm
48 */
49EncapConfirm dispatch(EncapRequest&& encap_request, SignService* sign_service);
50
51} // namespace security
52} // namespace vanetza
53
54#endif /* FD3D1A69_8B8D_4DC1_8975_9FEB7A791B56 */