2 -- Sub-Volume IV ASN.1 reference definitions for ICAO Doc. 9705,
4 -- Version 1.1, 03 Oct 2001
6 -- The majority of the ULCS protocol definitions are specified in the ULCS
7 -- Technical Provisions by reference to ISO/IEC Standards and/or ITU-T
8 -- Recommendations. The ASN.1 definitions are reproduced here for ease of
9 -- reference and to allow explanatory annotations to be added. In the case of
10 -- any discrepancy between the definitions here and the corresponding
11 -- definitions defined in or referenced by the ULCS Technical Provisions,
12 -- the latter are assumed to take precedence.
14 -- The following ASN.1 modules are included here:
16 -- * General ULCS types. These are ASN.1 definitions used in the ULCS
17 -- Technical Provisions, though there is no equivalent ASN.1 module
18 -- defined there. The definitions in this module would generally be
19 -- incorporated into a wider "user" protocol module if using ASN.1 automated
20 -- tools. They are defined in a separate module here so that their syntax can
21 -- easily be verified by an ASN.1 syntax checker.
23 -- * Connection-oriented ACSE definitions. This is equivalent to the "ACSE-1"
24 -- module defined in the connection-oriented ACSE protocol standard.
26 -- * Information Framework. This is an extract of relevant definitions from the
27 -- InformationFramework module in the OSI standard "Directory : Models". The
28 -- types defined in this module are not actively used in the ULCS protocol, but
29 -- they are needed to satisfy IMPORTS statements in the ACSE definitions, and
30 -- to allow certain CHOICE types in the ACSE definitions to be sorted correctly
31 -- into canonical order.
34 -- Note.- In the following definitions, the ASN.1 comment " X" indicates
35 -- choice elements and optional elements in sequence types that are defined as
36 -- "Excluded" in the ULCS profile. That is, implementations of ULCS provisions
37 -- are never required to encode values for such elements (though they are
38 -- required to indicate the absence of these elements in all instances, by means
39 -- of bits in the appropriate PER preamble or choice index).
44 ULCS DEFINITIONS ::= BEGIN
45 -- ***************************************************************************
46 -- The following ASN.1 definitions are from Doc 9705 Sub-Volume IV,
48 -- ***************************************************************************
50 --Presentation User Data is Fully-encoded-data from
51 --ISO/IEC 8823-1:1994/Amd.1:1997 | ITU-T Rec. X.226/Amd. 1
53 --Fully-encoded-data ::= SEQUENCE SIZE (1, ...) OF PDV-list
54 Fully-encoded-data ::= SEQUENCE SIZE (1, ..., 2..MAX) OF PDV-list
55 -- contains one or more presentation-data-value-list (PDV-list) values
56 -- ATN commentary: The SIZE constraint above differs from the referenced
57 -- standard, which specifies (in 8.2):
58 -- Fully-encoded-data ::= SEQUENCE SIZE (1, ..., 2..MAX) OF PDV-list.
59 -- The ULCS provisions specify a simplified, but compatible, efficiency
60 -- constraint as there will never be more than one element in the SEQUENCE OF
61 -- for the foreseeable future.
62 -- This simplifies matters for some compilers.
64 PDV-list ::= SEQUENCE {
65 transfer-syntax-name Transfer-syntax-name OPTIONAL, -- X
66 presentation-context-identifier Presentation-context-identifier,
67 presentation-data-values CHOICE
68 { single-ASN1-type [0] ABSTRACT-SYNTAX.&Type
70 -- Type corresponding to presentation context identifier -- }) , -- X
71 octet-aligned [1] IMPLICIT OCTET STRING, -- X
72 arbitrary [2] IMPLICIT BIT STRING }
73 -- contains one or more presentation data values from the same
74 -- presentation context.
75 -- ATN Commentary: only the arbitrary BIT STRING encoding choice is used.
78 Transfer-syntax-name ::= OBJECT IDENTIFIER -- ATN: not used for ATN Upper Layers
80 Presentation-context-identifier::= INTEGER -- ATN: the following values are
84 user-ase-apdu (3) } (1..127, ... )
85 -- ATN commentary: The SIZE constraint above differs from the referenced
86 -- standard, which specifies (in 8.2):
87 -- Presentation-context-identifier::= INTEGER (1..127, ..., 128..MAX ).
88 -- The ULCS provisions specify a simplified, but compatible, efficiency
89 -- constraint as there will never be more than 127 presentation contexts in
90 -- ATN for the foreseeable future.
91 -- This simplifies matters for some compilers. The list of defined values is
92 -- shown here for guidance only, and has no effect on the PER encoding.
95 END -- of ULCS definitions
97 -- Connection-oriented ACSE definitions
98 --*************************************************************************
99 -- The ACSE abstract syntax from ISO/IEC 8650-1/Amd.1 | ITU-T Rec. X.227/
100 -- Amd. 1 is reproduced here for ease of reference. In case of any discrepancy,
101 -- the ISO/IEC standard takes precedence.
102 --*************************************************************************
104 ACSE-1 {joint-iso-itu-t association-control(2) modules(0) apdus(0) version1(1)}
105 -- ACSE-1 refers to ACSE version 1
109 acse-as-id, ACSE-apdu, aCSE-id, Application-context-name, AP-title,
110 AE-qualifier, -- AE-title, (ATN: AE-title is not needed)
111 AP-invocation-identifier,
112 AE-invocation-identifier, Mechanism-name, Authentication-value,
114 IMPORTS Name, RelativeDistinguishedName
115 FROM InformationFramework
116 { joint-iso-ccitt ds(5) module(1) informationFramework(1) 2 };
117 -- The data types Name and RelativeDistinguishedName are imported
118 -- from ISO/IEC 9594-2 | ITU-T Rec. X.501.
119 -- ATN Commentary: The relevant InformationFramework extracts are given
122 -- *************************************************************************
124 -- *************************************************************************
126 -- EXTERNAL is an ASN.1 UNIVERSAL type. The definition in the PER standard
127 -- ISO/IEC 8825-2 | ITU-T Rec. X.691 is assumed for ACSE.
128 -- The type is used in ACSE user-information
129 -- fields. ASN.1 compilers will not in general allow EXTERNAL to be
130 -- redefined (therefore 'EXTERNALt'),
131 -- and it is invalid ASN.1 to define a type with tag [UNIVERSAL 8]
133 -- Workaround for bug in asn2wrs in the .cnf file
134 -- to handle the lack of support for tagged assignments.
135 -- remove that workaround once asn2wrs learns how to handle
136 -- tagged assignments.
138 EXTERNALt ::= [8] IMPLICIT SEQUENCE {
139 direct-reference OBJECT IDENTIFIER OPTIONAL, -- X
140 indirect-reference INTEGER OPTIONAL,
141 data-value-descriptor ObjectDescriptor OPTIONAL, -- X
143 single-ASN1-type [0] ABSTRACT-SYNTAX.&Type,
144 octet-aligned [1] IMPLICIT OCTET STRING, -- X
145 arbitrary [2] IMPLICIT BIT STRING }}
146 -- ATN: implementations are advised to use arbitrary (BIT STRING)
147 -- encodings only (see Guidance Material section 2.6.5.21).
148 -- BIT STRING values are not padded to octet boundaries.
151 -- object identifier assignments
152 acse-as-id OBJECT IDENTIFIER ::=
153 {joint-iso-itu-t association-control(2) abstract-syntax(1) apdus(0) version1(1)}
154 -- may be used to reference the abstract syntax of the ACSE APDUs
155 aCSE-id OBJECT IDENTIFIER ::=
156 { joint-iso-itu-t association-control(2) ase-id(3) acse-ase(1) version(1) }
157 -- may be used to identify the Association Control ASE.
162 aarq AARQ-apdu, -- ACSE associate request pdu
163 aare AARE-apdu, -- ACSE associate response pdu
164 rlrq RLRQ-apdu, -- ACSE release request pdu
165 rlre RLRE-apdu, -- ACSE release response pdu
166 abrt ABRT-apdu, -- ACSE abort pdu
170 AARQ-apdu ::= [ APPLICATION 0 ] IMPLICIT SEQUENCE
171 { protocol-version [0] IMPLICIT BIT STRING { version1 (0) } DEFAULT { version1 }, -- X
172 application-context-name [1] Application-context-name,
173 called-AP-title [2] AP-title OPTIONAL, -- X
174 called-AE-qualifier [3] AE-qualifier OPTIONAL, -- X
175 called-AP-invocation-identifier [4] AP-invocation-identifier OPTIONAL, -- X
176 called-AE-invocation-identifier [5] AE-invocation-identifier OPTIONAL, -- X
177 calling-AP-title [6] AP-title OPTIONAL,
178 calling-AE-qualifier [7] AE-qualifier OPTIONAL,
179 calling-AP-invocation-identifier [8] AP-invocation-identifier OPTIONAL, -- X
180 calling-AE-invocation-identifier [9] AE-invocation-identifier OPTIONAL, -- X
181 -- The following field is not present if only the Kernel is used.
182 -- ATN: For Doc 9705 ed 1/ed 2, only the Kernel is required.
183 sender-acse-requirements [10] IMPLICIT ACSE-requirements OPTIONAL,
184 -- The following field is only present if the Authentication functional
185 -- unit is selected. ATN: not used in Doc 9705 ed 1/ed 2.
186 mechanism-name [11] IMPLICIT Mechanism-name OPTIONAL,
187 -- The following field is only present if the Authentication functional
188 -- unit is selected. ATN: use is deprecated in Doc 9705 ed 1/ed 2.
189 calling-authentication-value [12] EXPLICIT Authentication-value OPTIONAL,
190 application-context-name-list [13] IMPLICIT Application-context-name-list OPTIONAL, -- X
191 -- The above field is only present if the Application Context Negotiation
192 -- functional unit is selected - never for ATN
193 implementation-information [29] IMPLICIT Implementation-data OPTIONAL, -- X
194 ..., ..., -- ATN: Note use of extension marker pair
195 user-information [30] IMPLICIT Association-information OPTIONAL
199 AARE-apdu ::= [ APPLICATION 1 ] IMPLICIT SEQUENCE
200 { protocol-version [0] IMPLICIT BIT STRING{ version1 (0) }
201 DEFAULT { version1 }, -- X
202 application-context-name [1] Application-context-name,
203 result [2] Associate-result,
204 result-source-diagnostic [3] Associate-source-diagnostic,
205 responding-AP-title [4] AP-title OPTIONAL, -- X
206 responding-AE-qualifier [5] AE-qualifier OPTIONAL, -- X
207 responding-AP-invocation-identifier [6] AP-invocation-identifier OPTIONAL, -- X
208 responding-AE-invocation-identifier [7] AE-invocation-identifier OPTIONAL, -- X
209 -- The following field is not present if only the Kernel is used.
210 -- ATN: For Doc 9705 ed 1/ed 2, only the Kernel is required.
211 responder-acse-requirements [8] IMPLICIT ACSE-requirements OPTIONAL,
212 -- The following field is only present if the Authentication functional
213 -- unit is selected. ATN: not used in Doc 9705 ed 1/ed 2.
214 mechanism-name [9] IMPLICIT Mechanism-name OPTIONAL,
215 -- The following field is only present if the Authentication functional
216 -- unit is selected. ATN: use is deprecated in Doc 9705 ed 1/ed 2.
217 responding-authentication-value [10] EXPLICIT Authentication-value OPTIONAL,
218 application-context-name-list [11] IMPLICIT Application-context-name-list
220 -- The above field is only present if the Application Context Negotiation
221 -- functional unit is selected - never for ATN
222 implementation-information [29] IMPLICIT Implementation-data OPTIONAL, --X
223 ..., ..., -- ATN: Note use of extension marker pair
224 user-information [30] IMPLICIT Association-information OPTIONAL
228 RLRQ-apdu ::= [ APPLICATION 2 ] IMPLICIT SEQUENCE
229 { reason [0] IMPLICIT Release-request-reason OPTIONAL,
230 ..., ..., -- ATN: Note use of extension marker pair
231 user-information [30] IMPLICIT Association-information OPTIONAL
235 RLRE-apdu ::= [ APPLICATION 3 ] IMPLICIT SEQUENCE
236 { reason [0] IMPLICIT Release-response-reason OPTIONAL,
237 ..., ..., -- ATN: Note use of extension marker pair
238 user-information [30] IMPLICIT Association-information OPTIONAL
242 ABRT-apdu ::= [ APPLICATION 4 ] IMPLICIT SEQUENCE
243 { abort-source [0] IMPLICIT ABRT-source,
244 abort-diagnostic [1] IMPLICIT ABRT-diagnostic OPTIONAL,
245 -- The above field is not present if only the Kernel is used.
246 -- ATN: For Doc 9705 ed 1/ed 2, only the Kernel is required.
247 ..., ..., -- ATN: Note use of extension marker pair
248 user-information [30] IMPLICIT Association-information OPTIONAL
252 ABRT-diagnostic ::= ENUMERATED
253 { no-reason-given (1),
255 authentication-mechanism-name-not-recognized (3),
256 authentication-mechanism-name-required (4),
257 authentication-failure (5),
258 authentication-required (6),
261 ABRT-source ::= INTEGER { acse-service-user (0), acse-service-provider (1)} (0..1, ...)
263 ACSE-requirements ::= BIT STRING
264 { authentication (0), application-context-negotiation(1) }
265 -- ATN commentary: application-context-negotiation (bit 1) is
266 -- never set for ATN ULCS. Use of authentication is deprecated
267 -- for Doc 9705 ed 1/ed 2.
269 Application-context-name-list ::= SEQUENCE OF Application-context-name
270 -- ATN Commentary: the above type is not used for ATN ULCS.
272 Application-context-name ::= OBJECT IDENTIFIER
274 -- ***************************************************************************
275 -- Application-entity title productions follow (not in alphabetical order)
276 -- ***************************************************************************
277 -- MG: asn2wrs cannot handle untagged CHOICEs within either a SET or a SEQUENCE.
278 -- https://gitlab.com/wireshark/wireshark/-/wikis/Asn2wrs_Handmassaging_the_ASN_file
279 AP-title ::= CHOICE { -- ATN: See encoding guidance in 2.5.11
280 -- "form2" is encoded as 0 and "form1" as 1
281 ap-title-form2 [0] IMPLICIT AP-title-form2, -- Object Identifier form
282 ap-title-form1 [1] IMPLICIT AP-title-form1, -- X (Directory name form)
285 AE-qualifier ::= CHOICE {-- ATN: See encoding guidance in 2.5.11
286 -- "form2" is encoded as 0 and "form1" as 1
287 ae-qualifier-form2 [0] IMPLICIT AE-qualifier-form2, -- INTEGER form
288 ae-qualifier-form1 [1] IMPLICIT AE-qualifier-form1, -- X (RDN form)
290 -- ATN commentary: AE-qualifier is set to "app-type" in Doc 9705 1st and
291 -- 2nd editions. For forward compatibility, the value should not be
294 -- When both AP-title and AE-qualifier data values are present in an AARQ or
295 -- AARE APDU, both have the same form to allow the construction of an
296 -- AE-title as discussed in CCITT Rec. X.665 | ISO/IEC 9834-6.
298 AP-title-form1 ::= Name -- ATN: Not used for ATN ULCS
299 -- The value assigned to AP-title-form1 is The Directory Name of an
300 -- application-process title.
302 AE-qualifier-form1 ::= RelativeDistinguishedName -- ATN: Not used for ULCS
303 -- The value assigned to AE-qualifier-form1 is the relative distinguished name
304 -- of a particular application-entity of the application-process identified by
307 AP-title-form2 ::= OBJECT IDENTIFIER
309 AE-qualifier-form2 ::= INTEGER
311 -- ATN commentary: The AE-title productions below are commented out,
312 -- as they are not required for ATN ULCS.
313 -- AE-title ::= CHOICE {
314 -- ae-title-form1 AE-title-form1,
315 -- ae-title-form2 AE-title-form2,
318 -- As defined in CCITT Rec. X.650 | ISO 7498-3, an application-entity title is
319 -- composed of an application-process title and an application-entity qualifier.
320 -- The ACSE protocol provides for the transfer of an application-entity title
321 -- value by the transfer of its component values. However, the following data
322 -- type is provided for International Standards that reference a single
323 -- syntactic structure for AE titles. (Not used for ATN ULCS)
325 -- AE-title-form1 ::= Name
326 -- For access to The Directory (ITU-T Rec. X.500-Series | ISO/IEC 9594), an
327 -- AE title has AE-title-form1.
328 -- This value can be constructed from AP-title-form1 and AE-qualifier-form1
329 -- values contained in an AARQ or AARE APDU. A discussion of forming an
330 -- AE-title-form1 from AP-title-form1 and AE-qualifier-form1 may be found in
331 -- CCITT Rec. X.665 | ISO/IEC 9834-6.
333 -- AE-title-form2 ::= OBJECT IDENTIFIER
334 -- A discussion of forming an AE-title-form2 from AP-title-form2 and
335 -- AE-qualifier-form2 may be found in CCITT Rec. X.665 | ISO/IEC 9834-6.
337 AE-invocation-identifier ::= INTEGER -- ATN: not used in ULCS
338 AP-invocation-identifier ::= INTEGER -- ATN: not used in ULCS
339 -- End of Application-entity title productions
340 -- ***************************************************************************
342 Associate-result ::= INTEGER
344 rejected-permanent (1),
345 rejected-transient (2) } (0..2, ...)
347 Associate-source-diagnostic ::= CHOICE
348 { acse-service-user [1] INTEGER
351 application-context-name-not-supported (2),
352 calling-AP-title-not-recognized (3),
353 calling-AP-invocation-identifier-not-recognized (4),
354 calling-AE-qualifier-not-recognized (5),
355 calling-AE-invocation-identifier-not-recognized (6),
356 called-AP-title-not-recognized (7),
357 called-AP-invocation-identifier-not-recognized (8),
358 called-AE-qualifier-not-recognized (9),
359 called-AE-invocation-identifier-not-recognized (10),
360 authentication-mechanism-name-not-recognized (11),
361 authentication-mechanism-name-required (12),
362 authentication-failure (13),
363 authentication-required (14) } (0..14 , ...),
364 acse-service-provider [2] INTEGER
367 no-common-acse-version (2) } (0..2 , ...)
370 Association-information ::= SEQUENCE SIZE (1, ..., 0 | 2..MAX) OF EXTERNALt
371 -- ATN: No SIZE extensions are defined, only one EXTERNAL element is present
375 Implementation-data ::= OCTET STRING -- ATN: Not used for ULCS
377 Mechanism-name ::= OBJECT IDENTIFIER -- ATN: Not used for ULCS
379 MECHANISM-NAME ::=TYPE-IDENTIFIER -- ATN: Not used for ULCS
381 ObjectSet MECHANISM-NAME ::= {...} -- ATN: Not used for ULCS
383 Release-request-reason ::= INTEGER {normal (0), urgent (1), user-defined (30)} (0 | 1 | 30, ...)
385 Release-response-reason ::= INTEGER {normal (0), not-finished (1), user-defined (30)} (0 | 1 | 30, ...)
386 -- ATN commentary: For the above two types, see the encoding guidance in 2.5.10
387 -- Values are encoded in 5 bits, not 3 as might be expected.
389 Authentication-value ::= CHOICE -- ATN: use is deprecated in ed 1/ed 2
390 { charstring [0] IMPLICIT OCTET STRING,
391 bitstring [1] IMPLICIT BIT STRING,
392 external [2] IMPLICIT EXTERNAL,
393 other [3] IMPLICIT SEQUENCE {
394 -- other-mechanism-name MECHANISM-NAME.&id ({ObjectSet}),
395 other-mechanism-name OBJECT IDENTIFIER,
396 -- other-mechanism-value MECHANISM-NAME.&Type ({ObjectSet}{@.other-mechanism-name})
397 other-mechanism-value ANY
400 -- The abstract syntax of (calling/responding) authentication-value is
401 -- determined by the authentication mechanism used during association
402 -- establishment. The authentication mechanism is either explicitly
403 -- denoted by the &id field (of type OBJECT IDENTIFIER) for a mechanism
404 -- belonging to the class MECHANISM-NAME, or it is known implicitly by
405 -- prior agreement between the communicating partners. If the "other"
406 -- component is chosen, then the "mechanism-name" component is present
407 -- in accordance with ITU-T Rec. X.680|ISO/IEC 8824. If the value
408 -- "mechanism-name" occurs in the AARQ-apdu or the AARE-apdu, then that
409 -- value is the same as the value for "other-mechanism-name"
410 END -- of Connection-Oriented ACSE definitions
413 -- *************************************************************************
414 -- The following definitions are adapted from the Directory standard
415 -- ISO/IEC 9594-2:1993 | ITU-T Rec. X.501 (1993 E). In case of any discrepancy,
416 -- the ISO/IEC standard takes precedence.
417 -- *************************************************************************
419 InformationFramework {joint-iso-ccitt ds(5) module(1) informationFramework(1) 2}
422 EXPORTS Name, RelativeDistinguishedName;
424 Name ::= CHOICE {rdnSequence RDNSequence}
425 -- only one CHOICE defined
427 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
429 RelativeDistinguishedName ::= SET SIZE (1 .. MAX) OF AttributeTypeAndValue
431 AttributeTypeAndValue ::= SEQUENCE {
432 -- ATN commentary: The following line has been inserted to allow the Name and
433 -- RelativeDistinguishedName types, as used by ACSE, to be resolved by an
434 -- ASN.1 compiler, without introducing the unnecessary complexity
435 -- Of the ATTRIBUTE information object class, which is used in the
436 -- Directory standards.
438 -- The "real" components of AttributeTypeAndValue follow. They have been
439 -- commented out here, but could be restored if required, for example, for
440 -- sharing data types with a Directory implementation. The syntax has been
441 -- verified by the OSS syntax checker.
442 -- type ATTRIBUTE.&id ({SupportedAttributes}),
443 -- value ATTRIBUTE.&Type ({SupportedAttributes} {@type})
446 --SupportedAttributes ATTRIBUTE ::=
447 -- {objectClass | aliasedEntryName, ...}
449 -- ATN Commentary: ATTRIBUTE is an information object class, specified in
450 -- ISO/IEC 9594-2 | ITU-T Rec. X.501, using the notation defined in
451 -- ISO/IEC 8824-2 | ITU-T Rec. X.681. However, for ULCS implementation, it
452 -- is only necessary to note that the ACSE CHOICE types AP-title,
453 -- AE-qualifier and AE-title are all constrained to be the "form 2" variants,
454 -- with types Object Identifier, Integer and Object Identifier, respectively.
455 -- It is however necessary to know the syntax of the "form 1" variants (Name,
456 -- RelativeDistinguishedName and Name, respectively) so that the CHOICE
457 -- elements can be sorted into canonical order, based on their ASN.1 types,
458 -- for PER encoding (see 2.5.11).
460 --ATTRIBUTE ::= CLASS {
461 -- &derivation ATTRIBUTE OPTIONAL,
463 -- &equality-match MATCHING-RULE OPTIONAL,
464 -- &ordering-match MATCHING-RULE OPTIONAL,
465 -- &substrings-match MATCHING-RULE OPTIONAL,
466 -- &single-valued BOOLEAN DEFAULT FALSE,
467 -- &collective BOOLEAN DEFAULT FALSE,
468 -- &no-user-modification BOOLEAN DEFAULT FALSE,
469 -- &usage AttributeUsage DEFAULT userApplications,
470 -- &id OBJECT IDENTIFIER UNIQUE }
472 --MATCHING-RULE ::= CLASS {
473 -- &AssertionType OPTIONAL,
474 -- &id OBJECT IDENTIFIER UNIQUE }
476 --objectClass ATTRIBUTE ::= {
477 -- &Type OBJECT IDENTIFIER,
478 -- &id id-at-objectClass
481 --aliasedEntryName ATTRIBUTE ::= {
482 -- &Type OBJECT IDENTIFIER,
483 -- &id id-at-aliasedEntryName
486 --AttributeUsage ::= ENUMERATED {
487 -- userApplications (0),
488 -- directoryOperation (1),
489 -- distributedOperation (2),
490 -- dSAOperation (3) }
492 --id-at-objectClass OBJECT IDENTIFIER ::= {id-at 0}
493 --id-at-aliasedEntryName OBJECT IDENTIFIER ::= {id-at 1}
494 --id-at OBJECT IDENTIFIER ::= {joint-iso-ccitt ds(5) attributeType(4)}
496 END -- of Directory Information Framework extracts
498 -- Editor modelines - https://www.wireshark.org/tools/modelines.html
503 -- indent-tabs-mode: nil
506 -- vi: set shiftwidth=4 tabstop=8 expandtab:
507 -- :indentSize=4:tabSize=8:noTabs=true: