|
Changing from ASN.1:1988/1990 to ASN.1:2008
No Change in the bits on the wire
Please note that there is no change in the "bits on the wire" when changing from
using ASN.1:1988 as defined in CCITT Rec. X.208 and BER:1988 as defined in CCITT
Rec. X.209 to using ASN.1:2008 as defined ITU-T Rec. X.680-X.683|ISO/IEC 8824-1,2,3,4
and BER:2008 as defined in ITU-T Rec. X.690|ISO/IEC8825-1. In fact, it is impossible
for a communicating peer to determine whether ASN.1:1988 or ASN.1:2008 is being
used by another communicating peer since the bits on the wire do not change.
Differences between ASN.1:1988 and ASN.1:2008
The main difference is that the multitude of defect reports that were issued against
CCITT Rec. X.208 have been corrected in ITU-T Rec. X.680 - X.683|ISO/IEC 8824-1,2,3,4.
With X.208, there were many ambiguities in the notation that made it possible to
write ASN.1 modules which, when implemented, resulted in non-interoperability even
though both peers were fully conformant to X.208 and X.209. The most visible manifestations
of these bug fixes are the replacement of the macro notation and ANY/ANY
DEFINED BY, a change in the CHOICE value notation, and the mandatory
presence of identifiers in the definitions of SET, SEQUENCE and
CHOICE types.
The ability to smoothly extend types in future versions of a protocol has been added
by introducing the extension marker ("..." notation) for indicating where
extensions are permitted to occur. Several new character string types were also
introduced for better support of international languages or alphabets, including
one new type CHARACTER STRING that allows the alphabet to be determined
at runtime.
Compared to the 1997 edition, the 2008 edition of ASN.1 provides the following new
features:
- an XML notation that can be used to define abstract values in an ASN.1 module;
- decimal notation (e.g., 1.5e3) for REAL values;
- a new RELATIVE-OID type for relative object identifiers;
- a new subtype constraint (CONTAINING/ENCODED BY) to constrain
the content of an octet string or a bit string;
- a subtype constraint by regular expressions (PATTERN) for character string
types;
- a semantic model which clearly defines the rules for type and values compatibilities;
- multi-line comments à la C or Java (i.e., between /* and */);
- the new X.692 Recommendation which provides an Encoding Control Notation (ECN) for
the definition of proprietary encoding rules.
Advantages of changing from ASN.1:1988 to ASN.1:2008
Advantages of changing from ASN.1:1988 to ASN.1:2008 include better readability,
more precision, greater flexibility and much greater ease of implementation. For
example, when macros are used in ASN.1:1988 modules, you cannot determine the purpose
of a macro without its author describing it to you using textual comments. With
ASN.1:2008, the notation is much more precise, making the author’s description
unnecessary. Indeed, the ASN.1:2008 replacement for ANY DEFINED BY (now
called an open type) and macros such as OPERATION is so much
better that applications can be written more quickly, simply and in significantly
fewer lines of code than when ASN.1:1988 is used.
With the ASN.1:2008, it is possible for encoders and decoders to fully decode a
message, including open types nested in open types nested in open types (i.e., ANY
nested in ANY nested in ANY...), via a single call to the encoder
or decoder, and without any custom modifications to the ASN.1 to accomplish this.
Contrast this to the 1988 approach which either requires the user to repeatedly
call the encoder or decoder for each level of ANY that is to be encoded
or decoded, or which requires you to make custom modifications to the ASN.1 and
utilize special ASN.1 tools that understand such customizations.
How to change ASN.1:1988 to ASN.1:2008
In a nutshell, the main changes you will need to make are:
- Ensure that the components of SET, SEQUENCE and CHOICE
all have identifiers.
- Include a colon after the identifier in CHOICE values.
- Change ANY and ANY DEFINED BY to use the more descriptive open
type notation.
- Change the macro notation to the information object class notation (e.g., if macro
OPERATION is used) or parameterized types (e.g., if macro SIGNED
is used).
Note: Annex A (Use of ASN.1:1988/1990 notation)
and Annex E (Superseded features
) of the 1997 edition of X.680 were providing details on changing from ASN.1:1988
to ASN.1:1997/2008. They have not been kept in the 2008 edition, for X.208 (ASN.1:1988)
has been withdrawn at the same time when the 2008 edition was published. Those annexes
are provided as a separate webpage.
Mixing ASN.1:1988 and ASN.1:2008
Please note that you cannot mix 1988 and post-1988 ASN.1 syntax in the same ASN.1
module. You can import types and values from ASN.1:1988 modules into 1997 and vice
versa as long they follow a few guidelines as explained in A.2 (of X.680:1997).
For example, an ASN.1:2008 module cannot import macros, and a 1988 ASN.1 module
cannot import types or values containing new types such as UTF8String.
Free ASN.1:2008 syntax checkers
There are two free ASN.1 syntax checkers available for your use in checking your
ASN.1:2008 specifications. Please see
http://www.oss.com/products/checksyntax.html.
Downloadable books on ASN.1
Please see http://www.oss.com/asn1/booksintro.html
(English).
|