obu-firmware builds against the vanetza-idf C-ITS library, which until now came from the colleague's microbu-esp32c5 tree beside the repository and was not tracked here, so a clone of this repository could not build the firmware it ships. The library alone is now part of obu-firmware, as obu-firmware/external/vanetza-idf: their external/vanetza-idf at commit cf4b99f, unchanged (9775 files; see its PROVENANCE.md). CMake takes it from there by default; -DVANETZA_IDF_DIR still points the build elsewhere. The rest of the colleague's tree (their own VAM firmware, PKI tooling, station-link Python tools, the V2X2MAP bridge) stays out of this repository and gitignored; nothing is pushed to their repository. NOTES.md, docs/06, TODO.md and the pcap verifier's usage line point at the new location.
307 lines
8.4 KiB
Plaintext
307 lines
8.4 KiB
Plaintext
IEEE1609dot2 {
|
|
iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base (1) schema (1) major-version-2(2)
|
|
}
|
|
|
|
--******************************************************************************
|
|
--
|
|
-- IEEE P1609.2 Data Types
|
|
--
|
|
--******************************************************************************
|
|
|
|
DEFINITIONS AUTOMATIC TAGS ::= BEGIN
|
|
|
|
EXPORTS ALL;
|
|
|
|
IMPORTS
|
|
CrlSeries,
|
|
EccP256CurvePoint,
|
|
EciesP256EncryptedKey,
|
|
EncryptionKey,
|
|
GeographicRegion,
|
|
GroupLinkageValue,
|
|
HashAlgorithm,
|
|
HashedId3,
|
|
HashedId8,
|
|
Hostname,
|
|
IValue,
|
|
LinkageValue,
|
|
Opaque,
|
|
Psid,
|
|
PsidSsp,
|
|
PsidSspRange,
|
|
PublicEncryptionKey,
|
|
PublicVerificationKey,
|
|
SequenceOfHashedId3,
|
|
SequenceOfPsidSsp,
|
|
SequenceOfPsidSspRange,
|
|
ServiceSpecificPermissions,
|
|
Signature,
|
|
SubjectAssurance,
|
|
SymmetricEncryptionKey,
|
|
ThreeDLocation,
|
|
Time64,
|
|
Uint3,
|
|
Uint8,
|
|
Uint16,
|
|
Uint32,
|
|
ValidityPeriod
|
|
FROM IEEE1609dot2BaseTypes {
|
|
iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base(1) base-types(2) major-version-2 (2)
|
|
};
|
|
|
|
--
|
|
--*********************************************************************
|
|
--
|
|
-- Structures for describing secured data
|
|
--
|
|
--*********************************************************************
|
|
|
|
-- Necessary to get certain tools to generate sample PDUs
|
|
-- TestIeee1609Dot2Data ::= Ieee1609Dot2Data
|
|
-- TestCertificate ::= Certificate
|
|
|
|
-- this structure belongs later in the file but putting it here avoids
|
|
-- compiler errors with certain tools
|
|
SignedDataPayload ::= SEQUENCE {
|
|
data Ieee1609Dot2Data OPTIONAL,
|
|
extDataHash HashedData OPTIONAL,
|
|
...
|
|
}
|
|
(WITH COMPONENTS {..., data PRESENT} |
|
|
WITH COMPONENTS {..., extDataHash PRESENT})
|
|
|
|
Ieee1609Dot2Data ::= SEQUENCE {
|
|
protocolVersion Uint8(3),
|
|
content Ieee1609Dot2Content
|
|
}
|
|
|
|
Ieee1609Dot2Content ::= CHOICE {
|
|
unsecuredData Opaque,
|
|
signedData SignedData,
|
|
encryptedData EncryptedData,
|
|
signedCertificateRequest Opaque,
|
|
...
|
|
}
|
|
|
|
SignedData ::= SEQUENCE {
|
|
hashId HashAlgorithm,
|
|
tbsData ToBeSignedData,
|
|
signer SignerIdentifier,
|
|
signature Signature
|
|
}
|
|
|
|
SignerIdentifier ::= CHOICE {
|
|
digest HashedId8,
|
|
certificate SequenceOfCertificate,
|
|
self NULL,
|
|
...
|
|
}
|
|
|
|
ToBeSignedData ::= SEQUENCE {
|
|
payload SignedDataPayload,
|
|
headerInfo HeaderInfo
|
|
}
|
|
|
|
HashedData::= CHOICE {
|
|
sha256HashedData OCTET STRING (SIZE(32)),
|
|
...
|
|
}
|
|
|
|
HeaderInfo ::= SEQUENCE {
|
|
psid Psid,
|
|
generationTime Time64 OPTIONAL,
|
|
expiryTime Time64 OPTIONAL,
|
|
generationLocation ThreeDLocation OPTIONAL,
|
|
p2pcdLearningRequest HashedId3 OPTIONAL,
|
|
missingCrlIdentifier MissingCrlIdentifier OPTIONAL,
|
|
encryptionKey EncryptionKey OPTIONAL,
|
|
...,
|
|
inlineP2pcdRequest SequenceOfHashedId3 OPTIONAL,
|
|
requestedCertificate Certificate OPTIONAL
|
|
}
|
|
|
|
MissingCrlIdentifier ::= SEQUENCE {
|
|
cracaId HashedId3,
|
|
crlSeries CrlSeries,
|
|
...
|
|
}
|
|
|
|
Countersignature ::= Ieee1609Dot2Data (WITH COMPONENTS {...,
|
|
content (WITH COMPONENTS {...,
|
|
signedData (WITH COMPONENTS {...,
|
|
tbsData (WITH COMPONENTS {...,
|
|
payload (WITH COMPONENTS {...,
|
|
data ABSENT,
|
|
extDataHash PRESENT
|
|
}),
|
|
headerInfo(WITH COMPONENTS {...,
|
|
generationTime PRESENT,
|
|
expiryTime ABSENT,
|
|
generationLocation ABSENT,
|
|
p2pcdLearningRequest ABSENT,
|
|
missingCrlIdentifier ABSENT,
|
|
encryptionKey ABSENT
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
|
|
--**********************************************************************
|
|
--
|
|
-- Structures for describing encrypted data
|
|
--
|
|
--**********************************************************************
|
|
|
|
EncryptedData ::= SEQUENCE {
|
|
recipients SequenceOfRecipientInfo,
|
|
ciphertext SymmetricCiphertext
|
|
}
|
|
RecipientInfo ::= CHOICE {
|
|
pskRecipInfo PreSharedKeyRecipientInfo,
|
|
symmRecipInfo SymmRecipientInfo,
|
|
certRecipInfo PKRecipientInfo,
|
|
signedDataRecipInfo PKRecipientInfo,
|
|
rekRecipInfo PKRecipientInfo
|
|
}
|
|
|
|
SequenceOfRecipientInfo ::= SEQUENCE OF RecipientInfo
|
|
|
|
PreSharedKeyRecipientInfo ::= HashedId8
|
|
SymmRecipientInfo ::= SEQUENCE {
|
|
recipientId HashedId8,
|
|
encKey SymmetricCiphertext
|
|
}
|
|
|
|
PKRecipientInfo ::= SEQUENCE {
|
|
recipientId HashedId8,
|
|
encKey EncryptedDataEncryptionKey
|
|
}
|
|
|
|
EncryptedDataEncryptionKey ::= CHOICE {
|
|
eciesNistP256 EciesP256EncryptedKey,
|
|
eciesBrainpoolP256r1 EciesP256EncryptedKey,
|
|
...
|
|
}
|
|
|
|
SymmetricCiphertext ::= CHOICE {
|
|
aes128ccm AesCcmCiphertext,
|
|
...
|
|
}
|
|
|
|
AesCcmCiphertext ::= SEQUENCE {
|
|
nonce OCTET STRING (SIZE (12)),
|
|
ccmCiphertext Opaque -- 16 bytes longer than plaintext
|
|
}
|
|
|
|
|
|
--**********************************************************************
|
|
--
|
|
-- Certificates and other security management data structures
|
|
--
|
|
--**********************************************************************
|
|
|
|
-- Certificates are implicit (type = implicit, toBeSigned includes
|
|
-- reconstruction value, signature absent) or explicit (type = explicit,
|
|
-- toBeSigned includes verification key, signature present).
|
|
|
|
Certificate ::= CertificateBase (ImplicitCertificate | ExplicitCertificate)
|
|
|
|
SequenceOfCertificate ::= SEQUENCE OF Certificate
|
|
|
|
CertificateBase ::= SEQUENCE {
|
|
version Uint8(3),
|
|
type CertificateType,
|
|
issuer IssuerIdentifier,
|
|
toBeSigned ToBeSignedCertificate,
|
|
signature Signature OPTIONAL
|
|
}
|
|
|
|
CertificateType ::= ENUMERATED {
|
|
explicit,
|
|
implicit,
|
|
...
|
|
}
|
|
|
|
ImplicitCertificate ::= CertificateBase (WITH COMPONENTS {...,
|
|
type(implicit),
|
|
toBeSigned (WITH COMPONENTS {...,
|
|
verifyKeyIndicator(WITH COMPONENTS {reconstructionValue})
|
|
}),
|
|
signature ABSENT
|
|
})
|
|
|
|
ExplicitCertificate ::= CertificateBase (WITH COMPONENTS {...,
|
|
type(explicit),
|
|
toBeSigned(WITH COMPONENTS {...,
|
|
verifyKeyIndicator(WITH COMPONENTS {verificationKey})
|
|
}),
|
|
signature PRESENT
|
|
})
|
|
|
|
IssuerIdentifier ::= CHOICE {
|
|
sha256AndDigest HashedId8,
|
|
self HashAlgorithm,
|
|
...,
|
|
sha384AndDigest HashedId8
|
|
}
|
|
|
|
ToBeSignedCertificate ::= SEQUENCE {
|
|
id CertificateId,
|
|
cracaId HashedId3,
|
|
crlSeries CrlSeries,
|
|
validityPeriod ValidityPeriod,
|
|
region GeographicRegion OPTIONAL,
|
|
assuranceLevel SubjectAssurance OPTIONAL,
|
|
appPermissions SequenceOfPsidSsp OPTIONAL,
|
|
certIssuePermissions SequenceOfPsidGroupPermissions OPTIONAL,
|
|
certRequestPermissions SequenceOfPsidGroupPermissions OPTIONAL,
|
|
canRequestRollover NULL OPTIONAL,
|
|
encryptionKey PublicEncryptionKey OPTIONAL,
|
|
verifyKeyIndicator VerificationKeyIndicator,
|
|
...
|
|
}
|
|
(WITH COMPONENTS { ..., appPermissions PRESENT} |
|
|
WITH COMPONENTS { ..., certIssuePermissions PRESENT} |
|
|
WITH COMPONENTS { ..., certRequestPermissions PRESENT})
|
|
|
|
CertificateId ::= CHOICE {
|
|
linkageData LinkageData,
|
|
name Hostname,
|
|
binaryId OCTET STRING(SIZE(1..64)),
|
|
none NULL,
|
|
...
|
|
}
|
|
|
|
LinkageData ::= SEQUENCE {
|
|
iCert IValue,
|
|
linkage-value LinkageValue,
|
|
group-linkage-value GroupLinkageValue OPTIONAL
|
|
}
|
|
|
|
EndEntityType ::= BIT STRING { app (0), enrol (1) } (SIZE (8)) (ALL EXCEPT {})
|
|
|
|
PsidGroupPermissions ::= SEQUENCE {
|
|
subjectPermissions SubjectPermissions,
|
|
minChainLength INTEGER DEFAULT 1,
|
|
chainLengthRange INTEGER DEFAULT 0,
|
|
eeType EndEntityType DEFAULT {app} -- vanetza-idf: IEEE Std 1609.2-2022 6.4.28 (was '00'H)
|
|
}
|
|
|
|
SequenceOfPsidGroupPermissions ::= SEQUENCE OF PsidGroupPermissions
|
|
|
|
SubjectPermissions ::= CHOICE {
|
|
explicit SequenceOfPsidSspRange,
|
|
all NULL,
|
|
...
|
|
}
|
|
|
|
VerificationKeyIndicator ::= CHOICE {
|
|
verificationKey PublicVerificationKey,
|
|
reconstructionValue EccP256CurvePoint,
|
|
...
|
|
}
|
|
|
|
END
|