\documentclass[english,oneside,12pt]{book}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{xltxtra}

\usepackage[hmargin={1in,1in},vmargin={2in,2in}]{geometry}

\defaultfontfeatures{Mapping=tex-text}
\setmainfont{Myriad Pro}
\setsansfont{Myriad Pro}
\setmonofont{Consolas}

\usepackage{fancyhdr}
\pagestyle{fancy}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{varioref}
\usepackage{url}

\makeatletter

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
%% Because html converters don't know tabularnewline
\providecommand{\tabularnewline}{\\}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands.
\newenvironment{lyxcode}
{\par\begin{list}{}{
\setlength{\rightmargin}{\leftmargin}
\setlength{\listparindent}{0pt}% needed for AMS classes
\raggedright
\setlength{\itemsep}{0pt}
\setlength{\parsep}{0pt}
\normalfont\ttfamily}%
 \item[]}
{\end{list}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\usepackage{extramarks}
\lhead{\firstxmark}
\rfoot{\lastxmark}
\usepackage{color}
\definecolor{linkred}{rgb}{0.8235,0.0863,0.1843}
\definecolor{urlblue}{rgb}{0,0,.6}
\usepackage[colorlinks=true,
linkcolor={linkred},
urlcolor={urlblue},
pdfauthor={Lev Walkin},
pdftitle={Using the Open Source ASN.1 Compiler},
pdfkeywords={ASN.1,asn1c,compiler},
xetex
]{hyperref}
%\fancyhf{}
%\fancyhead[LE,RO]{\thepage}
%\fancyhead[LO]{\rightmark}
%\fancyhead[RE]{\leftmark}
%\fancyfoot[R]{\lastxmark}

\makeatother

\usepackage{babel}

\begin{document}

\title{Using the Open Source ASN.1 Compiler}


\author{Lev Walkin <\href{mailto:vlm@lionet.info?Subject=asn1c}{vlm@lionet.info}>}

\maketitle
\lhead{This document describes \href{http://lionet.info/asn1c}{asn1c-0.9.21}}

\rhead{$Revision$}

\tableofcontents{}

\pagestyle{headings}


\part{Using the ASN.1 Compiler}


\chapter{Introduction to the ASN.1 Compiler}

The purpose of the ASN.1 compiler is to convert the specifications
in ASN.1 notation into some other language. At this moment, only C
and C++ target languages are supported, the latter is in upward compatibility
mode.

The compiler reads the specification and emits a series of target
language structures (C structs, unions, enums) describing the corresponding
ASN.1 types. The compiler also creates the code which allows automatic
serialization and deserialization of these structures using several
standardized encoding rules (BER, DER, XER, PER).

For example, suppose the following ASN.1 module is given%
\footnote{Part \vref{par:ASN.1-Basics} provides a quick reference
on the ASN.1 notation.}:
\begin{lyxcode}
RectangleTest~DEFINITIONS~::=

BEGIN

~

Rectangle~::=~SEQUENCE~\{

~~~~height~~INTEGER,~~~~~~~~-{}-~Height~of~the~rectangle

~~~~width~~~INTEGER~~~~~~~~~-{}-~Width~of~the~rectangle

\}

~

END
\end{lyxcode}
The compiler would read this ASN.1 definition and produce the following
C type%
\footnote{\emph{-fnative-types} compiler option is used to produce basic C \emph{int}
types instead of infinite width INTEGER\_t structures. See Section
\vref{sec:Command-line-options}.%
}:
\begin{lyxcode}
typedef~struct~Rectangle\_s~\{

~~~~int~height;

~~~~int~width;

\}~Rectangle\_t;
\end{lyxcode}
It would also create the code for converting this structure into platform-independent
wire representation (a serializer API) and the decoder of such wire
representation back into local, machine-specific type (a deserializer
API).


\section{Quick start with asn1c}

After building and installing the compiler, the \emph{asn1c}%
\footnote{The 1 symbol in asn\textbf{1}c is a digit, not an ``ell'' letter.%
} command may be used to compile the ASN.1 module%
\footnote{This is probably \textbf{not} what you want to try out right now. Read through the rest of this chapter and check the Section \vref{sec:Command-line-options}
to find out about \textbf{-P} and \textbf{-R} options.%
}:
\begin{lyxcode}
asn1c~\emph{<module.asn1>}
\end{lyxcode}
If several ASN.1 modules contain interdependencies, all of the files
must be specified altogether:
\begin{lyxcode}
asn1c~\emph{<module1.asn1>~<module2.asn1>~...}
\end{lyxcode}
The compiler \textbf{-E} and \textbf{-EF} options are used for testing
the parser and the semantic fixer, respectively. These options will
instruct the compiler to dump out the parsed (and fixed, if \textbf{-F}
is involved) ASN.1 specification as it was ``understood''
by the compiler. It might be useful to check whether a particular
syntactic construction is properly supported by the compiler.
\begin{lyxcode}
asn1c~\textbf{-EF}~\emph{<module-to-test.asn1>}
\end{lyxcode}
The \textbf{-P} option is used to dump the compiled output on the
screen instead of creating a bunch of .c and .h files on disk in the
current directory. You would probably want to start with \textbf{-P}
option instead of creating a mess in your current directory. Another
option, \textbf{-R}, asks compiler to only generate the files which
need to be generated, and supress linking in the numerous support
files.

Print the compiled output instead of creating multiple source files:
\begin{lyxcode}
asn1c~\textbf{-P}~\emph{<module-to-compile-and-print.asn1>}
\end{lyxcode}

\section{Recognizing compiler output}

After compiling, the following entities will be created in your current
directory:
\begin{itemize}
\item A set of .c and .h files, generally a single pair for each type defined
in the ASN.1 specifications. These files will be named similarly to
the ASN.1 types (\emph{Rectangle.c} and \emph{Rectangle.h} for the
RectangleTest ASN.1 module defined in the beginning of this document).
\item A set of helper .c and .h files which contain generic encoders, decoders
and other useful routines. There will be quite a few of them, some
of them even are not always necessary, but the overall amount of code
after compilation will be rather small anyway.
\item A \emph{Makefile.am.sample} file mentioning all the files created
at the earlier steps. This file is suitable for either automake suite
or the plain `make` utility.
\end{itemize}
It is your responsibility to create .c file with the \emph{int main()}
routine.

In other words, after compiling the Rectangle module, you have the
following set of files: \{~Makefile.am.sample, Rectangle.c, Rectangle.h,
\textbf{\ldots{}} \}, where ``\textbf{\ldots{}}'' stands for the
set of additional ``helper'' files created by the compiler. If you
add a simple file with the \emph{int main()} routine, it would even
be possible to compile everything with the single instruction:
\begin{lyxcode}
cc~-I.~-o~rectangle.exe~{*}.c~~~\#~It~could~be~\emph{that}~simple
\end{lyxcode}
Refer to the Chapter \vref{cha:Step-by-step-examples} for a sample
\emph{int main()} routine.


\section{\label{sec:Command-line-options}Command line options}

The following table summarizes the asn1c command line options.

\renewcommand{\arraystretch}{1.33}
\begin{longtable}{lp{4in}}
\toprule
\textbf{\small Overall Options} & \textbf{\small Description}\tabularnewline
\midrule
{\small -E} & {\small Stop after the parsing stage and print the reconstructed ASN.1
specification code to the standard output.}\tabularnewline
{\small -F} & {\small Used together with -E, instructs the compiler to stop after
the ASN.1 syntax tree fixing stage and dump the reconstructed ASN.1
specification to the standard output.}\tabularnewline
{\small -P} & {\small Dump the compiled output to the standard output instead of
creating the target language files on disk.}\tabularnewline
{\small -R} & {\small Restrict the compiler to generate only the ASN.1 tables, omitting the usual support code.}\tabularnewline
{\small -S }\emph{\small <directory>} & {\small Use the specified directory with ASN.1 skeleton files.}\tabularnewline
{\small -X} & {\small Generate the XML DTD for the specified ASN.1 modules.}\tabularnewline
\midrule\tabularnewline
\textbf{\small Warning Options} & \textbf{\small Description}\tabularnewline
\midrule
{\small -Werror} & {\small Treat warnings as errors; abort if any warning is produced.}\tabularnewline
{\small -Wdebug-lexer} & {\small Enable lexer debugging during the ASN.1 parsing stage.}\tabularnewline
{\small -Wdebug-fixer} & {\small Enable ASN.1 syntax  tree  fixer  debugging  during  the
 fixing stage.}\tabularnewline
{\small -Wdebug-compiler} & {\small Enable debugging during the actual compile time.}\tabularnewline
\midrule\tabularnewline
\textbf{\small Language Options} & \textbf{\small Description}\tabularnewline
\midrule
{\small -fbless-SIZE} & {\small Allow SIZE() constraint for INTEGER, ENUMERATED, and other
types for which this constraint is normally prohibited by the standard.
This is a violation of an ASN.1 standard and compiler may fail to
produce the meaningful code.}\tabularnewline
{\small -fcompound-names} & {\small Use complex names for C structures. Using complex names prevents
name clashes in case the module reuses the same identifiers in multiple
contexts.}\tabularnewline
{\small -findirect-choice} & {\small When generating code for a CHOICE type, compile the CHOICE
members as indirect pointers instead of declaring them inline. Consider
using this option together with }\textbf{\small -fno-include-deps}{\small{}
to prevent circular references. }\tabularnewline
{\small -fknown-extern-type=}\emph{\small <name>} & {\small Pretend the specified type is known. The compiler will assume
the target language source files for the given type have been provided
manually. }\tabularnewline
{\small -fnative-types} & {\small Use the native machine's data types (int, double) whenever
possible, instead of the compound INTEGER\_t, ENUMERATED\_t and REAL\_t
types. }\tabularnewline
{\small -fno-constraints} & {\small Do not generate ASN.1 subtype constraint checking code. This
may produce a shorter executable.}\tabularnewline
{\small -fno-include-deps} & {\small Do not generate courtesy \#include lines for non-critical
dependencies.}\tabularnewline
{\small -funnamed-unions} & {\small Enable  unnamed  unions  in the definitions of target language's
structures.}\tabularnewline
{\small -fskeletons-copy} & {\small Copy support files rather than symlink them.}\tabularnewline
\midrule\tabularnewline
\textbf{\small Codecs Generation Options} & \textbf{\small Description}\tabularnewline
\midrule
{\small -gen-PER} & {\small Generate Packed Encoding Rules (PER) support code.}\tabularnewline
{\small -pdu=}\emph{\small auto} & {\small Generate PDU tables by discovering Protocol Data Units automatically.}\tabularnewline
\midrule\tabularnewline
\textbf{\small Output Options} & \textbf{\small Description}\tabularnewline
\midrule
{\small -print-constraints} & {\small When -EF are also specified, this option forces the compiler
to explain its internal understanding of subtype constraints.}\tabularnewline
{\small -print-lines} & {\small Generate ``-{}- \#line'' comments
in -E output.}\tabularnewline
\bottomrule
\end{longtable}
\renewcommand{\arraystretch}{1}


\chapter{Using the ASN.1 Compiler}


\section[Invoking the helper code]{Invoking the ASN.1 helper code}

First of all, you should include one or more header files into your
application. Typically, it is enough to include the header file of
the main PDU type. For our Rectangle module, including the Rectangle.h
file is sufficient:
\begin{lyxcode}
\#include~<Rectangle.h>
\end{lyxcode}
The header files defines the C structure corresponding to the ASN.1
definition of a rectangle and the declaration of the ASN.1 type descriptor,
which is used as an argument to most of the functions provided by
the ASN.1 module. For example, here is the code which frees the Rectangle\_t
structure:
\begin{lyxcode}
Rectangle\_t~{*}rect~=~...;

~

asn\_DEF\_Rectangle.free\_struct(\&asn\_DEF\_Rectangle, rect,~0);
\end{lyxcode}
This code defines a \emph{rect} pointer which points to the Rectangle\_t
structure which needs to be freed. The second line invokes the generic
\emph{free\_struct()} routine created specifically for this Rectangle\_t
structure. The \emph{asn\_DEF\_Rectangle} is the type descriptor,
which holds a collection of routines to deal with the Rectangle\_t
structure.

The following member functions of the asn\_DEF\_Rectangle type descriptor
are of interest:
\begin{description}
\item [{ber\_decoder}] This is the generic \emph{restartable}%
\footnote{Restartable means that if the decoder encounters the end of the buffer,
it will fail, but may later be invoked again with the rest of the
buffer to continue decoding.%
} BER decoder (Basic Encoding Rules). This decoder would create and/or
fill the target structure for you. See Section \vref{sub:Decoding-BER}.
\item [{der\_encoder}] This is the generic DER encoder (Distinguished Encoding
Rules). This encoder will take the target structure and encode it
into a series of bytes. See Section \vref{sub:Encoding-DER}. NOTE:
DER encoding is a subset of BER. Any BER decoder should be able to
handle DER input.
\item [{xer\_decoder}] This is the generic XER decoder. It takes both BASIC-XER
or CANONICAL-XER encodings and deserializes the data into a local,
machine-dependent representation. See Section \vref{sub:Decoding-XER}.
\item [{xer\_encoder}] This is the XER encoder (XML Encoding Rules). This
encoder will take the target structure and represent it as an XML
(text) document using either BASIC-XER or CANONICAL-XER encoding rules.
See Section \vref{sub:Encoding-XER}.
\item [{uper\_decoder}] This is the Unaligned PER decoder.
\item [{uper\_encoder}] This is the Unaligned Basic PER encoder. This encoder
will take the target structure and encode it into a series of bytes.
\item [{check\_constraints}] Check that the contents of the target structure
are semantically valid and constrained to appropriate implicit or
explicit subtype constraints. See Section \vref{sub:Validating-the-target}.
\item [{print\_struct}] This function convert the contents of the passed
target structure into human readable form. This form is not formal
and cannot be converted back into the structure, but it may turn out
to be useful for debugging or quick-n-dirty printing. See Section
\vref{sub:Printing-the-target}.
\item [{free\_struct}] This is a generic disposal which frees the target
structure. See Section \vref{sub:Freeing-the-target}.
\end{description}
Each of the above function takes the type descriptor (\emph{asn\_DEF\_\ldots{}})
and the target structure (\emph{rect}, in the above example).


\subsection{\label{sub:Decoding-BER}Decoding BER}

The Basic Encoding Rules describe the most widely used (by the ASN.1
community) way to encode and decode a given structure in a machine-independent
way. Several other encoding rules (CER, DER) define a more restrictive
versions of BER, so the generic BER parser is also capable of decoding
the data encoded by CER and DER encoders. The opposite is not true.

\emph{The ASN.1 compiler provides the generic BER decoder which is
implicitly capable of decoding BER, CER and DER encoded data.}

The decoder is restartable (stream-oriented), which means that in
case the buffer has less data than it is expected, the decoder will
process whatever there is available and ask for more data to be provided.
Please note that the decoder may actually process less data than it
was given in the buffer, which means that you must be able to make
the next buffer contain the unprocessed part of the previous buffer.

Suppose, you have two buffers of encoded data: 100 bytes and 200 bytes.
\begin{itemize}
\item You may concatenate these buffers and feed the BER decoder with 300
bytes of data, or
\item You may feed it the first buffer of 100 bytes of data, realize that
the ber\_decoder consumed only 95 bytes from it and later feed the
decoder with 205 bytes buffer which consists of 5 unprocessed bytes
from the first buffer and the additional 200 bytes from the second
buffer.
\end{itemize}
This is not as convenient as it could be (like, the BER encoder could
consume the whole 100 bytes and keep these 5 bytes in some temporary
storage), but in case of existing stream based processing it might
actually fit well into existing algorithm. Suggestions are welcome.

Here is the simplest example of BER decoding.
\begin{lyxcode}
Rectangle\_t~{*}

simple\_deserializer(const~void~{*}buffer,~size\_t~buf\_size)~\{

~~~~Rectangle\_t~{*}rect~=~0;~~~~/{*}~Note~this~0!~{*}/

~~~~asn\_dec\_rval\_t~rval;

~

~~~~rval~=~\textbf{asn\_DEF\_Rectangle.ber\_decoder}(0,

~~~~~~~~~~\&asn\_DEF\_Rectangle,

~~~~~~~~~~(void~{*}{*})\&rect,

~~~~~~~~~~buffer,~buf\_size,

~~~~~~~~~~0);

~

~~~~if(rval\textbf{.code}~==~RC\_OK)~\{

~~~~~~~~return~rect;~~~~~~~~~~/{*}~Decoding~succeeded~{*}/

~~~~\}~else~\{

~~~~~~~~/{*}~Free~partially~decoded~rect~{*}/

~~~~~~~~asn\_DEF\_Rectangle.free\_struct(\&asn\_DEF\_Rectangle,~rect,~0);

~~~~~~~~return~0;

~~~~\}

\}
\end{lyxcode}
The code above defines a function, \emph{simple\_deserializer}, which
takes a buffer and its length and is expected to return a pointer
to the Rectangle\_t structure. Inside, it tries to convert the bytes
passed into the target structure (rect) using the BER decoder and
returns the rect pointer afterwards. If the structure cannot be deserialized,
it frees the memory which might be left allocated by the unfinished
\emph{ber\_decoder} routine and returns 0 (no data). (This \textbf{freeing
is necessary} because the ber\_decoder is a restartable procedure,
and may fail just because there is more data needs to be provided
before decoding could be finalized). The code above obviously does
not take into account the way the \emph{ber\_decoder()} failed, so
the freeing is necessary because the part of the buffer may already
be decoded into the structure by the time something goes wrong.

A little less wordy would be to invoke a globally available \emph{ber\_decode()}
function instead of dereferencing the asn\_DEF\_Rectangle type descriptor:
\begin{lyxcode}
rval~=~ber\_decode(0,~\&asn\_DEF\_Rectangle,~(void~{*}{*})\&rect,

~~~~buffer,~buf\_size);
\end{lyxcode}
Note that the initial (asn\_DEF\_Rectangle.ber\_decoder) reference
is gone, and also the last argument (0) is no longer necessary.

These two ways of BER decoder invocations are fully equivalent.

The BER de\emph{coder} may fail because of (\emph{the following RC\_\ldots{}
codes are defined in ber\_decoder.h}):
\begin{itemize}
\item RC\_WMORE: There is more data expected than it is provided (stream
mode continuation feature);
\item RC\_FAIL: General failure to decode the buffer;
\item \ldots{} other codes may be defined as well.
\end{itemize}
Together with the return code (.code) the asn\_dec\_rval\_t type contains
the number of bytes which is consumed from the buffer. In the previous
hypothetical example of two buffers (of 100 and 200 bytes), the first
call to ber\_decode() would return with .code = RC\_WMORE and .consumed
= 95. The .consumed field of the BER decoder return value is \textbf{always}
valid, even if the decoder succeeds or fails with any other return
code.

Look into ber\_decoder.h for the precise definition of ber\_decode()
and related types.


\subsection{\label{sub:Encoding-DER}Encoding DER}

The Distinguished Encoding Rules is the \emph{canonical} variant of
BER encoding rules. The DER is best suited to encode the structures
where all the lengths are known beforehand. This is probably exactly
how you want to encode: either after a BER decoding or after a manual
fill-up, the target structure contains the data which size is implicitly
known before encoding. Among other uses, the DER encoding is used
to encode X.509 certificates.

As with BER decoder, the DER encoder may be invoked either directly
from the ASN.1 type descriptor (asn\_DEF\_Rectangle) or from the stand-alone
function, which is somewhat simpler:
\begin{lyxcode}
~

/{*}

~{*}~This~is~the~serializer~itself,

~{*}~it~supplies~the~DER~encoder~with~the

~{*}~pointer~to~the~custom~output~function.

~{*}/

ssize\_t

simple\_serializer(FILE~{*}ostream,~Rectangle\_t~{*}rect)~\{

~~~~asn\_enc\_rval\_t~er;~~/{*}~Encoder~return~value~{*}/

~

~~~~er~=~der\_encode(\&asn\_DEF\_Rect,~rect,

~~~~~~~~write\_stream,~ostream);

~~~~if(er.\textbf{encoded}~==~-1)~\{

~~~~~~~~/{*}

~~~~~~~~~{*}~Failed~to~encode~the~rectangle~data.

~~~~~~~~~{*}/

~~~~~~~~fprintf(stderr,~''Cannot~encode~\%s:~\%s\textbackslash{}n'',

~~~~~~~~~~~~er.\textbf{failed\_type}->name, strerror(errno));

~~~~~~~~return~-1;

~~~~\}~else~\{

~~~~~~~~/{*}~Return~the~number~of~bytes~{*}/

~~~~~~~~return~er.encoded;

~~~~\}

\}
\end{lyxcode}
As you see, the DER encoder does not write into some sort of buffer
or something. It just invokes the custom function (possible, multiple
times) which would save the data into appropriate storage. The optional
argument \emph{app\_key} is opaque for the DER encoder code and just
used by \emph{\_write\_stream()} as the pointer to the appropriate
output stream to be used.

If the custom write function is not given (passed as 0), then the
DER encoder will essentially do the same thing (i.e., encode the data)
but no callbacks will be invoked (so the data goes nowhere). It may
prove useful to determine the size of the structure's encoding before
actually doing the encoding%
\footnote{It is actually faster too: the encoder might skip over some computations
which aren't important for the size determination.%
}.

Look into der\_encoder.h for the precise definition of der\_encode()
and related types.


\subsection{\label{sub:Encoding-XER}Encoding XER}

The XER stands for XML Encoding Rules, where XML, in turn, is eXtensible
Markup Language, a text-based format for information exchange. The
encoder routine API comes in two flavors: stdio-based and callback-based.
With the callback-based encoder, the encoding process is very similar
to the DER one, described in Section \vref{sub:Encoding-DER}. The
following example uses the definition of write\_stream() from up there.
\begin{lyxcode}
/{*}

~{*}~This~procedure~generates~the~XML~document

~{*}~by~invoking~the~XER~encoder.

~{*}~NOTE:~Do~not~copy~this~code~verbatim!

~{*}~~~~~~~If~the~stdio~output~is~necessary,

~{*}~~~~~~~use~the~xer\_fprint()~procedure~instead.

~{*}~~~~~~~See~Section~\vref{sub:Printing-the-target}.

~{*}/

int

print\_as\_XML(FILE~{*}ostream,~Rectangle\_t~{*}rect)~\{

~~~~asn\_enc\_rval\_t~er;~~/{*}~Encoder~return~value~{*}/

~

~~~~er~=~xer\_encode(\&asn\_DEF\_Rectangle,~rect,

~~~~~~~~XER\_F\_BASIC,~/{*}~BASIC-XER~or~CANONICAL-XER~{*}/

~~~~~~~~write\_stream,~ostream);

~

~~~~return~(er.encoded~==~-1)~?~-1~:~0;

\}
\end{lyxcode}
Look into xer\_encoder.h for the precise definition of xer\_encode()
and related types.

See Section \ref{sub:Printing-the-target} for the example of stdio-based
XML encoder and other pretty-printing suggestions.


\subsection{\label{sub:Decoding-XER}Decoding XER}

The data encoded using the XER rules can be subsequently decoded using
the xer\_decode() API call:
\begin{lyxcode}
Rectangle\_t~{*}

XML\_to\_Rectangle(const~void~{*}buffer,~size\_t~buf\_size)~\{

~~~~Rectangle\_t~{*}rect~=~0;~/{*}~Note~this~0!~{*}/

~~~~asn\_dec\_rval\_t~rval;

~~

~~~~rval~=~xer\_decode(0,~\&asn\_DEF\_Rectangle,~(void~{*}{*})\&rect,

~~~~~~~~buffer,~buf\_size);

~~~~if(rval\textbf{.code}~==~RC\_OK)~\{

~~~~~~~~return~rect;~~~~~~~~~~/{*}~Decoding~succeeded~{*}/

~~~~\}~else~\{

~~~~~~~~/{*}~Free~partially~decoded~rect~{*}/

~~~~~~~~asn\_DEF\_Rectangle.free\_struct(\&asn\_DEF\_Rectangle,~rect,~0);

~~~~~~~~return~0;

~~~~\}

\}
\end{lyxcode}
The decoder takes both BASIC-XER and CANONICAL-XER encodings.

The decoder shares its data consumption properties with BER decoder;
please read the Section \vref{sub:Decoding-BER} to know more.

Look into xer\_decoder.h for the precise definition of xer\_decode()
and related types.


\subsection{\label{sub:Validating-the-target}Validating the target structure}

Sometimes the target structure needs to be validated. For example,
if the structure was created by the application (as opposed to being
decoded from some external source), some important information required
by the ASN.1 specification might be missing. On the other hand, the
successful decoding of the data from some external source does not
necessarily mean that the data is fully valid either. It might well
be the case that the specification describes some subtype constraints
that were not taken into account during decoding, and it would actually
be useful to perform the last check when the data is ready to be encoded
or when the data has just been decoded to ensure its validity according
to some stricter rules.

The asn\_check\_constraints() function checks the type for various
implicit and explicit constraints. It is recommended to use asn\_check\_constraints()
function after each decoding and before each encoding.

Look into constraints.h for the precise definition of asn\_check\_constraints()
and related types.


\subsection{\label{sub:Printing-the-target}Printing the target structure}

There are two ways to print the target structure: either invoke the
print\_struct member of the ASN.1 type descriptor, or using the asn\_fprint()
function, which is a simpler wrapper of the former:
\begin{lyxcode}
asn\_fprint(stdout,~\&asn\_DEF\_Rectangle,~rect);
\end{lyxcode}
Look into constr\_TYPE.h for the precise definition of asn\_fprint()
and related types.

Another practical alternative to this custom format printing would
be to invoke XER encoder. The default BASIC-XER encoder performs reasonable
formatting for the output to be useful and human readable. To invoke
the XER decoder in a manner similar to asn\_fprint(), use the xer\_fprint()
call:
\begin{lyxcode}
xer\_fprint(stdout,~\&asn\_DEF\_Rectangle,~rect);
\end{lyxcode}
See Section \vref{sub:Encoding-XER} for XML-related details.


\subsection{\label{sub:Freeing-the-target}Freeing the target structure}

Freeing the structure is slightly more complex than it may seem to.
When the ASN.1 structure is freed, all the members of the structure
and their submembers are recursively freed as well. But it might not
be feasible to free the structure itself. Consider the following case:
\begin{lyxcode}
struct~my\_figure~\{~~~~~~~/{*}~The~custom~structure~{*}/

~~~~int~flags;~~~~~~~~~~~/{*}~<some~custom~member>~{*}/

~~~~/{*}~The~type~is~generated~by~the~ASN.1~compiler~{*}/

~~~~\emph{Rectangle\_t~rect;}

~~~~/{*}~other~members~of~the~structure~{*}/

\};
\end{lyxcode}
In this example, the application programmer defined a custom structure
with one ASN.1-derived member (rect). This member is not a reference
to the Rectangle\_t, but an in-place inclusion of the Rectangle\_t
structure. If the freeing is necessary, the usual procedure of freeing
everything must not be applied to the \&rect pointer itself, because
it does not point to the memory block directly allocated by the memory
allocation routine, but instead lies within a block allocated for
the my\_figure structure.

To solve this problem, the free\_struct routine has the additional
argument (besides the obvious type descriptor and target structure
pointers), which is the flag specifying whether the outer pointer
itself must be freed (0, default) or it should be left intact (non-zero
value).
\begin{lyxcode}
\textbf{/{*}~1.~Rectangle\_t~is~defined~within~my\_figure~{*}/}

struct~my\_figure~\{

~~~~Rectangle\_t~rect;

\}~{*}mf~=~\textbf{...};

/{*}

~{*}~Freeing~the~Rectangle\_t

~{*}~without~freeing~the~mf->rect~area

~{*}/

asn\_DEF\_Rectangle.free\_struct(

~~~~\&asn\_DEF\_Rectangle,~\&mf->rect,~\textbf{1}~\textbf{/{*}~!free~{*}/});

~~~~

~~

\textbf{/{*}~2.~Rectangle\_t~is~a~stand-alone~pointer~{*}/}

Rectangle\_t~{*}rect~=~\textbf{...};

/{*}

~{*}~Freeing~the~Rectangle\_t

~{*}~and~freeing~the~rect~pointer

~{*}/

asn\_DEF\_Rectangle.free\_struct(

~~~~\&asn\_DEF\_Rectangle,~rect,~\textbf{0}~\textbf{/{*}~free~the~pointer~too~{*}/});
\end{lyxcode}
It is safe to invoke the \emph{free\_struct} function with the target
structure pointer set to 0 (NULL), the function will do nothing.

For the programmer's convenience, the following macros are available:
\begin{lyxcode}
ASN\_STRUCT\_FREE(asn\_DEF,~ptr);

ASN\_STRUCT\_FREE\_CONTENTS\_ONLY(asn\_DEF,~ptr);
\end{lyxcode}
These macros bear the same semantics as the \emph{free\_struct} function
invocation, discussed above.


\chapter{\label{cha:Step-by-step-examples}Step by step examples}


\section{A ``Rectangle'' Encoder}

This example will help you create a simple BER and XER encoder of
a ``Rectangle'' type used throughout this document.
\begin{enumerate}
\item Create a file named \textbf{rectangle.asn1} with the following contents:

\begin{lyxcode}
RectangleModule1~DEFINITIONS~::=

BEGIN

~

Rectangle~::=~SEQUENCE~\{

~~~~height~~INTEGER,

~~~~width~~~INTEGER

\}

~

END
\end{lyxcode}
\item Compile it into the set of .c and .h files using asn1c compiler \cite{ASN1C}:

\begin{lyxcode}
\emph{asn1c~-fnative-types}~\textbf{rectangle.asn1}
\end{lyxcode}
\item Alternatively, use the Online ASN.1 compiler \cite{AONL} by uploading
the \textbf{rectangle.asn1} file into the Web form and unpacking the
produced archive on your computer.
\item By this time, you should have gotten multiple files in the current
directory, including the \textbf{Rectangle.c} and \textbf{Rectangle.h}.
\item Create a main() routine which creates the Rectangle\_t structure in
memory and encodes it using BER and XER encoding rules. Let's name
the file \textbf{main.c}:\clearpage{}

\begin{lyxcode}
{\small \#include~<stdio.h>}{\small \par}

{\small \#include~<sys/types.h>}{\small \par}

{\small \#include~<Rectangle.h>~~~/{*}~Rectangle~ASN.1~type~~{*}/}{\small \par}

~

{\small /{*}}{\small \par}

{\small{}~{*}~This~is~a~custom~function~which~writes~the}{\small \par}

{\small{}~{*}~encoded~output~into~some~FILE~stream.}{\small \par}

{\small{}~{*}/}{\small \par}

{\small static~int}{\small \par}

{\small write\_out(const~void~{*}buffer,~size\_t~size,~void~{*}app\_key)~\{}{\small \par}

{\small{}~~~~FILE~{*}out\_fp~=~app\_key;}{\small \par}

{\small{}~~~~size\_t~wrote;}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~wrote~=~fwrite(buffer,~1,~size,~out\_fp);}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~return~(wrote~==~size)~?~0~:~-1;}{\small \par}

{\small \}}{\small \par}

~

{\small int~main(int~ac,~char~{*}{*}av)~\{}{\small \par}

{\small{}~~~~Rectangle\_t~{*}rectangle;~/{*}~Type~to~encode~~~~~~~~{*}/}{\small \par}

{\small{}~~~~asn\_enc\_rval\_t~ec;~~~~~~/{*}~Encoder~return~value~~{*}/}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~/{*}~Allocate~the~Rectangle\_t~{*}/}{\small \par}

{\small{}~~~~rectangle~=~calloc(1,~sizeof(Rectangle\_t));~/{*}~not~malloc!~{*}/}{\small \par}

{\small{}~~~~if(!rectangle)~\{}{\small \par}

{\small{}~~~~~~perror(''calloc()~failed'');}{\small \par}

{\small{}~~~~~~exit(71);~/{*}~better,~EX\_OSERR~{*}/}{\small \par}

{\small{}~~~~\}}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~/{*}~Initialize~the~Rectangle~members~{*}/}{\small \par}

{\small{}~~~~rectangle->height~=~42;~~/{*}~any~random~value~{*}/}{\small \par}

{\small{}~~~~rectangle->width~~=~23;~~/{*}~any~random~value~{*}/}{\small \par}

{\small{}~~~~~}{\small \par}

{\small{}~~~~/{*}~BER~encode~the~data~if~filename~is~given~{*}/}{\small \par}

{\small{}~~~~if(ac~<~2)~\{}{\small \par}

{\small{}~~~~~~fprintf(stderr,~''Specify~filename~for~BER~output\textbackslash{}n'');}{\small \par}

{\small{}~~~~\}~else~\{}{\small \par}

{\small{}~~~~~~const~char~{*}filename~=~av{[}1{]};}{\small \par}

{\small{}~~~~~~FILE~{*}fp~=~fopen(filename,~''wb'');~~~/{*}~for~BER~output~{*}/}{\small \par}

~

{\small{}~~~~~~if(!fp)~\{}{\small \par}

{\small{}~~~~~~~~perror(filename);}{\small \par}

{\small{}~~~~~~~~exit(71);~/{*}~better,~EX\_OSERR~{*}/}{\small \par}

{\small{}~~~~~~\}}{\small \par}

{\small{}~~}{\small \par}

{\small{}~~~~~~/{*}~Encode~the~Rectangle~type~as~BER~(DER)~{*}/}{\small \par}

{\small{}~~~~~~ec~=~der\_encode(\&asn\_DEF\_Rectangle,}{\small \par}

{\small{}~~~~~~~~~~~~rectangle,~write\_out,~fp);}{\small \par}

{\small{}~~~~~~fclose(fp);}{\small \par}

{\small{}~~~~~~if(ec.encoded~==~-1)~\{}{\small \par}

{\small{}~~~~~~~~fprintf(stderr,}{\small \par}

{\small{}~~~~~~~~~~''Could~not~encode~Rectangle~(at~\%s)\textbackslash{}n'',}{\small \par}

{\small{}~~~~~~~~~~ec.failed\_type~?~ec.failed\_type->name~:~''unknown'');}{\small \par}

{\small{}~~~~~~~~exit(65);~/{*}~better,~EX\_DATAERR~{*}/}{\small \par}

{\small{}~~~~~~\}~else~\{}{\small \par}

{\small{}~~~~~~~~fprintf(stderr,~''Created~\%s~with~BER~encoded~Rectangle\textbackslash{}n'',}{\small \par}

{\small{}~~~~~~~~~~filename);}{\small \par}

{\small{}~~~~~~\}}{\small \par}

{\small{}~~~~\}}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~/{*}~Also~print~the~constructed~Rectangle~XER~encoded~(XML)~{*}/}{\small \par}

{\small{}~~~~xer\_fprint(stdout,~\&asn\_DEF\_Rectangle,~rectangle);}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~return~0;~/{*}~Encoding~finished~successfully~{*}/}{\small \par}

{\small \}}{\small \par}
\end{lyxcode}
\item Compile all files together using C compiler (varies by platform):

\begin{lyxcode}
\emph{cc~-I.~-o}~\textbf{\emph{rencode}}~\emph{{*}.c}
\end{lyxcode}
\item Voila! You have just created the BER and XER encoder of a Rectangle
type, named \textbf{rencode}!
\end{enumerate}
\clearpage{}


\section{\label{sec:A-Rectangle-Decoder}A ``Rectangle'' Decoder}

This example will help you to create a simple BER decoder of a simple
``Rectangle'' type used throughout this document.
\begin{enumerate}
\item Create a file named \textbf{rectangle.asn1} with the following contents:

\begin{lyxcode}
RectangleModule1~DEFINITIONS~::=

BEGIN

~

Rectangle~::=~SEQUENCE~\{

~~~~height~~INTEGER,

~~~~width~~~INTEGER

\}

~

END
\end{lyxcode}
\item Compile it into the set of .c and .h files using asn1c compiler \cite{ASN1C}:

\begin{lyxcode}
\emph{asn1c~-fnative-types}~\textbf{rectangle.asn1}
\end{lyxcode}
\item Alternatively, use the Online ASN.1 compiler \cite{AONL} by uploading
the \textbf{rectangle.asn1} file into the Web form and unpacking the
produced archive on your computer.
\item By this time, you should have gotten multiple files in the current
directory, including the \textbf{Rectangle.c} and \textbf{Rectangle.h}.
\item Create a main() routine which takes the binary input file, decodes
it as it were a BER-encoded Rectangle type, and prints out the text
(XML) representation of the Rectangle type. Let's name the file \textbf{main.c}:\clearpage{}

\begin{lyxcode}
{\small \#include~<stdio.h>}{\small \par}

{\small \#include~<sys/types.h>}{\small \par}

{\small \#include~<Rectangle.h>~~~/{*}~Rectangle~ASN.1~type~~{*}/}{\small \par}

{\small{}~}{\small \par}

{\small int~main(int~ac,~char~{*}{*}av)~\{}{\small \par}

{\small{}~~~~char~buf{[}1024{]};~~~~~~/{*}~Temporary~buffer~~~~~~{*}/}{\small \par}

{\small{}~~~~Rectangle\_t~{*}rectangle~=~0;~/{*}~Type~to~decode~{*}/}{\small \par}

{\small{}~~~~asn\_dec\_rval\_t~rval;~/{*}~Decoder~return~value~~{*}/}{\small \par}

{\small{}~~~~FILE~{*}fp;~~~~~~~~~~~~/{*}~Input~file~handler~~~~{*}/}{\small \par}

{\small{}~~~~size\_t~size;~~~~~~~~~/{*}~Number~of~bytes~read~~{*}/}{\small \par}

{\small{}~~~~char~{*}filename;~~~~~~/{*}~Input~file~name~{*}/}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~/{*}~Require~a~single~filename~argument~{*}/}{\small \par}

{\small{}~~~~if(ac~!=~2)~\{}{\small \par}

{\small{}~~~~~~fprintf(stderr,~''Usage:~\%s~<file.ber>\textbackslash{}n'',~av{[}0{]});}{\small \par}

{\small{}~~~~~~exit(64);~/{*}~better,~EX\_USAGE~{*}/}{\small \par}

{\small{}~~~~\}~else~\{}{\small \par}

{\small{}~~~~~~filename~=~av{[}1{]};}{\small \par}

{\small{}~~~~\}}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~/{*}~Open~input~file~as~read-only~binary~{*}/}{\small \par}

{\small{}~~~~fp~=~fopen(filename,~''rb'');}{\small \par}

{\small{}~~~~if(!fp)~\{}{\small \par}

{\small{}~~~~~~perror(filename);}{\small \par}

{\small{}~~~~~~exit(66);~/{*}~better,~EX\_NOINPUT~{*}/}{\small \par}

{\small{}~~~~\}}{\small \par}

{\small{}~~}{\small \par}

{\small{}~~~~/{*}~Read~up~to~the~buffer~size~{*}/}{\small \par}

{\small{}~~~~size~=~fread(buf,~1,~sizeof(buf),~fp);}{\small \par}

{\small{}~~~~fclose(fp);}{\small \par}

{\small{}~~~~if(!size)~\{}{\small \par}

{\small{}~~~~~~fprintf(stderr,~''\%s:~Empty~or~broken\textbackslash{}n'',~filename);}{\small \par}

{\small{}~~~~~~exit(65);~/{*}~better,~EX\_DATAERR~{*}/}{\small \par}

{\small{}~~~~\}}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~/{*}~Decode~the~input~buffer~as~Rectangle~type~{*}/}{\small \par}

{\small{}~~~~rval~=~ber\_decode(0,~\&asn\_DEF\_Rectangle,}{\small \par}

{\small{}~~~~~~(void~{*}{*})\&rectangle,~buf,~size);}{\small \par}

{\small{}~~~~if(rval.code~!=~RC\_OK)~\{}{\small \par}

{\small{}~~~~~~fprintf(stderr,}{\small \par}

{\small{}~~~~~~~~''\%s:~Broken~Rectangle~encoding~at~byte~\%ld\textbackslash{}n'',}{\small \par}

{\small{}~~~~~~~~filename,~(long)rval.consumed);}{\small \par}

{\small{}~~~~~~exit(65);~/{*}~better,~EX\_DATAERR~{*}/}{\small \par}

{\small{}~~~~\}}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~/{*}~Print~the~decoded~Rectangle~type~as~XML~{*}/}{\small \par}

{\small{}~~~~xer\_fprint(stdout,~\&asn\_DEF\_Rectangle,~rectangle);}{\small \par}

{\small{}~}{\small \par}

{\small{}~~~~return~0;~/{*}~Decoding~finished~successfully~{*}/}{\small \par}

{\small \}}{\small \par}
\end{lyxcode}
\item Compile all files together using C compiler (varies by platform):

\begin{lyxcode}
\emph{cc~-I.~-o}~\textbf{\emph{rdecode}}~\emph{{*}.c}
\end{lyxcode}
\item Voila! You have just created the BER decoder of a Rectangle type,
named \textbf{rdecode}!
\end{enumerate}

\chapter{Constraint validation examples}

This chapter shows how to define ASN.1 constraints and use the generated
validation code.


\section{Adding constraints into ``Rectangle'' type}

This example shows how to add basic constraints to the ASN.1 specification
and how to invoke the constraints validation code in your application.
\begin{enumerate}
\item Create a file named \textbf{rectangle.asn1} with the following contents:

\begin{lyxcode}
RectangleModuleWithConstraints~DEFINITIONS~::=

BEGIN

~

Rectangle~::=~SEQUENCE~\{

~~~~height~~INTEGER~(0..100),~-{}-~Value~range~constraint

~~~~width~~~INTEGER~(0..MAX)~~-{}-~Makes~width~non-negative~

\}

~

END
\end{lyxcode}
\item Compile the file according to procedures shown in the previous chapter.
\item Modify the Rectangle type processing routine (you can start with the
main() routine shown in the Section \vref{sec:A-Rectangle-Decoder})
by placing the following snippet of code \emph{before} encoding and/or
\emph{after} decoding the Rectangle type%
\footnote{Placing the constraint checking code \emph{before} encoding helps
to make sure you know the data is correct and within constraints before
sharing the data with anyone else.

Placing the constraint checking code \emph{after} decoding, but before
any further action depending on the decoded data, helps to make sure
the application got the valid contents before making use of it.%
}:\clearpage{}

\begin{lyxcode}
{\small int~ret;~~~~~~~~~~~/{*}~Return~value~{*}/}{\small \par}

{\small char~errbuf{[}128{]};~~/{*}~Buffer~for~error~message~{*}/}{\small \par}

{\small size\_t~errlen~=~sizeof(errbuf);~~/{*}~Size~of~the~buffer~{*}/}{\small \par}

{\small{}~~}{\small \par}

{\small /{*}~...~here~may~go~Rectangle~decoding~code~...~{*}/}{\small \par}

{\small{}~}{\small \par}

{\small ret~=~asn\_check\_constraints(\&asn\_DEF\_Rectangle,}{\small \par}

{\small{}~~~~~~~~rectangle,~errbuf,~\&errlen);}{\small \par}

{\small /{*}~assert(errlen~<~sizeof(errbuf));~//~you~may~rely~on~that~{*}/}{\small \par}

{\small if(ret)~\{}{\small \par}

{\small{}~~~~~~~~fprintf(stderr,~''Constraint~validation~failed:~\%s\textbackslash{}n'',}{\small \par}

{\small{}~~~~~~~~~~errbuf~~~/{*}~errbuf~is~properly~nul-terminated~{*}/}{\small \par}

{\small{}~~~~~~~~);}{\small \par}

{\small{}~~~~~~~~/{*}~exit(...);~//~Replace~with~appropriate~action~{*}/}{\small \par}

{\small \}}{\small \par}

{\small{}~}{\small \par}

{\small /{*}~...~here~may~go~Rectangle~encoding~code~...~{*}/}{\small \par}
\end{lyxcode}
\item Compile the resulting C code as shown in the previous chapters.
\item Try to test the constraints checking code by assigning integer value
101 to the \textbf{.height} member of the Rectangle structure, or
a negative value to the \textbf{.width} member. In either case, the
program should print ``Constraint validation failed'' message, followed
by the short explanation why validation did not succeed.
\item Done.
\end{enumerate}

\part{\label{par:ASN.1-Basics}ASN.1 Basics}


\chapter{\label{cha:Abstract-Syntax-Notation:}Abstract Syntax Notation: ASN.1}

\emph{This chapter defines some basic ASN.1 concepts and describes
several most widely used types. It is by no means an authoritative
or complete reference. For more complete ASN.1 description, please
refer to Olivier Dubuisson's book \cite{Dub00} or the ASN.1 body
of standards itself \cite{ITU-T/ASN.1}.}

The Abstract Syntax Notation One is used to formally describe the
semantics of data transmitted across the network. Two communicating
parties may have different formats of their native data types (i.e.
number of bits in the integer type), thus it is important to have
a way to describe the data in a manner which is independent from the
particular machine's representation. The ASN.1 specifications are
used to achieve the following:
\begin{itemize}
\item The specification expressed in the ASN.1 notation is a formal and
precise way to communicate the data semantics to human readers;
\item The ASN.1 specifications may be used as input for automatic compilers
which produce the code for some target language (C, C++, Java, etc)
to encode and decode the data according to some encoding rules (which
are also defined by the ASN.1 standard).
\end{itemize}
Consider the following example:
\begin{lyxcode}
Rectangle~::=~SEQUENCE~\{

~~~~height~~INTEGER,

~~~~width~~~INTEGER

\}
\end{lyxcode}
This ASN.1 specification describes a constructed type, \emph{Rectangle},
containing two integer fields. This specification may tell the reader
that there exists this kind of data structure and that some entity
may be prepared to send or receive it. The question on \emph{how}
that entity is going to send or receive the \emph{encoded data} is
outside the scope of ASN.1. For example, this data structure may be
encoded according to some encoding rules and sent to the destination
using the TCP protocol. The ASN.1 specifies several ways of encoding
(or ``serializing'', or ``marshaling'') the data: BER, PER, XER
and others, including CER and DER derivatives from BER.

The complete specification must be wrapped in a module, which looks
like this:
\begin{lyxcode}
RectangleModule1

~~~~\{~iso~org(3)~dod(6)~internet(1)~private(4)

~~~~~~enterprise(1)~spelio(9363)~software(1)

~~~~~~asn1c(5)~docs(2)~rectangle(1)~1~\}~

~~~~DEFINITIONS~AUTOMATIC~TAGS~::=

BEGIN

~

-{}-~This~is~a~comment~which~describes~nothing.

Rectangle~::=~SEQUENCE~\{

~~~~height~~INTEGER,~~~~~~~~-{}-~Height~of~the~rectangle

~~~~width~~~INTEGER~~~~~~~~~-{}-~Width~of~the~rectangle

\}

~

END
\end{lyxcode}
The module header consists of module name (RectangleModule1), the
module object identifier (\{...\}), a keyword ``DEFINITIONS'', a
set of module flags (AUTOMATIC TAGS) and ``::= BEGIN''. The module
ends with an ``END'' statement.


\section{Some of the ASN.1 Basic Types}


\subsection{The BOOLEAN type}

The BOOLEAN type models the simple binary TRUE/FALSE, YES/NO, ON/OFF
or a similar kind of two-way choice.


\subsection{The INTEGER type}

The INTEGER type is a signed natural number type without any restrictions
on its size. If the automatic checking on INTEGER value bounds are
necessary, the subtype constraints must be used.
\begin{lyxcode}
SimpleInteger~::=~INTEGER

~

-{}-~An~integer~with~a~very~limited~range

SmallPositiveInt~::=~INTEGER~(0..127)

~

-{}-~Integer,~negative

NegativeInt~::=~INTEGER~(MIN..0)
\end{lyxcode}

\subsection{The ENUMERATED type}

The ENUMERATED type is semantically equivalent to the INTEGER type
with some integer values explicitly named.
\begin{lyxcode}
FruitId~::=~ENUMERATED~\{~apple(1),~orange(2)~\}

~

-{}-~The~numbers~in~braces~are~optional,

-{}-~the~enumeration~can~be~performed

-{}-~automatically~by~the~compiler

ComputerOSType~::=~ENUMERATED~\{

~~~~FreeBSD,~~~~~~~~~~-{}-~acquires~value~0

~~~~Windows,~~~~~~~~~~-{}-~acquires~value~1

~~~~Solaris(5),~~~~~~~-{}-~remains~5

~~~~Linux,~~~~~~~~~~~~-{}-~becomes~6

~~~~MacOS~~~~~~~~~~~~~-{}-~becomes~7

\}
\end{lyxcode}

\subsection{The OCTET STRING type}

This type models the sequence of 8-bit bytes. This may be used to
transmit some opaque data or data serialized by other types of encoders
(i.e. video file, photo picture, etc).


\subsection{The OBJECT IDENTIFIER type}

The OBJECT IDENTIFIER is used to represent the unique identifier of
any object, starting from the very root of the registration tree.
If your organization needs to uniquely identify something (a router,
a room, a person, a standard, or whatever), you are encouraged to
get your own identification subtree at \url{http://www.iana.org/protocols/forms.htm}.

For example, the very first ASN.1 module in this Chapter (RectangleModule1)
has the following OBJECT IDENTIFIER: 1 3 6 1 4 1 9363 1 5 2 1 1.
\begin{lyxcode}
ExampleOID~::=~OBJECT~IDENTIFIER

~

rectangleModule1-oid~ExampleOID

~~::=~\{~1~3~6~1~4~1~9363~1~5~2~1~1~\}

~

-{}-~An~identifier~of~the~Internet.

internet-id~OBJECT~IDENTIFIER

~~::=~\{~iso(1)~identified-organization(3)

~~~~~~~~dod(6)~internet(1)~\}
\end{lyxcode}
As you see, names are optional.


\subsection{The RELATIVE-OID type}

The RELATIVE-OID type has the semantics of a subtree of an OBJECT
IDENTIFIER. There may be no need to repeat the whole sequence of numbers
from the root of the registration tree where the only thing of interest
is some of the tree's subsequence.
\begin{lyxcode}
this-document~RELATIVE-OID~::=~\{~docs(2)~usage(1)~\}

~

this-example~RELATIVE-OID~::=~\{

~~~~this-document~assorted-examples(0)~this-example(1)~\}
\end{lyxcode}

\section{Some of the ASN.1 String Types}


\subsection{The IA5String type}

This is essentially the ASCII, with 128 character codes available
(7 lower bits of an 8-bit byte).


\subsection{The UTF8String type}

This is the character string which encodes the full Unicode range
(4 bytes) using multibyte character sequences.


\subsection{The NumericString type}

This type represents the character string with the alphabet consisting
of numbers (``0'' to ``9'') and a space.


\subsection{The PrintableString type}

The character string with the following alphabet: space, ``\textbf{'}''
(single quote), ``\textbf{(}'', ``\textbf{)}'', ``\textbf{+}'',
``\textbf{,}'' (comma), ``\textbf{-}'', ``\textbf{.}'', ``\textbf{/}'',
digits (``0'' to ``9''), ``\textbf{:}'', ``\textbf{=}'', ``\textbf{?}'',
upper-case and lower-case letters (``A'' to ``Z'' and ``a''
to ``z'').


\subsection{The VisibleString type}

The character string with the alphabet which is more or less a subset
of ASCII between the space and the ``\textbf{\textasciitilde{}}''
symbol (tilde).

Alternatively, the alphabet may be described as the PrintableString
alphabet presented earlier, plus the following characters: ``\textbf{!}'',
``\textbf{``}'', ``\textbf{\#}'', ``\textbf{\$}'', ``\textbf{\%}'',
``\textbf{\&}'', ``\textbf{{*}}'', ``\textbf{;}'', ``\textbf{<}'',
``\textbf{>}'', ``\textbf{{[}}'', ``\textbf{\textbackslash{}}'',
``\textbf{{]}}'', ``\textbf{\textasciicircum{}}'', ``\textbf{\_}'',
``\textbf{`}`` (single left quote), ``\textbf{\{}'', ``\textbf{|}'',
``\textbf{\}}'', ``\textbf{\textasciitilde{}}''.


\section{ASN.1 Constructed Types}


\subsection{The SEQUENCE type}

This is an ordered collection of other simple or constructed types.
The SEQUENCE constructed type resembles the C ``struct'' statement.
\begin{lyxcode}
Address~::=~SEQUENCE~\{

~~~~-{}-~The~apartment~number~may~be~omitted

~~~~apartmentNumber~~~~~~NumericString~OPTIONAL,

~~~~streetName~~~~~~~~~~~PrintableString,

~~~~cityName~~~~~~~~~~~~~PrintableString,

~~~~stateName~~~~~~~~~~~~PrintableString,

~~~~-{}-~This~one~may~be~omitted~too

~~~~zipNo~~~~~~~~~~~~~~~~NumericString~OPTIONAL

\}
\end{lyxcode}

\subsection{The SET type}

This is a collection of other simple or constructed types. Ordering
is not important. The data may arrive in the order which is different
from the order of specification. Data is encoded in the order not
necessarily corresponding to the order of specification.


\subsection{The CHOICE type}

This type is just a choice between the subtypes specified in it. The
CHOICE type contains at most one of the subtypes specified, and it
is always implicitly known which choice is being decoded or encoded.
This one resembles the C ``union'' statement.

The following type defines a response code, which may be either an
integer code or a boolean ``true''/``false'' code.
\begin{lyxcode}
ResponseCode~::=~CHOICE~\{

~~~~intCode~~~~INTEGER,

~~~~boolCode~~~BOOLEAN

\}


\end{lyxcode}

\subsection{The SEQUENCE OF type}

This one is the list (array) of simple or constructed types:
\begin{lyxcode}
-{}-~Example~1

ManyIntegers~::=~SEQUENCE~OF~INTEGER

~

-{}-~Example~2

ManyRectangles~::=~SEQUENCE~OF~Rectangle

~

-{}-~More~complex~example:

-{}-~an~array~of~structures~defined~in~place.

ManyCircles~::=~SEQUENCE~OF~SEQUENCE~\{

~~~~~~~~~~~~~~~~~~~~~~~~~~~~radius~INTEGER

~~~~~~~~~~~~~~~~~~~~~~~~~~~~\}
\end{lyxcode}

\subsection{The SET OF type}

The SET OF type models the bag of structures. It resembles the SEQUENCE
OF type, but the order is not important: i.e. the elements may arrive
in the order which is not necessarily the same as the in-memory order
on the remote machines.
\begin{lyxcode}
-{}-~A~set~of~structures~defined~elsewhere

SetOfApples~::~SET~OF~Apple

~

-{}-~Set~of~integers~encoding~the~kind~of~a~fruit

FruitBag~::=~SET~OF~ENUMERATED~\{~apple,~orange~\}\end{lyxcode}
\begin{thebibliography}{ITU-T/ASN.1}
\bibitem[ASN1C]{ASN1C}The Open Source ASN.1 Compiler. \url{http://lionet.info/asn1c}

\bibitem[AONL]{AONL}Online ASN.1 Compiler. \url{http://lionet.info/asn1c/asn1c.cgi}

\bibitem[Dub00]{Dub00}Olivier Dubuisson --- \emph{ASN.1 Communication
between heterogeneous systems}~---~Morgan Kaufmann Publishers, 2000.
\url{http://asn1.elibel.tm.fr/en/book/}. ISBN:0-12-6333361-0.

\bibitem[ITU-T/ASN.1]{ITU-T/ASN.1}ITU-T Study Group 17 --- Languages
for Telecommunication Systems \url{http://www.itu.int/ITU-T/studygroups/com17/languages/}
\end{thebibliography}

\end{document}
