IEEE 1609.2: Update asn1 descriptions and add CAMP

This commit is contained in:
Anders Broman 2023-09-28 22:22:00 +02:00 committed by AndersBroman
parent 4258c3a02f
commit 1d9ba7de54
13 changed files with 2596 additions and 411 deletions

View File

@ -17,7 +17,9 @@ set( EXT_ASN_FILE_LIST
set( ASN_FILE_LIST
IEEE1609dot2BaseTypes.asn
IEEE1609dot2DataTypes.asn
Ieee1609Dot2CrlBaseTypes.asn
Ieee1609Dot2Crl.asn
Ieee1609Dot2.asn
IEEE1609dot12.asn
)

View File

@ -1,9 +1,10 @@
-- https://standards.ieee.org/products-programs/regauth/psid/public/
IEEE1609dot12
DEFINITIONS AUTOMATIC TAGS ::= BEGIN
IMPORTS
Psid
FROM IEEE1609dot2BaseTypes {iso(1) identified-organization(3) ieee(111)
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)}
;
@ -63,13 +64,12 @@ psid-road-and-lane-topology-service Psid ::= 138
psid-infrastructure-to-vehicle-information-service Psid ::= 139 -- ISO-19321-ETSI-TS-103-301
psid-traffic-light-control-requests-service Psid ::= 140 -- ISO-19091-ETSI-TS-103-301
psid-geonetworking-management-communications Psid ::= 141 -- ETSI-EN-302-636-4-1
psid-certificate-revocation-list-application Psid ::= 256 -- IEEEE Std 1609.2 CAMP
psid-traffic-light-control-status-service Psid ::= 637 -- ISO-19091-ETSI-TS-103-301
psid-collective-perception-service Psid ::= 639 -- ETSI-TS-103-324
-- 0x8e to 0xFF 0p80-09 to 0p80-7F Not allocated
psid-certificate-revocation-list-application Psid ::= 256 -- CAMP
-- 0x01-01 to 0x3E-7F 0p80-81 to 0pBD-FF Not allocated
-- 0x3E-80 to 0x40-1F 0pBE-00 to 0pBF-9F Reserved IEEE P1609 WG 416
-- 0x40-20 to 0x40-5F 0pBF-A0 to 0pBF-DF Private used IEEE P1609 WG 64

View File

@ -1,269 +1,286 @@
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)}
--***************************************************************************--
-- IEEE Std 1609.2: Base Data Types --
--***************************************************************************--
-- Minor version: 1
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) minor-version-4(4)}
--
--********************************************************************
-- IEEE P1609.2 Base Data Types
--
--********************************************************************
DEFINITIONS AUTOMATIC TAGS ::= BEGIN
DEFINITIONS AUTOMATIC TAGS ::= BEGIN
EXPORTS ALL;
--***************************************************************************--
-- Integer Types --
--***************************************************************************--
Uint3 ::= INTEGER (0..7)
-- ------------------------------------------------------------------
--
-- Integers
--
-- ------------------------------------------------------------------
Uint8 ::= INTEGER (0..255)
Uint16 ::= INTEGER (0..65535)
Uint3 ::= INTEGER (0..7) -- (hex) 07
Uint8 ::= INTEGER (0..255) -- (hex) ff
Uint16 ::= INTEGER (0..65535) -- (hex) ff ff
Uint32 ::= INTEGER (0..4294967295)--<LONGLONG>-- -- (hex) ff ff ff ff
Uint64 ::= INTEGER (0..18446744073709551615) -- (hex) ff ff ff ff ff ff ff ff
Uint32 ::= INTEGER (0..4294967295)
Uint64 ::= INTEGER (0..18446744073709551615)
SequenceOfUint8 ::= SEQUENCE OF Uint8
SequenceOfUint8 ::= SEQUENCE OF Uint8
SequenceOfUint16 ::= SEQUENCE OF Uint16
-- ------------------------------------------------------------------
--
-- OCTET STRING types
--
-- ------------------------------------------------------------------
--***************************************************************************--
-- OCTET STRING Types --
--***************************************************************************--
Opaque ::= OCTET STRING
HashedId10 ::= OCTET STRING (SIZE(10))
HashedId8 ::= OCTET STRING (SIZE(8))
HashedId3 ::= OCTET STRING (SIZE(3))
HashedId3 ::= OCTET STRING (SIZE(3))
SequenceOfHashedId3 ::= SEQUENCE OF HashedId3
HashedId8 ::= OCTET STRING (SIZE(8))
-- ------------------------------------------------------------------
--
-- Time
--
-- ------------------------------------------------------------------
HashedId10 ::= OCTET STRING (SIZE(10))
HashedId32 ::= OCTET STRING (SIZE(32))
HashedId48 ::= OCTET STRING(SIZE(48))
--***************************************************************************--
-- Time Structures --
--***************************************************************************--
Time32 ::= Uint32
Time64 ::= Uint64
ValidityPeriod ::= SEQUENCE {
start Time32,
duration Duration
ValidityPeriod ::= SEQUENCE {
start Time32,
duration Duration
}
Duration ::= CHOICE {
microseconds Uint16,
milliseconds Uint16,
seconds Uint16,
minutes Uint16,
hours Uint16,
sixtyHours Uint16,
years Uint16
Duration ::= CHOICE {
microseconds Uint16,
milliseconds Uint16,
seconds Uint16,
minutes Uint16,
hours Uint16,
sixtyHours Uint16,
years Uint16
}
-- ------------------------------------------------------------------
--
-- Location
--
-- ------------------------------------------------------------------
--***************************************************************************--
-- Location Structures --
--***************************************************************************--
GeographicRegion ::= CHOICE {
circularRegion CircularRegion,
rectangularRegion SequenceOfRectangularRegion,
polygonalRegion PolygonalRegion,
identifiedRegion SequenceOfIdentifiedRegion,
...
GeographicRegion ::= CHOICE {
circularRegion CircularRegion,
rectangularRegion SequenceOfRectangularRegion,
polygonalRegion PolygonalRegion,
identifiedRegion SequenceOfIdentifiedRegion,
...
}
CircularRegion ::= SEQUENCE {
center TwoDLocation,
radius Uint16
CircularRegion ::= SEQUENCE {
center TwoDLocation,
radius Uint16
}
RectangularRegion ::= SEQUENCE {
northWest TwoDLocation,
southEast TwoDLocation
RectangularRegion ::= SEQUENCE {
northWest TwoDLocation,
southEast TwoDLocation
}
SequenceOfRectangularRegion ::= SEQUENCE OF RectangularRegion
PolygonalRegion ::= SEQUENCE SIZE(3..MAX) OF TwoDLocation
PolygonalRegion ::= SEQUENCE SIZE (3..MAX) OF TwoDLocation
TwoDLocation ::= SEQUENCE {
latitude Latitude,
longitude Longitude
TwoDLocation ::= SEQUENCE {
latitude Latitude,
longitude Longitude
}
IdentifiedRegion ::= CHOICE {
countryOnly CountryOnly,
countryAndRegions CountryAndRegions,
countryAndSubregions CountryAndSubregions,
...
IdentifiedRegion ::= CHOICE {
countryOnly UnCountryId,
countryAndRegions CountryAndRegions,
countryAndSubregions CountryAndSubregions,
...
}
SequenceOfIdentifiedRegion ::= SEQUENCE OF IdentifiedRegion
CountryOnly ::= Uint16
UnCountryId ::= Uint16
CountryAndRegions ::= SEQUENCE {
countryOnly CountryOnly,
regions SequenceOfUint8
CountryOnly ::= UnCountryId
CountryAndRegions ::= SEQUENCE {
countryOnly UnCountryId,
regions SequenceOfUint8
}
CountryAndSubregions ::= SEQUENCE {
country CountryOnly,
regionAndSubregions SequenceOfRegionAndSubregions
CountryAndSubregions ::= SEQUENCE {
countryOnly UnCountryId,
regionAndSubregions SequenceOfRegionAndSubregions
}
RegionAndSubregions ::= SEQUENCE {
region Uint8,
subregions SequenceOfUint16
RegionAndSubregions ::= SEQUENCE {
region Uint8,
subregions SequenceOfUint16
}
SequenceOfRegionAndSubregions ::= SEQUENCE OF RegionAndSubregions
ThreeDLocation ::= SEQUENCE {
latitude Latitude,
longitude Longitude,
elevation Elevation
ThreeDLocation ::= SEQUENCE {
latitude Latitude,
longitude Longitude,
elevation Elevation
}
Latitude ::= NinetyDegreeInt
Longitude ::= OneEightyDegreeInt
Elevation ::= ElevInt
NinetyDegreeInt ::= INTEGER {
min (-900000000),
max (900000000),
unknown (900000001)
Longitude ::= OneEightyDegreeInt
Elevation ::= Uint16
NinetyDegreeInt ::= INTEGER {
min (-900000000),
max (900000000),
unknown (900000001)
} (-900000000..900000001)
KnownLatitude ::= NinetyDegreeInt (min..max) -- Minus 90deg to +90deg in microdegree intervals
KnownLatitude ::= NinetyDegreeInt (min..max)
UnknownLatitude ::= NinetyDegreeInt (unknown)
OneEightyDegreeInt ::= INTEGER {
min (-1799999999),
max (1800000000),
unknown (1800000001)
OneEightyDegreeInt ::= INTEGER {
min (-1799999999),
max (1800000000),
unknown (1800000001)
} (-1799999999..1800000001)
KnownLongitude ::= OneEightyDegreeInt (min..max)
UnknownLongitude ::= OneEightyDegreeInt (unknown)
ElevInt ::= Uint16 -- Range is from -4096 to 61439 in units of one-tenth of a meter
-- ------------------------------------------------------------------
--
-- Crypto
--
-- ------------------------------------------------------------------
Signature ::= CHOICE {
ecdsaNistP256Signature EcdsaP256Signature,
ecdsaBrainpoolP256r1Signature EcdsaP256Signature,
...,
ecdsaBrainpoolP384r1Signature EcdsaP384Signature
--***************************************************************************--
-- Crypto Structures --
--***************************************************************************--
Signature ::= CHOICE {
ecdsaNistP256Signature EcdsaP256Signature,
ecdsaBrainpoolP256r1Signature EcdsaP256Signature,
...,
ecdsaBrainpoolP384r1Signature EcdsaP384Signature,
ecdsaNistP384Signature EcdsaP384Signature,
sm2Signature EcsigP256Signature
}
EcdsaP256Signature ::= SEQUENCE {
rSig EccP256CurvePoint,
sSig OCTET STRING (SIZE (32))
EcdsaP256Signature ::= SEQUENCE {
rSig EccP256CurvePoint,
sSig OCTET STRING (SIZE (32))
}
EcdsaP384Signature ::= SEQUENCE {
rSig EccP384CurvePoint,
sSig OCTET STRING (SIZE (48))
EcdsaP384Signature ::= SEQUENCE {
rSig EccP384CurvePoint,
sSig OCTET STRING (SIZE (48))
}
EccP256CurvePoint ::= CHOICE {
x-only OCTET STRING (SIZE (32)),
fill NULL, -- consistency with 1363 / X9.62
compressed-y-0 OCTET STRING (SIZE (32)),
compressed-y-1 OCTET STRING (SIZE (32)),
uncompressedP256 SEQUENCE {
x OCTET STRING (SIZE (32)),
y OCTET STRING (SIZE (32))
}
EcsigP256Signature ::= SEQUENCE {
rSig OCTET STRING (SIZE (32)),
sSig OCTET STRING (SIZE (32))
}
EccP384CurvePoint::= CHOICE {
x-only OCTET STRING (SIZE (48)),
fill NULL, -- consistency w 1363 / X9.62
compressed-y-0 OCTET STRING (SIZE (48)),
compressed-y-1 OCTET STRING (SIZE (48)),
uncompressedP384 SEQUENCE {
x OCTET STRING (SIZE (48)),
y OCTET STRING (SIZE (48))
}
EccP256CurvePoint::= CHOICE {
x-only OCTET STRING (SIZE (32)),
fill NULL,
compressed-y-0 OCTET STRING (SIZE (32)),
compressed-y-1 OCTET STRING (SIZE (32)),
uncompressedP256 SEQUENCE {
x OCTET STRING (SIZE (32)),
y OCTET STRING (SIZE (32))
}
}
EccP384CurvePoint::= CHOICE {
x-only OCTET STRING (SIZE (48)),
fill NULL,
compressed-y-0 OCTET STRING (SIZE (48)),
compressed-y-1 OCTET STRING (SIZE (48)),
uncompressedP384 SEQUENCE {
x OCTET STRING (SIZE (48)),
y OCTET STRING (SIZE (48))
}
}
SymmAlgorithm ::= ENUMERATED {
aes128Ccm,
...,
sm4Ccm
}
HashAlgorithm ::= ENUMERATED {
sha256,
...,
sha384,
sm3
}
EciesP256EncryptedKey ::= SEQUENCE {
v EccP256CurvePoint,
c OCTET STRING (SIZE (16)),
t OCTET STRING (SIZE (16))
}
EcencP256EncryptedKey ::= SEQUENCE {
v EccP256CurvePoint,
c OCTET STRING (SIZE (16)),
t OCTET STRING (SIZE (32))
}
SymmAlgorithm ::= ENUMERATED {
aes128Ccm,
...
EncryptionKey ::= CHOICE {
public PublicEncryptionKey,
symmetric SymmetricEncryptionKey
}
HashAlgorithm ::= ENUMERATED {
sha256,
...,
sha384
PublicEncryptionKey ::= SEQUENCE {
supportedSymmAlg SymmAlgorithm,
publicKey BasePublicEncryptionKey
}
EciesP256EncryptedKey ::= SEQUENCE {
v EccP256CurvePoint,
c OCTET STRING (SIZE (16)),
t OCTET STRING (SIZE (16))
BasePublicEncryptionKey ::= CHOICE {
eciesNistP256 EccP256CurvePoint,
eciesBrainpoolP256r1 EccP256CurvePoint,
...,
ecencSm2 EccP256CurvePoint
}
EncryptionKey ::= CHOICE {
public PublicEncryptionKey,
symmetric SymmetricEncryptionKey
PublicVerificationKey ::= CHOICE {
ecdsaNistP256 EccP256CurvePoint,
ecdsaBrainpoolP256r1 EccP256CurvePoint,
... ,
ecdsaBrainpoolP384r1 EccP384CurvePoint,
ecdsaNistP384 EccP384CurvePoint,
ecsigSm2 EccP256CurvePoint
}
PublicEncryptionKey ::= SEQUENCE {
supportedSymmAlg SymmAlgorithm,
publicKey BasePublicEncryptionKey
SymmetricEncryptionKey ::= CHOICE {
aes128Ccm OCTET STRING(SIZE(16)),
...,
sm4Ccm OCTET STRING(SIZE(16))
}
BasePublicEncryptionKey ::= CHOICE {
eciesNistP256 EccP256CurvePoint,
eciesBrainpoolP256r1 EccP256CurvePoint,
...
}
PublicVerificationKey ::= CHOICE {
ecdsaNistP256 EccP256CurvePoint,
ecdsaBrainpoolP256r1 EccP256CurvePoint,
...,
ecdsaBrainpoolP384r1 EccP384CurvePoint
}
--***************************************************************************--
-- PSID / ITS-AID --
--***************************************************************************--
SymmetricEncryptionKey ::= CHOICE {
aes128Ccm OCTET STRING(SIZE(16)),
...
}
-- ------------------------------------------------------------------
--
-- PSID / ITS-AID
--
-- ------------------------------------------------------------------
PsidSsp ::= SEQUENCE {
psid Psid,
ssp ServiceSpecificPermissions OPTIONAL
PsidSsp ::= SEQUENCE {
psid Psid,
ssp ServiceSpecificPermissions OPTIONAL
}
SequenceOfPsidSsp ::= SEQUENCE OF PsidSsp
@ -272,64 +289,90 @@ Psid ::= INTEGER (0..MAX)
SequenceOfPsid ::= SEQUENCE OF Psid
ServiceSpecificPermissions ::= CHOICE {
opaque OCTET STRING (SIZE(0..MAX)),
...,
bitmapSsp BitmapSsp
ServiceSpecificPermissions ::= CHOICE {
opaque OCTET STRING (SIZE(0..MAX)),
...,
bitmapSsp BitmapSsp
}
BitmapSsp ::= OCTET STRING (SIZE(0..31))
PsidSspRange ::= SEQUENCE {
psid Psid,
sspRange SspRange OPTIONAL
PsidSspRange ::= SEQUENCE {
psid Psid,
sspRange SspRange OPTIONAL
}
SequenceOfPsidSspRange ::= SEQUENCE OF PsidSspRange
SspRange ::= CHOICE {
opaque SequenceOfOctetString,
all NULL,
... ,
bitmapSspRange BitmapSspRange
}
BitmapSspRange ::= SEQUENCE {
sspValue OCTET STRING (SIZE(1..32)),
sspBitmask OCTET STRING (SIZE(1..32))
SspRange ::= CHOICE {
opaque SequenceOfOctetString,
all NULL,
...,
bitmapSspRange BitmapSspRange
}
SequenceOfOctetString ::= SEQUENCE (SIZE (0..MAX)) OF
OCTET STRING (SIZE(0..MAX))
BitmapSspRange ::= SEQUENCE {
sspValue OCTET STRING (SIZE(1..32)),
sspBitmask OCTET STRING (SIZE(1..32))
}
SequenceOfOctetString ::=
SEQUENCE (SIZE (0..MAX)) OF OCTET STRING (SIZE(0..MAX))
-- ------------------------------------------------------------------
--
-- Goes in certs
--
-- ------------------------------------------------------------------
--***************************************************************************--
-- Certificate Components --
--***************************************************************************--
SubjectAssurance ::= OCTET STRING (SIZE(1))
CrlSeries ::= Uint16
-- ------------------------------------------------------------------
--
-- Pseudonym Linkage
--
-- ------------------------------------------------------------------
--***************************************************************************--
-- Pseudonym Linkage --
--***************************************************************************--
IValue ::= Uint16
Hostname ::= UTF8String (SIZE(0..255))
LinkageValue ::= OCTET STRING (SIZE(9))
GroupLinkageValue ::= SEQUENCE {
jValue OCTET STRING (SIZE(4)),
value OCTET STRING (SIZE(9))
GroupLinkageValue ::= SEQUENCE {
jValue OCTET STRING (SIZE(4)),
value OCTET STRING (SIZE(9))
}
LaId ::= OCTET STRING (SIZE(2))
LaId ::= OCTET STRING (SIZE(2))
SequenceOfLinkageSeed ::= SEQUENCE OF LinkageSeed
LinkageSeed ::= OCTET STRING (SIZE(16))
END
--***************************************************************************--
-- Information Object Classes and Sets --
--***************************************************************************--
CERT-EXT-TYPE ::= CLASS {
&id ExtId,
&App,
&Issue,
&Req
} WITH SYNTAX {ID &id APP &App ISSUE &Issue REQUEST &Req}
EXT-TYPE ::= CLASS {
&extId ExtId,
&ExtContent
} WITH SYNTAX {&ExtContent IDENTIFIED BY &extId}
Extension {EXT-TYPE : ExtensionTypes} ::= SEQUENCE {
id EXT-TYPE.&extId({ExtensionTypes}),
content EXT-TYPE.&ExtContent({ExtensionTypes}{@.id})
}
ExtId ::= INTEGER(0..255)
END

View File

@ -0,0 +1,418 @@
--***************************************************************************--
-- IEEE Std 1609.2 --
--***************************************************************************--
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) minor-version-6(6)}
DEFINITIONS AUTOMATIC TAGS ::= BEGIN
IMPORTS
CERT-EXT-TYPE,
CrlSeries,
EccP256CurvePoint,
EcencP256EncryptedKey,
EciesP256EncryptedKey,
EncryptionKey,
EXT-TYPE,
Extension,
ExtId,
GeographicRegion,
GroupLinkageValue,
HashAlgorithm,
HashedId3,
HashedId8,
HashedId32,
HashedId48,
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) minor-version-4(4)}
--WITH SUCCESSORS
EtsiOriginatingHeaderInfoExtension
FROM EtsiTs103097ExtensionModule {itu-t(0) identified-organization(4) etsi(0)
itsDomain(5) wg5(5) secHeaders(103097) extension(2) major-version-1(1)
minor-version-0(0)}
--WITH SUCCESSORS
;
--***************************************************************************--
-- Secured Data --
--***************************************************************************--
Ieee1609Dot2Data ::= SEQUENCE {
protocolVersion Uint8(3),
content Ieee1609Dot2Content
}
Ieee1609Dot2Content ::= CHOICE {
unsecuredData Opaque,
signedData SignedData,
encryptedData EncryptedData,
signedCertificateRequest Opaque,
...,
signedX509CertificateRequest Opaque
}
SignedData ::= SEQUENCE {
hashId HashAlgorithm,
tbsData ToBeSignedData,
signer SignerIdentifier,
signature Signature
}
ToBeSignedData ::= SEQUENCE {
payload SignedDataPayload,
headerInfo HeaderInfo
}
SignedDataPayload ::= SEQUENCE {
data Ieee1609Dot2Data OPTIONAL,
extDataHash HashedData OPTIONAL,
...,
omitted NULL OPTIONAL
} (WITH COMPONENTS {..., data PRESENT} |
WITH COMPONENTS {..., extDataHash PRESENT} |
WITH COMPONENTS {..., omitted PRESENT})
HashedData::= CHOICE {
sha256HashedData HashedId32,
...,
sha384HashedData HashedId48,
sm3HashedData HashedId32
}
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,
pduFunctionalType PduFunctionalType OPTIONAL,
contributedExtensions ContributedExtensionBlocks OPTIONAL
}
MissingCrlIdentifier ::= SEQUENCE {
cracaId HashedId3,
crlSeries CrlSeries,
...
}
PduFunctionalType ::= INTEGER (0..255)
tlsHandshake PduFunctionalType ::= 1
iso21177ExtendedAuth PduFunctionalType ::= 2
iso21177SessionExtension PduFunctionalType ::= 3
ContributedExtensionBlocks ::= SEQUENCE (SIZE(1..MAX)) OF
ContributedExtensionBlock
IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION ::= CLASS {
&id HeaderInfoContributorId UNIQUE,
&Extn
} WITH SYNTAX {&Extn IDENTIFIED BY &id}
ContributedExtensionBlock ::= SEQUENCE {
contributorId IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION.&id({
Ieee1609Dot2HeaderInfoContributedExtensions
}),
extns SEQUENCE (SIZE(1..MAX)) OF
IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION.&Extn({
Ieee1609Dot2HeaderInfoContributedExtensions
}{@.contributorId})
}
Ieee1609Dot2HeaderInfoContributedExtensions
IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION ::= {
{Ieee1609ContributedHeaderInfoExtension IDENTIFIED BY
ieee1609HeaderInfoContributorId} |
{EtsiOriginatingHeaderInfoExtension IDENTIFIED BY
etsiHeaderInfoContributorId},
...
}
HeaderInfoContributorId ::= INTEGER (0..255)
ieee1609HeaderInfoContributorId HeaderInfoContributorId ::= 1
etsiHeaderInfoContributorId HeaderInfoContributorId ::= 2
SignerIdentifier ::= CHOICE {
digest HashedId8,
certificate SequenceOfCertificate,
self NULL,
...
}
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
})
})
})
})
})
--***************************************************************************--
-- 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,
...,
ecencSm2256 EcencP256EncryptedKey
}
SymmetricCiphertext ::= CHOICE {
aes128ccm One28BitCcmCiphertext,
...,
sm4Ccm One28BitCcmCiphertext
}
One28BitCcmCiphertext ::= SEQUENCE {
nonce OCTET STRING (SIZE (12)),
ccmCiphertext Opaque
}
Aes128CcmCiphertext ::= One28BitCcmCiphertext
--***************************************************************************--
-- Certificates and other Security Management --
--***************************************************************************--
Certificate ::=
CertificateBase (ImplicitCertificate | ExplicitCertificate)
TestCertificate ::= Certificate
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,
sm3AndDigest 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,
...,
flags BIT STRING {usesCubk (0)} (SIZE (8)) OPTIONAL,
appExtensions SequenceOfAppExtensions,
certIssueExtensions SequenceOfCertIssueExtensions,
certRequestExtension SequenceOfCertRequestExtensions
}
(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}
}
SequenceOfPsidGroupPermissions ::= SEQUENCE OF PsidGroupPermissions
SubjectPermissions ::= CHOICE {
explicit SequenceOfPsidSspRange,
all NULL,
...
}
VerificationKeyIndicator ::= CHOICE {
verificationKey PublicVerificationKey,
reconstructionValue EccP256CurvePoint,
...
}
Ieee1609ContributedHeaderInfoExtension ::=
Extension{{Ieee1609HeaderInfoExtensions}}
Ieee1609HeaderInfoExtensionId ::= ExtId
p2pcd8ByteLearningRequestId Ieee1609HeaderInfoExtensionId ::= 1
Ieee1609HeaderInfoExtensions EXT-TYPE ::= {
{HashedId8 IDENTIFIED BY p2pcd8ByteLearningRequestId},
...
}
SequenceOfAppExtensions ::= SEQUENCE (SIZE(1..MAX)) OF AppExtension
SetCertExtensions CERT-EXT-TYPE ::= {
instanceOperatingOrganizationCertExtensions,
...
}
AppExtension ::= SEQUENCE {
id CERT-EXT-TYPE.&id({SetCertExtensions}),
content CERT-EXT-TYPE.&App({SetCertExtensions}{@.id})
}
SequenceOfCertIssueExtensions ::=
SEQUENCE (SIZE(1..MAX)) OF CertIssueExtension
CertIssueExtension ::= SEQUENCE {
id CERT-EXT-TYPE.&id({SetCertExtensions}),
permissions CHOICE {
specific CERT-EXT-TYPE.&Issue({SetCertExtensions}{@.id}),
all NULL
}
}
SequenceOfCertRequestExtensions ::= SEQUENCE (SIZE(1..MAX)) OF CertRequestExtension
CertRequestExtension ::= SEQUENCE {
id CERT-EXT-TYPE.&id({SetCertExtensions}),
permissions CHOICE {
content CERT-EXT-TYPE.&Req({SetCertExtensions}{@.id}),
all NULL
}
}
OperatingOrganizationId ::= OBJECT IDENTIFIER
certExtId-OperatingOrganization ExtId ::= 1
instanceOperatingOrganizationCertExtensions CERT-EXT-TYPE ::= {
ID certExtId-OperatingOrganization
APP OperatingOrganizationId
ISSUE NULL
REQUEST NULL
}
END

View File

@ -0,0 +1,90 @@
--***************************************************************************--
-- IEEE Std 1609.2: CRL Data Types --
--***************************************************************************--
Ieee1609Dot2Crl {iso(1) identified-organization(3) ieee(111)
standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
crl(3) major-version-3(3) minor-version-2(2)}
DEFINITIONS AUTOMATIC TAGS ::= BEGIN
IMPORTS
Ieee1609Dot2Data
FROM 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) minor-version-6(6)}
--WITH SUCCESSORS
Opaque,
Psid
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) minor-version-4(4)}
--WITH SUCCESSORS
CrlContents
FROM Ieee1609Dot2CrlBaseTypes {iso(1) identified-organization(3) ieee(111)
standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
crl(3) base-types(2) major-version-3(3) minor-version-2(2)}
--WITH SUCCESSORS
;
CrlPsid ::= Psid(256)
--SecuredCrl ::= Ieee1609Dot2Data (WITH COMPONENTS {...,
-- content (WITH COMPONENTS {
-- signedData (WITH COMPONENTS {...,
-- tbsData (WITH COMPONENTS {
-- payload (WITH COMPONENTS {...,
-- data (WITH COMPONENTS {...,
-- content (WITH COMPONENTS {
-- unsecuredData (CONTAINING CrlContents)
-- })
-- })
-- }),
-- headerInfo (WITH COMPONENTS {...,
-- psid (CrlPsid),
-- generationTime ABSENT,
-- expiryTime ABSENT,
-- generationLocation ABSENT,
-- p2pcdLearningRequest ABSENT,
-- missingCrlIdentifier ABSENT,
-- encryptionKey ABSENT
-- })
-- })
-- })
-- })
--})
SecuredCrl ::= SEQUENCE {
content SecuredCrlContent
}
-- content
SecuredCrlContent ::= CHOICE {
signedData CrlSignedData
}
CrlSignedData ::= SEQUENCE {
tbsData CrlToBeSignedData
}
CrlToBeSignedData ::= SEQUENCE {
payload CrlSignedDataPayload,
headerInfo HeaderInfo
}
CrlSignedDataPayload ::= SEQUENCE {
data Ieee1609Dot2CrlData OPTIONAL
}
Ieee1609Dot2CrlData ::= SEQUENCE {
content Ieee1609Dot2CrlContent
}
Ieee1609Dot2CrlContent ::= CHOICE {
unsecuredData CrlContents
}
END

View File

@ -0,0 +1,165 @@
--***************************************************************************--
-- IEEE Std 1609.2: CRL Base Data Types --
--***************************************************************************--
Ieee1609Dot2CrlBaseTypes {iso(1) identified-organization(3) ieee(111)
standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2)
crl(3) base-types(2) major-version-3(3) minor-version-2(2)}
DEFINITIONS AUTOMATIC TAGS ::= BEGIN
IMPORTS
CrlSeries,
Duration,
GeographicRegion,
HashedId8,
HashedId10,
IValue,
LaId,
LinkageSeed,
Opaque,
Psid,
SequenceOfLinkageSeed,
Signature,
Time32,
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) minor-version-4(4)}
--WITH SUCCESSORS
;
CrlContents ::= SEQUENCE {
version Uint8 (1),
crlSeries CrlSeries,
crlCraca HashedId8,
issueDate Time32,
nextCrl Time32,
priorityInfo CrlPriorityInfo,
typeSpecific TypeSpecificCrlContents
}
CrlPriorityInfo ::= SEQUENCE {
priority Uint8 OPTIONAL,
...
}
TypeSpecificCrlContents ::= CHOICE {
fullHashCrl ToBeSignedHashIdCrl,
deltaHashCrl ToBeSignedHashIdCrl,
fullLinkedCrl ToBeSignedLinkageValueCrl,
deltaLinkedCrl ToBeSignedLinkageValueCrl,
...,
fullLinkedCrlWithAlg ToBeSignedLinkageValueCrlWithAlgIdentifier,
deltaLinkedCrlWithAlg ToBeSignedLinkageValueCrlWithAlgIdentifier
}
ToBeSignedHashIdCrl ::= SEQUENCE {
crlSerial Uint32,
entries SequenceOfHashBasedRevocationInfo,
...
}
SequenceOfHashBasedRevocationInfo ::=
SEQUENCE OF HashBasedRevocationInfo
HashBasedRevocationInfo ::= SEQUENCE {
id HashedId10,
expiry Time32,
...
}
ToBeSignedLinkageValueCrl ::= SEQUENCE {
iRev IValue,
indexWithinI Uint8,
individual SequenceOfJMaxGroup OPTIONAL,
groups SequenceOfGroupCrlEntry OPTIONAL,
...,
groupsSingleSeed SequenceOfGroupSingleSeedCrlEntry OPTIONAL
} (WITH COMPONENTS {..., individual PRESENT} |
WITH COMPONENTS {..., groups PRESENT} |
WITH COMPONENTS {..., groupsSingleSeed PRESENT})
SequenceOfJMaxGroup ::= SEQUENCE OF JMaxGroup
JMaxGroup ::= SEQUENCE {
jmax Uint8,
contents SequenceOfLAGroup,
...
}
SequenceOfLAGroup ::= SEQUENCE OF LAGroup
LAGroup ::= SEQUENCE {
la1Id LaId,
la2Id LaId,
contents SequenceOfIMaxGroup,
...
}
SequenceOfIMaxGroup ::= SEQUENCE OF IMaxGroup
IMaxGroup ::= SEQUENCE {
iMax Uint16,
contents SequenceOfIndividualRevocation,
...,
singleSeed SequenceOfLinkageSeed OPTIONAL
}
SequenceOfIndividualRevocation ::=
SEQUENCE (SIZE(0..MAX)) OF IndividualRevocation
IndividualRevocation ::= SEQUENCE {
linkageSeed1 LinkageSeed,
linkageSeed2 LinkageSeed,
...
}
SequenceOfGroupCrlEntry ::= SEQUENCE OF GroupCrlEntry
GroupCrlEntry ::= SEQUENCE {
iMax Uint16,
la1Id LaId,
linkageSeed1 LinkageSeed,
la2Id LaId,
linkageSeed2 LinkageSeed,
...
}
ToBeSignedLinkageValueCrlWithAlgIdentifier ::= SEQUENCE {
iRev IValue,
indexWithinI Uint8,
seedEvolution SeedEvolutionFunctionIdentifier,
lvGeneration LvGenerationFunctionIdentifier,
individual SequenceOfJMaxGroup OPTIONAL,
groups SequenceOfGroupCrlEntry OPTIONAL,
groupsSingleSeed SequenceOfGroupSingleSeedCrlEntry OPTIONAL,
...
} (WITH COMPONENTS {..., individual PRESENT} |
WITH COMPONENTS {..., groups PRESENT} |
WITH COMPONENTS {..., groupsSingleSeed PRESENT})
SequenceOfGroupSingleSeedCrlEntry ::=
SEQUENCE OF GroupSingleSeedCrlEntry
GroupSingleSeedCrlEntry ::= SEQUENCE {
iMax Uint16,
laId LaId,
linkageSeed LinkageSeed
}
ExpansionAlgorithmIdentifier ::= ENUMERATED {
sha256ForI-aesForJ,
sm3ForI-sm4ForJ,
...
}
SeedEvolutionFunctionIdentifier ::= NULL
LvGenerationFunctionIdentifier ::= NULL
END

View File

@ -6,6 +6,7 @@ OER
#.END
#.MODULE
Ieee1609Dot2BaseTypes ieee1609dot2
#.MODULE_IMPORT
#.EXPORTS ONLY_VALS WS_DLL
@ -18,7 +19,7 @@ Psid
#.PDU
Ieee1609Dot2Data
SecuredCrl
#.NO_EMIT
#.NO_EMIT ONLY_VALS
@ -30,16 +31,21 @@ OneEightyDegreeInt
TestCertificate
Countersignature
ExplicitCertificate
HashedId10
ImplicitCertificate
KnownLatitude
KnownLongitude
LaId
LinkageSeed
SequenceOfPsid
Uint3
UnknownLatitude
UnknownLongitude
OperatingOrganizationId
Ieee1609HeaderInfoExtensionId
Ieee1609ContributedHeaderInfoExtension
Aes128CcmCiphertext
CrlPsid
ExpansionAlgorithmIdentifier
Extension
CountryOnly
#.TYPE_RENAME
@ -73,7 +79,6 @@ EncryptedDataEncryptionKey/eciesBrainpoolP256r1 edekEciesBrainpoolP256r1
#.TYPE_ATTR
NinetyDegreeInt DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(ieee1609dot2_NinetyDegreeInt_fmt)
OneEightyDegreeInt DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(ieee1609dot2_OneEightyDegreeInt_fmt)
ElevInt DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(ieee1609dot2_ElevInt_fmt)
Time32 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(ieee1609dot2_Time32_fmt)
Time64 DISPLAY=BASE_CUSTOM STRINGS=CF_FUNC(ieee1609dot2_Time64_fmt)
@ -180,7 +185,7 @@ psid-peer-to-peer-distribution-of-security-management-information Psid
psid-traffic-light-manoeuver-service Psid
psid-road-and-lane-topology-service Psid
psid-infrastructure-to-vehicle-information-service Psid
psid-traffic-light-control-service Psid
psid-traffic-light-control-requests-service Psid
psid-geonetworking-management-communications Psid
psid-certificate-revocation-list-application Psid
psid-collective-perception-service Psid

View File

@ -92,13 +92,6 @@ ieee1609dot2_OneEightyDegreeInt_fmt(gchar *s, guint32 v)
}
}
static void
ieee1609dot2_ElevInt_fmt(gchar *s, guint32 v)
{
// Range is from -4096 to 61439 in units of one-tenth of a meter
gint32 alt = (gint32)v - 4096;
snprintf(s, ITEM_LABEL_LENGTH, "%.2fm (%u)", alt * 0.1, v);
}
static void
ieee1609dot2_Time32_fmt(gchar *s, guint32 v)
@ -151,11 +144,13 @@ void proto_register_ieee1609dot2(void) {
"ATS-AID/PSID based dissector for Service Specific Permissions (SSP)", proto_ieee1609dot2, FT_UINT32, BASE_HEX);
}
void proto_reg_handoff_ieee1609dot2(void) {
dissector_add_string("media_type", "application/x-its", proto_ieee1609dot2_handle);
dissector_add_string("media_type", "application/x-its-request", proto_ieee1609dot2_handle);
dissector_add_string("media_type", "application/x-its-response", proto_ieee1609dot2_handle);
dissector_add_uint("ieee1609dot2.psid", psid_certificate_revocation_list_application, create_dissector_handle(dissect_SecuredCrl_PDU, proto_ieee1609dot2));
//dissector_add_uint_range_with_preference("udp.port", "56000,56001", proto_ieee1609dot2_handle);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
/* Do not modify this file. Changes will be overwritten. */
/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
/* packet-ieee1609dot2.h */
/* asn2wrs.py -L -p ieee1609dot2 -c ./ieee1609dot2.cnf -s ./packet-ieee1609dot2-template -D . -O ../.. IEEE1609dot2BaseTypes.asn IEEE1609dot2DataTypes.asn IEEE1609dot12.asn */
/* asn2wrs.py -L -p ieee1609dot2 -c ./ieee1609dot2.cnf -s ./packet-ieee1609dot2-template -D . -O ../.. IEEE1609dot2BaseTypes.asn Ieee1609Dot2CrlBaseTypes.asn Ieee1609Dot2Crl.asn Ieee1609Dot2.asn IEEE1609dot12.asn */
/* packet-IEEE1609dot2.h
* Routines for IEEE 1609.2
@ -19,6 +19,7 @@
#include "ws_symbol_export.h"
#define p2pcd8ByteLearningRequestId 1
typedef enum _Psid_enum {
psid_system = 0,
@ -76,9 +77,9 @@ typedef enum _Psid_enum {
psid_infrastructure_to_vehicle_information_service = 139,
psid_traffic_light_control_requests_service = 140,
psid_geonetworking_management_communications = 141,
psid_certificate_revocation_list_application = 256,
psid_traffic_light_control_status_service = 637,
psid_collective_perception_service = 639,
psid_certificate_revocation_list_application = 256,
psid_vehicle_initiated_distress_notivication = 16514,
psid_fast_service_advertisement_protocol = 2113664,
psid_its_station_internal_management_communications_protocol = 2113665,

View File

@ -37,14 +37,17 @@ static int hf_oer_optional_field_bit = -1;
static int hf_oer_class = -1;
static int hf_oer_tag = -1;
static int hf_oer_length_determinant = -1;
static int hf_oer_extension_present_bit = -1;
static int hf_oer_extension_present_bit;
static int hf_oer_open_type_length = -1;
/* Initialize the subtree pointers */
static int ett_oer = -1;
static int ett_oer_sequence_of_item = -1;
static int ett_oer_open_type = -1;
static expert_field ei_oer_not_decoded_yet = EI_INIT;
static expert_field ei_oer_undecoded = EI_INIT;
static expert_field ei_oer_open_type = EI_INIT;
/* whether the OER helpers should put the internal OER fields into the tree or not. */
static gboolean display_internal_oer_fields = FALSE;
@ -795,6 +798,54 @@ dissect_oer_choice(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *
return offset;
}
/* 21 Encoding of object identifier values
* The encoding of an object identifier value shall consist of a length determinant (see 8.6) followed by a series of octets,
* which are the contents octets of BER encoding of the object identifier value (see Rec. ITU-T X.690 | ISO/IEC 8825-1,8.19).
*/
static guint32
dissect_oer_any_oid(tvbuff_t* tvb, guint32 offset, asn1_ctx_t* actx, proto_tree* tree, int hf_index, tvbuff_t** value_tvb,
gboolean is_absolute)
{
guint length;
const char* str;
header_field_info* hfi;
DEBUG_ENTRY("dissect_oer_any_oid");
offset = dissect_oer_length_determinant(tvb, offset, actx, tree, hf_oer_length_determinant, &length);
actx->created_item = NULL;
hfi = proto_registrar_get_nth(hf_index);
if ((is_absolute && hfi->type == FT_OID) || (!is_absolute && hfi->type == FT_REL_OID)) {
actx->created_item = proto_tree_add_item(tree, hf_index, tvb, offset, length, ENC_BIG_ENDIAN);
}
else if (FT_IS_STRING(hfi->type)) {
str = oid_encoded2string(actx->pinfo->pool, tvb_get_ptr(tvb, offset, length), length);
actx->created_item = proto_tree_add_string(tree, hf_index, tvb, offset, length, str);
if (actx->created_item) {
/* see if we know the name of this oid */
str = oid_resolved_from_encoded(actx->pinfo->pool, tvb_get_ptr(tvb, offset, length), length);
if (str) {
proto_item_append_text(actx->created_item, " (%s)", str);
}
}
}
else {
DISSECTOR_ASSERT_NOT_REACHED();
}
if (value_tvb)
*value_tvb = tvb_new_subset_length(tvb, offset, length);
return offset;
}
guint32
dissect_oer_object_identifier(tvbuff_t* tvb, guint32 offset, asn1_ctx_t* actx, proto_tree* tree, int hf_index, tvbuff_t** value_tvb)
{
return dissect_oer_any_oid(tvb, offset, actx, tree, hf_index, value_tvb, TRUE);
}
/* 27 Encoding of values of the restricted character string types
* 27.1 The encoding of a restricted character string type depends on whether the type is a known-multiplier character
* string type or not. The following types are known-multiplier character string types:
@ -836,6 +887,60 @@ dissect_oer_UTF8String(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tr
}
/* 30 Encoding of open type values
*NOTE An open type is an ASN.1 type that can take any abstract value of any ASN.1 type. Each value of an open type consists
* of:
* a) a contained type; and
* b) a value of the contained type.
* The encoding of an open type value shall consist of a length determinant (see 8.6) followed by a series of octets, which
* are the encoding of the value of the contained type.
*/
static guint32
dissect_oer_open_type_internal(tvbuff_t* tvb, guint32 offset, asn1_ctx_t* actx, proto_tree* tree, int hf_index, void* type_cb, asn1_cb_variant variant)
{
int type_length, start_offset;
tvbuff_t* val_tvb = NULL;
proto_tree* subtree = tree;
start_offset = offset;
offset = dissect_oer_length_determinant(tvb, offset, actx, tree, hf_oer_open_type_length, &type_length);
val_tvb = tvb_new_subset_length(tvb, offset, type_length);
actx->created_item = proto_tree_add_item(tree, hf_index, val_tvb, 0, type_length, ENC_BIG_ENDIAN);
subtree = proto_item_add_subtree(actx->created_item, ett_oer_open_type);
if (variant == CB_NEW_DISSECTOR) {
add_new_data_source(actx->pinfo, val_tvb, "OCTET STRING");
}
if (type_cb) {
switch (variant) {
case CB_ASN1_ENC:
((oer_type_fn)type_cb)(val_tvb, 0, actx, tree, hf_index);
break;
case CB_NEW_DISSECTOR:
/* Pas actx->private_data as "data" to the called function */
((dissector_t)type_cb)(val_tvb, actx->pinfo, subtree, actx->private_data);
break;
case CB_DISSECTOR_HANDLE:
break;
}
}
else {
actx->created_item = proto_tree_add_expert(tree, actx->pinfo, &ei_oer_open_type, tvb, start_offset, offset - start_offset);
}
return offset;
}
guint32
dissect_oer_open_type(tvbuff_t* tvb, guint32 offset, asn1_ctx_t* actx, proto_tree* tree, int hf_index, oer_type_fn type_cb)
{
return dissect_oer_open_type_internal(tvb, offset, actx, tree, hf_index, (void*)type_cb, CB_ASN1_ENC);
}
/*--- proto_register_oer ----------------------------------------------*/
void proto_register_oer(void) {
@ -865,6 +970,11 @@ void proto_register_oer(void) {
{ "Extension Present Bit", "oer.extension_present_bit",
FT_UINT8, BASE_DEC, VALS(oer_extension_present_bit_vals), 0x00,
NULL, HFILL } },
{ &hf_oer_open_type_length,
{ "Open Type Length", "oer.open_type_length",
FT_UINT32, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
};
@ -872,6 +982,7 @@ void proto_register_oer(void) {
static gint *ett[] = {
&ett_oer,
&ett_oer_sequence_of_item,
&ett_oer_open_type,
};
module_t *oer_module;
@ -889,6 +1000,8 @@ void proto_register_oer(void) {
{ "oer.not_decoded_yet", PI_UNDECODED, PI_WARN, "Not decoded yet", EXPFILL }},
{ &ei_oer_undecoded,
{ "oer.error.undecoded", PI_UNDECODED, PI_WARN, "OER: Something unknown here", EXPFILL } },
{ &ei_oer_open_type,
{ "oer.open_type.unknown", PI_PROTOCOL, PI_WARN, "Unknown Open Type", EXPFILL }},
};
expert_oer = expert_register_protocol(proto_oer);

View File

@ -71,7 +71,7 @@ WS_DLL_PUBLIC guint32 dissect_oer_constrained_sequence_of(tvbuff_t *tvb, guint32
//WS_DLL_PUBLIC guint32 dissect_oer_set_of(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *parent_tree, int hf_index, gint ett_index, const oer_sequence_t *seq);
//WS_DLL_PUBLIC guint32 dissect_oer_object_identifier(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, tvbuff_t **value_tvb);
WS_DLL_PUBLIC guint32 dissect_oer_object_identifier(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, tvbuff_t **value_tvb);
//WS_DLL_PUBLIC guint32 dissect_oer_object_identifier_str(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, const char **value_stringx);
//WS_DLL_PUBLIC guint32 dissect_oer_relative_oid(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, tvbuff_t **value_tvb);
@ -104,7 +104,7 @@ dissect_oer_bit_string(tvbuff_t *tvb, guint32 offset _U_, asn1_ctx_t *actx, prot
WS_DLL_PUBLIC guint32 dissect_oer_enumerated(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, guint32 root_num, guint32 *value, gboolean has_extension, guint32 ext_num, guint32 *value_map);
//WS_DLL_PUBLIC guint32 dissect_oer_open_type(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, oer_type_fn type_cb);
WS_DLL_PUBLIC guint32 dissect_oer_open_type(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, oer_type_fn type_cb);
//WS_DLL_PUBLIC guint32 dissect_oer_open_type_pdu_new(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, dissector_t type_cb);
//WS_DLL_PUBLIC guint32 dissect_oer_external_type(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, oer_type_fn type_cb);

View File

@ -849,9 +849,9 @@ class EthCtx:
#--- eth_import_type --------------------------------------------------------
def eth_import_type(self, ident, mod, proto):
#print "eth_import_type(ident='%s', mod='%s', prot='%s')" % (ident, mod, proto)
#print ("eth_import_type(ident='%s', mod='%s', prot='%s')" % (ident, mod, proto))
if ident in self.type:
#print "already defined '%s' import=%s, module=%s" % (ident, str(self.type[ident]['import']), self.type[ident].get('module', '-'))
#print ("already defined '%s' import=%s, module=%s" % (ident, str(self.type[ident]['import']), self.type[ident].get('module', '-')))
if not self.type[ident]['import'] and (self.type[ident]['module'] == mod) :
return # OK - already defined
elif self.type[ident]['import'] and (self.type[ident]['import'] == mod) :
@ -3960,7 +3960,7 @@ class TaggedType (Type):
par=(('%(IMPLICIT_TAG)s', '%(ACTX)s', '%(TREE)s', '%(TVB)s', '%(OFFSET)s'),
('%(HF_INDEX)s', '%(TAG_CLS)s', '%(TAG_TAG)s', '%(TAG_IMPL)s', '%(TYPE_REF_FN)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode tagged_type %s' % (tname)
return body
#--- SqType -----------------------------------------------------------
@ -4214,7 +4214,7 @@ class SequenceOfType (SeqOfType):
('%(ETT_INDEX)s', '%(TABLE)s',),
('%(MIN_VAL)s', '%(MAX_VAL)s','%(EXT)s'),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode SequenceOfType %s' % (tname)
return body
@ -4271,7 +4271,7 @@ class SetOfType (SeqOfType):
('%(ETT_INDEX)s', '%(TABLE)s',),
('%(MIN_VAL)s', '%(MAX_VAL)s','%(EXT)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode SetOfType %s' % (tname)
return body
def mk_tag_str (ctx, cls, typ, num):
@ -4350,7 +4350,7 @@ class SequenceType (SeqType):
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(HF_INDEX)s'),
('%(ETT_INDEX)s', '%(TABLE)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode SequenceType %s' % (tname)
return body
#--- ExtensionAdditionGroup ---------------------------------------------------
@ -4384,7 +4384,7 @@ class ExtensionAdditionGroup (SeqType):
body = ectx.eth_fn_call('dissect_%(ER)s_sequence_eag', ret='offset',
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(TABLE)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode ExtensionAdditionGroup %s' % (tname)
return body
@ -4412,7 +4412,7 @@ class SetType (SeqType):
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(HF_INDEX)s'),
('%(ETT_INDEX)s', '%(TABLE)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode SetType %s' % (tname)
return body
#--- ChoiceType ---------------------------------------------------------------
@ -4678,7 +4678,7 @@ class ChoiceType (Type):
('%(ETT_INDEX)s', '%(TABLE)s',),
('%(VAL_PTR)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode ChoiceType %s' % (tname)
return body
#--- ChoiceValue ----------------------------------------------------
@ -4813,7 +4813,7 @@ class EnumeratedType (Type):
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(HF_INDEX)s'),
('%(ROOT_NUM)s', '%(VAL_PTR)s', '%(EXT)s', '%(EXT_NUM)s', '%(TABLE)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode EnumeratedType %s' % (tname)
return body
#--- EmbeddedPDVType -----------------------------------------------------------
@ -4843,7 +4843,7 @@ class EmbeddedPDVType (Type):
body = ectx.eth_fn_call('dissect_%(ER)s_embedded_pdv', ret='offset',
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(HF_INDEX)s', '%(TYPE_REF_FN)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode EmbeddedPDVType %s' % (tname)
return body
#--- ExternalType -----------------------------------------------------------
@ -4873,7 +4873,7 @@ class ExternalType (Type):
body = ectx.eth_fn_call('dissect_%(ER)s_external_type', ret='offset',
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(HF_INDEX)s', '%(TYPE_REF_FN)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode ExternalType %s' % (tname)
return body
#--- OpenType -----------------------------------------------------------
@ -4920,11 +4920,11 @@ class OpenType (Type):
return pars
def eth_type_default_body(self, ectx, tname):
if (ectx.Per()):
if (ectx.Per() or ectx.Oer()):
body = ectx.eth_fn_call('dissect_%(ER)s_open_type%(FN_VARIANT)s', ret='offset',
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(HF_INDEX)s', '%(TYPE_REF_FN)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode OpenType %s' % (tname)
return body
#--- InstanceOfType -----------------------------------------------------------
@ -5333,6 +5333,9 @@ class ObjectIdentifierType (Type):
elif (ectx.Per()):
body = ectx.eth_fn_call('dissect_%(ER)s_object_identifier%(FN_VARIANT)s', ret='offset',
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(HF_INDEX)s', '%(VAL_PTR)s',),))
elif (ectx.Oer()):
body = ectx.eth_fn_call('dissect_%(ER)s_object_identifier%(FN_VARIANT)s', ret='offset',
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(HF_INDEX)s', '%(VAL_PTR)s',),))
else:
body = '#error Can not decode %s' % (tname)
return body
@ -5418,7 +5421,7 @@ class RelativeOIDType (Type):
body = ectx.eth_fn_call('dissect_%(ER)s_relative_oid%(FN_VARIANT)s', ret='offset',
par=(('%(TVB)s', '%(OFFSET)s', '%(ACTX)s', '%(TREE)s', '%(HF_INDEX)s', '%(VAL_PTR)s',),))
else:
body = '#error Can not decode %s' % (tname)
body = '#error Can not decode relative_oid %s' % (tname)
return body