1#include <vanetza/common/position_fix.hpp>
2#include <vanetza/geodesy/country_database.hpp>
3#include <vanetza/geodesy/m49_code.hpp>
4#include <vanetza/asn1/security_profile.hpp>
5#include VANETZA_ASN1_SECURITY_HEADER(IdentifiedRegion.h)
6#include VANETZA_ASN1_SECURITY_HEADER(SequenceOfIdentifiedRegion.h)
7#include <vanetza/security/v3/asn1_types.hpp>
8#include <vanetza/security/v3/distance.hpp>
9#include <vanetza/security/v3/geometry.hpp>
10#include <vanetza/security/v3/location_checker.hpp>
31 const asn1::GeographicRegion* region = cert.toBeSigned.region;
33 switch (region->present) {
34 case Vanetza_Security_GeographicRegion_PR_circularRegion:
35 return is_inside(location, region->choice.circularRegion);
36 case Vanetza_Security_GeographicRegion_PR_rectangularRegion:
37 return is_inside(location, region->choice.rectangularRegion);
38 case Vanetza_Security_GeographicRegion_PR_polygonalRegion:
39 return is_inside(location, region->choice.polygonalRegion);
40 case Vanetza_Security_GeographicRegion_PR_identifiedRegion:
41 return check_identified_region(location, region->choice.identifiedRegion);
57 return permissive_identified_region_;
61 bool accepted =
false;
63 for (
int i = 0; i < seq.list.count; ++i) {
64 const auto* entry = seq.list.array[i];
69 if (entry->present == Vanetza_Security_IdentifiedRegion_PR_countryOnly) {
70 geodesy::
M49Code code(
static_cast<uint16_t>(entry->choice.countryOnly));
77 accepted = permissive_identified_region_;
bool is_inside(M49Code country, const GeodeticPosition &position) const