1#include <vanetza/security/v2/verification.hpp>
10bool check_generation_time(
const SecuredMessage& message, Clock::time_point now)
12 using namespace std::chrono;
15 const Time64* generation_time = message.header_field<HeaderFieldType::Generation_Time>();
16 if (generation_time) {
18 static const auto generation_time_future = milliseconds(40);
19 static const Clock::duration generation_time_past_default = minutes(10);
20 static const Clock::duration generation_time_past_ca = seconds(2);
21 auto generation_time_past = generation_time_past_default;
23 const IntX* its_aid = message.header_field<HeaderFieldType::Its_Aid>();
24 if (its_aid && aid::CA == *its_aid) {
25 generation_time_past = generation_time_past_ca;
28 if (*generation_time > convert_time64(now + generation_time_future)) {
30 }
else if (*generation_time < convert_time64(now - generation_time_past)) {
40bool check_generation_location(
const SecuredMessage& message,
const Certificate& cert)
42 const IntX* its_aid = message.header_field<HeaderFieldType::Its_Aid>();
43 if (its_aid && aid::CA == *its_aid) {
47 const ThreeDLocation* generation_location = message.header_field<HeaderFieldType::Generation_Location>();
48 if (generation_location) {
49 auto region = cert.get_restriction<ValidityRestrictionType::Region>();
51 if (!region || get_type(*region) == RegionType::None) {
55 return is_within(
TwoDLocation(*generation_location), *region);
61bool check_certificate_time(
const Certificate& certificate, Clock::time_point now)
63 auto time = certificate.get_restriction<ValidityRestrictionType::Time_Start_And_End>();
64 auto time_now = convert_time32(now);
70 if (time->start_validity > time_now || time->end_validity < time_now) {
77bool check_certificate_region(
const Certificate& certificate,
const PositionFix& position)
79 auto region = certificate.get_restriction<ValidityRestrictionType::Region>();
81 if (!region || get_type(*region) == RegionType::None) {
85 if (!position.confidence) {
89 return is_within(
TwoDLocation(position.latitude, position.longitude), *region);