Vanetza
Loading...
Searching...
No Matches
asn1_types.hpp
1#pragma once
2#include <vanetza/asn1/type_traits.hpp>
3
4// forward declarations of base types
5using OCTET_STRING_t = struct OCTET_STRING;
6using INTEGER_t = struct ASN__PRIMITIVE_TYPE_s;
7using asn_TYPE_descriptor_t = struct asn_TYPE_descriptor_s;
8using Vanetza_Security_Uint64_t = INTEGER_t;
9
10#define ASN1_TYPE_ALIAS(name) Vanetza_Security_ ## name ## _t
11#define ASN1_TYPE_NAME(name) Vanetza_Security_ ## name
12#define ASN1_TYPE_DESC(name) asn_DEF_Vanetza_Security_ ## name
13
14#define FWD_ALIAS(name, base)
15 using ASN1_TYPE_ALIAS(name) = ASN1_TYPE_ALIAS(base);
16 namespace vanetza { namespace security { namespace v3 { namespace asn1 {
17 using name = ::ASN1_TYPE_ALIAS(name);
18 }}}}
19
20#define FWD_OCTET_STRING(name)
21 using ASN1_TYPE_ALIAS(name) = OCTET_STRING_t;
22 namespace vanetza { namespace security { namespace v3 { namespace asn1 {
23 using name = ::ASN1_TYPE_ALIAS(name);
24 }}}}
25
26#define FWD_STRUCT(name)
27 typedef struct ASN1_TYPE_NAME(name) ASN1_TYPE_ALIAS(name);
28 namespace vanetza { namespace security { namespace v3 { namespace asn1 {
29 using name = ::ASN1_TYPE_ALIAS(name);
30 }}}}
31 extern "C" { extern asn_TYPE_descriptor_t ASN1_TYPE_DESC(name); }
32 namespace vanetza { namespace asn1 {
33 template<> struct asn1_type_traits<::ASN1_TYPE_NAME(name)> {
34 static asn_TYPE_descriptor_t& descriptor() { return ::ASN1_TYPE_DESC(name); }
35 };
36 }}
37
38#define FWD_NATIVE_INTEGER(name)
39 using ASN1_TYPE_ALIAS(name) = long;
40 namespace vanetza { namespace security { namespace v3 { namespace asn1 {
41 using name = ::ASN1_TYPE_ALIAS(name);
42 }}}}
43
44FWD_OCTET_STRING(BitmapSsp)
45FWD_OCTET_STRING(HashedId8)
46FWD_OCTET_STRING(Opaque)
47
48FWD_NATIVE_INTEGER(Latitude)
49FWD_NATIVE_INTEGER(Longitude)
50
51#ifdef VANETZA_WITH_PQC
52FWD_STRUCT(One28BitCcmCiphertext)
53namespace vanetza { namespace security { namespace v3 { namespace asn1 {
54using AesCcmCiphertext = One28BitCcmCiphertext;
55}}}}
56#else
57FWD_STRUCT(AesCcmCiphertext)
58#endif
59FWD_STRUCT(CertificateBase)
60FWD_STRUCT(CircularRegion)
61FWD_STRUCT(EccP256CurvePoint)
62FWD_STRUCT(EccP384CurvePoint)
63FWD_STRUCT(EciesP256EncryptedKey)
64FWD_STRUCT(EncryptedDataEncryptionKey)
65FWD_STRUCT(GeographicRegion)
66FWD_STRUCT(HashedData)
67FWD_STRUCT(HeaderInfo)
68FWD_STRUCT(Ieee1609Dot2Content)
69FWD_STRUCT(Ieee1609Dot2Data)
70FWD_STRUCT(PKRecipientInfo)
71FWD_STRUCT(PsidGroupPermissions)
72FWD_STRUCT(PsidSsp)
73FWD_STRUCT(PsidSspRange)
74FWD_STRUCT(PolygonalRegion)
75FWD_STRUCT(PublicEncryptionKey)
76FWD_STRUCT(PublicVerificationKey)
77FWD_STRUCT(RecipientInfo)
78FWD_STRUCT(RectangularRegion)
79FWD_STRUCT(SequenceOfCertificate)
80FWD_STRUCT(SequenceOfHashedId3)
81FWD_STRUCT(SequenceOfPsidGroupPermissions)
82FWD_STRUCT(SequenceOfPsidSsp)
83FWD_STRUCT(SequenceOfRectangularRegion)
84FWD_STRUCT(ServiceSpecificPermissions)
85FWD_STRUCT(Signature)
86FWD_STRUCT(SignedData)
87FWD_STRUCT(SignedDataPayload)
88FWD_STRUCT(SignerIdentifier)
89FWD_STRUCT(SspRange)
90FWD_STRUCT(SymmetricCiphertext)
91FWD_STRUCT(SymmetricEncryptionKey)
92FWD_STRUCT(ThreeDLocation)
93FWD_STRUCT(ToBeSignedData)
94FWD_STRUCT(TwoDLocation)
95FWD_STRUCT(ValidityPeriod)
96FWD_STRUCT(VerificationKeyIndicator)
97
98FWD_ALIAS(Certificate, CertificateBase)
99FWD_ALIAS(EtsiTs103097Certificate, CertificateBase)
100FWD_ALIAS(EtsiTs103097Data, Ieee1609Dot2Data)
101FWD_ALIAS(Time64, Uint64)
102
103#undef ASN1_TYPE_ALIAS
104#undef ASN1_TYPE_NAME
105#undef FWD_ALIAS
106#undef FWD_NATIVE_INTEGER
107#undef FWD_OCTET_STRING
108#undef FWD_STRUCT
109
110namespace vanetza
111{
112namespace security
113{
114namespace v3
115{
116namespace asn1
117{
118
119using namespace vanetza::asn1;
120
121} // namespace asn1
122} // namespace v3
123} // namespace security
124} // namespace vanetza
#define FWD_STRUCT(name)
#define FWD_OCTET_STRING(name)
#define ASN1_TYPE_DESC(name)
#define FWD_ALIAS(name, base)
#define FWD_NATIVE_INTEGER(name)
ChunckPacket is a packet consisting of several memory chunks.
ByteBufferConvertible & operator[](OsiLayer ol)
ChunkPacket & merge(ChunkPacket &packet, OsiLayer from, OsiLayer to)
std::size_t size() const
const ByteBufferConvertible & layer(OsiLayer ol) const
const ByteBufferConvertible & operator[](OsiLayer ol) const
ByteBufferConvertible & layer(OsiLayer ol)
std::size_t size(OsiLayer from, OsiLayer to) const
ChunkPacket extract(OsiLayer from, OsiLayer to)
std::size_t size(OsiLayer from, OsiLayer to) const
buffer_const_range operator[](OsiLayer layer) const
std::size_t size() const
void set_boundary(OsiLayer, unsigned bytes)
const ByteBuffer & buffer() const
CohesivePacket(const ByteBuffer &buffer, OsiLayer layer)
void trim(OsiLayer from, unsigned bytes)
std::size_t size(OsiLayer single_layer) const
Result create(const std::string &name, Args... args) const
Definition factory.hpp:31
bool configure_default(const std::string &name)
Definition factory.hpp:70
bool add(const std::string &name, Function f)
Definition factory.hpp:60
Result create(Args... args) const
Definition factory.hpp:45
value_type operator[](size_type) const
Definition byte_view.cpp:48
byte_view_range(ByteBuffer &&)
Definition byte_view.cpp:37
byte_view_range(const ByteBuffer::const_iterator &, const ByteBuffer::const_iterator &)
Definition byte_view.cpp:27
ByteBuffer::const_pointer data() const
Definition byte_view.cpp:42
void encode(units::Duration)
Definition lifetime.cpp:45
units::Duration decode() const
Definition lifetime.cpp:59
bool after(const Timestamp &other) const
Definition timestamp.cpp:76
bool before(const Timestamp &other) const
Definition timestamp.cpp:71
virtual ecdsa256::KeyPair generate_key_pair()=0
generate a private key and the corresponding public key
virtual boost::optional< Uncompressed > decompress_point(const EccPoint &ecc_point)=0
decompress a possibly compressed elliptic curve point
virtual Signature sign_digest(const PrivateKey &, const ByteBuffer &digest)=0
calculate signature for given digest and private key
virtual EcdsaSignature sign_data(const ecdsa256::PrivateKey &private_key, const ByteBuffer &data)=0
calculate signature for given data and private key
virtual bool verify_data(const ecdsa256::PublicKey &public_key, const ByteBuffer &data, const EcdsaSignature &sig)=0
try to verify data using public key and signature
virtual bool verify_digest(const PublicKey &public_key, const ByteBuffer &digest, const Signature &sig)=0
try to verify digest using public key and signature
virtual ByteBuffer calculate_hash(HashAlgorithm algo, const ByteBuffer &data)=0
calculate hash value of data
static CertificateValidity valid()
Create CertificateValidity signalling a valid certificate This method is equivalent to default constr...
CertificateValidity(CertificateInvalidReason reason)
CertificateInvalidReason reason() const
Get reason for certificate invalidity This call is only safe if reason is available,...
std::chrono::seconds to_seconds() const
IntX specified in TS 103 097 v1.2.1, section 4.2.1.
Definition int_x.hpp:21
Compressed_Lsb_Y_0 specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:24
Compressed_Lsb_Y_1 specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:30
static DecapConfirm from(VerifyConfirm &&verify_confirm, const SecuredMessageView &msg_view)
Input data for decapsulating a secured message.
EcdsaSignature specified in TS 103 097 v1.2.1, section 4.2.9.
Definition signature.hpp:17
Uncompressed specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:36
X_Coordinate_Only specified in TS 103 097 v1.2.1 in section 4.2.5.
Definition ecc_point.hpp:18
described in TS 103 097 v1.2.1, section 4.2.10
described in TS 103 097 v1.2.1 (2015-06), section 6.1
void add_permission(ItsAid aid, const ByteBuffer &ssp)
const ValidityRestriction * get_restriction(ValidityRestrictionType type) const
const SubjectAttribute * get_attribute(SubjectAttributeType type) const
void remove_attribute(SubjectAttributeType type)
const validity_restriction_type< T > * get_restriction() const
const subject_attribute_type< T > * get_attribute() const
void remove_restriction(ValidityRestrictionType type)
CircularRegion specified in TS 103 097 v1.2.1, section 4.2.22.
Definition region.hpp:74
EciesEncryptedKey specified in TS 103 097 v1.2.1, section 5.9.
EncryptionKey specified in TS 103 097 v1.2.1, section 6.4.
IdentifiedRegion specified in TS 103 097 v1.2.1, section 4.2.25.
Definition region.hpp:110
ItsAidSsp specified in TS 103 097 v1.2.1, section 6.9.
Specified in TS 103 097 v1.2.1, section 4.2.20.
Definition region.hpp:65
OpaqueKey specified in TS 103 097 v1.2.1, section 5.8.
Payload specified in TS 103 097 v1.2.1, section 5.2.
Definition payload.hpp:28
RecipientInfo specified in TS 103 097 v1.2.1, section 5.8.
RectangularRegion specified in TS 103 097 v1.2.1, section 4.2.23.
Definition region.hpp:90
SecuredMessage as specified in TS 103 097 v1.2.1, section 5.1.
HeaderField * header_field(HeaderFieldType)
const TrailerField * trailer_field(TrailerFieldType type) const
const HeaderField * header_field(HeaderFieldType type) const
TrailerField * trailer_field(TrailerFieldType)
SubjectAssurance specified in TS 103 097 v1.2.1 in section 6.6 and 7.4.1.
described in TS 103 097 v1.2.1, section 6.2
ThreeDLocation specified in TS 103 097 v1.2.1, section 4.2.19.
Definition region.hpp:21
Time64WithStandardDeviation specified in TS 103 097 v1.2.1, section 4.2.16.
TwoDLocation specified in TS 103 097 v1.2.1, section 4.2.18.
Definition region.hpp:47
VerificationKey specified in TS 103 097 v1.2.1, section 6.4.
ecdsa_nistp256_with_sha256 specified in TS 103 097 v1.2.1, section 4.2.4
ecies_nistp256 specified in TS 103 097 v1.2.1, section 4.2.4
resolve type for matching HeaderFieldType
resolve type for matching TrailerFieldType