efined type assignment in ASN.1 can look as follows: State INTEGER where State is the name of the type, in ASN.1 called type reference, and INTEGER is a built-in type in ASN.1. All types have an uppercase first letter. All letters of built-in types are uppercase (as e.g. INTEGER). The values of a type can be defined in several ways. For example, the type refer- ence State may have four values (1 through 4), which can be defined as a value range as follows. State = INTEGER (1..4) Other formats for defining the same value range are: State ::= INTEGER (0<..4) State INTEGER (1..<5) INTEGER is a primitive type in ASN.1 (which means that an encoding algorithm is directly associated with values of the type). ASN.1 also defines a number of struc- tured types, as e.g. SEQUENCE and OCTETSTRING. The number of elements in such types is defined by a SIZE expression: Sdu OCTETSTRING SIZE (1..1024) Appendix 2: Naming and Data Typing in AML If the value range of a primitive type is not continuous (e.g. the integer values 0, 2, 4 and 7), a format for subtyping has must be used instead: State ::= INTEGER (0121417) To make values more expressive, a value identifier can be supplied, as in this example (identifiers are written with lowercase first letter): ConState ::= INTEGER {idle (0), pending (2), connected (4), suspended (7)} Identifiers can also be supplied to types that are defined in structured types, as in this type assignment that defines a channel state by two variables, conState and numbOfMess: ChannelState ::= SEQUENCE {conState INTEGER {idle (0), pending (2), busy (4), suspended (7)}, numbOfMess INTEGER (0.. 100)} Note that identifiers used as prefixes to types and values are intended for the human reader. Identifiers can be used as variable names in implementation. If one wants to use a name for a value that can be interpreted by a protocol machine, the value must be defined as a value reference, as in this example for the value busy: ChannelState ::= SEQUENCE {ConState, NumbOfMess} ConState ::= INTEGER (0121417) busy C