aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/ieee1609dot2/IEEE1609dot2DataTypes.asn
blob: a7e8abf388e02bdb76a9539d19814e1532e7cc91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
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: 1

--******************************************************************************
-- 
-- 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)

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
}

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 {})
EndEntityType ::= BIT STRING {app (0), enrol (1) } (SIZE (8))

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,
    ...
}
  
END