Vanetza
Loading...
Searching...
No Matches
verify_service.cpp
1#include <vanetza/security/verify_service.hpp>
2#include <vanetza/security/v3/certificate_cache.hpp>
3
4namespace vanetza
5{
6namespace security
7{
8
9DummyVerifyService::DummyVerifyService(VerificationReport report, CertificateValidity validity) :
10 m_report(report), m_validity(validity)
11{
12}
13
15{
16 VerifyConfirm confirm;
17 confirm.report = m_report;
18 confirm.certificate_validity = m_validity;
19 confirm.its_aid = get_its_aid(request.secured_message);
20
21 struct MessageVisitor : boost::static_visitor<>
22 {
23 MessageVisitor(DummyVerifyService& service, VerifyConfirm& confirm) :
24 m_service(service), m_confirm(confirm)
25 {
26 }
27
28 void operator()(const v2::SecuredMessage& msg)
29 {
30 // not implemented for v2
31 }
32
33 void operator()(const v3::SecuredMessage& msg)
34 {
35 auto signer = msg.signer_identifier();
36 m_confirm.certificate_id = v3::get_certificate_id(signer);
37
38 if (m_confirm.certificate_id) {
39 if (m_service.m_cert_cache) {
40 if (auto cert = v3::get_certificate(signer)) {
41 m_service.m_cert_cache->store(v3::Certificate { *cert });
42 m_confirm.permissions = v3::get_app_permissions(*cert, m_confirm.its_aid);
43 } else if (auto cert = m_service.m_cert_cache->lookup(*m_confirm.certificate_id)) {
44 m_confirm.permissions = v3::get_app_permissions(*cert->content(), m_confirm.its_aid);
45 }
46 } else if (auto cert = v3::get_certificate(signer)) {
47 m_confirm.permissions = v3::get_app_permissions(*cert, m_confirm.its_aid);
48 }
49 }
50 }
51
52 DummyVerifyService& m_service;
53 VerifyConfirm& m_confirm;
54 } visitor(*this, confirm);
55 boost::apply_visitor(visitor, request.secured_message);
56
57 return confirm;
58}
59
61{
62 m_cert_cache = cache;
63}
64
65} // namespace security
66} // namespace vanetza
DummyVerifyService(VerificationReport report, CertificateValidity validity)
void use_certificate_cache(v3::CertificateCache *cache)
register certificate cache for optional permission lookup
SecuredMessage as specified in TS 103 097 v1.2.1, section 5.1.