45DefaultSignHeaderPolicy::DefaultSignHeaderPolicy(
const Runtime& rt, PositionProvider& positioning,
CertificateProvider& certs) :
46 m_runtime(rt), m_positioning(positioning), m_cert_provider(certs),
54 const auto now = m_runtime.now();
55 secured_message.set_its_aid(request.its_aid);
56 secured_message.set_generation_time(vanetza::security::v2::convert_time64(now));
58 if (request.its_aid == aid::CA) {
59 bool signer_full_cert =
false;
60 const auto& at_cert = m_cert_provider.own_certificate();
61 const auto maybe_at_digest = at_cert.calculate_digest();
64 if (maybe_at_digest && m_incoming_requests.is_pending(truncate(*maybe_at_digest))) {
65 m_cert_requested =
true;
66 m_incoming_requests.discard_request(truncate(*maybe_at_digest));
70 if (now < m_cam_next_certificate && !m_cert_requested) {
71 if (maybe_at_digest) {
72 secured_message.set_signer_identifier(*maybe_at_digest);
75 signer_full_cert =
true;
76 m_cert_requested =
false;
77 secured_message.set_signer_identifier(at_cert);
78 m_cam_next_certificate = now + std::chrono::seconds(1) - std::chrono::milliseconds(50);
82 secured_message.set_inline_p2pcd_request(m_outgoing_requests.all());
83 if (!signer_full_cert) {
84 while (
auto p2p_hid = m_incoming_requests.next_one()) {
86 auto p2p_cert = m_cert_provider.cache().lookup(*p2p_hid);
87 if (p2p_cert && p2p_cert->is_ca_certificate()) {
88 secured_message.set_requested_certificate(*p2p_cert);
93 }
else if (request.its_aid == aid::DEN) {
95 secured_message.set_signer_identifier(m_cert_provider.own_certificate());
96 secured_message.set_generation_location(build_location(m_positioning.position_fix()));
97 }
else if (request.its_aid == aid::SCR) {
100 if (request.self_signed)
101 secured_message.set_signer_identifier_self();
103 const auto digest = m_cert_provider.own_certificate().calculate_digest();
105 secured_message.set_signer_identifier(*digest);
108 secured_message.set_signer_identifier(m_cert_provider.own_certificate());