blob: 3ff18b6ae5b897ad0e2ebb7ec7113517bee8dc9c [file] [log] [blame]
<html>
<title>
PyASN1 reference manual
</title>
<head>
</head>
<body>
<center>
<table width=60%>
<tr>
<td>
<h3>
PyASN1 reference manual
</h3>
<p align=right>
<i>written by <a href=mailto:ilya@glas.net>Ilya Etingof</a>, 2011-2012</i>
</p>
<p>
Free and open-source pyasn1 library makes it easier for programmers and
network engineers to develop, debug and experiment with ASN.1-based protocols
using Python programming language as a tool.
</p>
<p>
Abstract Syntax Notation One
(<a href=http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_1x>ASN.1</a>)
is a set of
<a href=http://www.itu.int/ITU-T/studygroups/com17/languages/X.680-X.693-0207w.zip>
ITU standards</a> concered with provisioning instrumentation for developing
data exchange protocols in a robust, clear and interoperabable way for
various IT systems and applications. Most of the efforts are targeting the
following areas:
<ul>
<li>Data structures: the standard introduces a collection of basic data types
(similar to integers, bits, strings, arrays and records in a programming
language) that can be used for defining complex, possibly nested data
structures representing domain-specific data units.
<li>Serialization protocols: domain-specific data units expressed in ASN.1
types could be converted into a series of octets for storage or transmission
over the wire and then recovered back into their structured form on the
receiving end. This process is immune to various hardware and software
related dependencies.
<li>Data description language: could be used to describe particular set of
domain-specific data structures and their relationships. Such a description
could be passed to an ASN.1 compiler for automated generation of program
code that represents ASN.1 data structures in language-native environment
and handles data serialization issues.
</ul>
</p>
<p>
This tutorial and algorithms, implemented by pyasn1 library, are
largely based on the information read in the book
<a href="http://www.oss.com/asn1/dubuisson.html">
ASN.1 - Communication between heterogeneous systems</a>
by Olivier Dubuisson. Another relevant resource is
<a href=ftp://ftp.rsasecurity.com/pub/pkcs/ascii/layman.asc>
A Layman's Guide to a Subset of ASN.1, BER, and DER</a> by Burton S. Kaliski.
It's advised to refer to these books for more in-depth knowledge on the
subject of ASN.1.
</p>
<p>
As of this writing, pyasn1 library implements most of standard ASN.1 data
structures in a rather detailed and feature-rich manner. Another highly
important capability of the library is its data serialization facilities.
The last component of the standard - ASN.1 compiler is planned for
implementation in the future.
</p>
</p>
The pyasn1 library was designed to follow the pre-1995 ASN.1 specification
(also known as X.208). Later, post 1995, revision (X.680) introduced
significant changes most of which have not yet been supported by pyasn1.
</p>
<h3>
Table of contents
</h3>
<p>
<ul>
<li><a href="scalar.html">1. Data model for ASN.1 types</a>
<li><a href="scalar.html#1.1">1.1 Scalar types</a>
<li><a href="scalar.html#1.1.1">1.1.1 Boolean type</a>
<li><a href="scalar.html#1.1.2">1.1.2 Null type</a>
<li><a href="scalar.html#1.1.3">1.1.3 Integer type</a>
<li><a href="scalar.html#1.1.4">1.1.4 Enumerated type</a>
<li><a href="scalar.html#1.1.5">1.1.5 Real type</a>
<li><a href="scalar.html#1.1.6">1.1.6 Bit string type</a>
<li><a href="scalar.html#1.1.7">1.1.7 OctetString type</a>
<li><a href="scalar.html#1.1.8">1.1.8 ObjectIdentifier type</a>
<li><a href="scalar.html#1.1.9">1.1.9 Character string types</a>
<li><a href="scalar.html#1.1.10">1.1.10 Useful types</a>
<li><a href="tagging.html">1.2 Tagging</a>
<li><a href="constructed.html">1.3 Constructed types</a>
<li><a href="constructed.html#1.3.1">1.3.1 Sequence and Set types</a>
<li><a href="constructed.html#1.3.2">1.3.2 SequenceOf and SetOf types</a>
<li><a href="constructed.html#1.3.3">1.3.3 Choice type</a>
<li><a href="constructed.html#1.3.4">1.3.4 Any type</a>
<li><a href="constraints.html">1.4 Subtype constraints</a>
<li><a href="constraints.html#1.4.1">1.4.1 Single value constraint</a>
<li><a href="constraints.html#1.4.2">1.4.2 Value range constraint</a>
<li><a href="constraints.html#1.4.3">1.4.3 Size constraint</a>
<li><a href="constraints.html#1.4.4">1.4.4 Alphabet constraint</a>
<li><a href="constraints.html#1.4.5">1.4.5 Constraint combinations</a>
<li><a href="constraints.html#1.5">1.5 Types relationships</a>
<li><a href="codecs.html">2. Codecs</a>
<li><a href="codecs.html#2.1">2.1 Encoders</a>
<li><a href="codecs.html#2.2">2.2 Decoders</a>
<li><a href="codecs.html#2.2.1">2.2.1 Decoding untagged types</a>
<li><a href="codecs.html#2.2.2">2.2.2 Ignoring unknown types</a>
</ul>
<p>
Although pyasn1 software is almost a decade old and used in many production
environments, it still may have bugs and non-implemented pieces. Anyone
who happens to run into such defect is welcome to complain to
<a href=mailto:pyasn1-users@lists.sourceforge.net>pyasn1 mailing list</a>
or better yet fix the issue and send
<a href=mailto:ilya@glas.net>me</a> the patch.
</p>
<p>
Typically, pyasn1 is used for building arbitrary protocol support into
various applications. This involves manual translation of ASN.1 data
structures into their pyasn1 implementations. To save time and effort,
data structures for some of the popular protocols are pre-programmed
and kept for further re-use in form of the
<a href=http://sourceforge.net/projects/pyasn1/files/pyasn1-modules/>
pyasn1-modules package</a>. For instance, many structures for PKI (X.509,
PKCS#*, CRMF, OCSP), LDAP and SNMP are present.
Applications authors are advised to import and use relevant modules
from that package whenever needed protocol structures are already
there. New protocol modules contributions are welcome.
</p>
<p>
And finally, the latest pyasn1 package revision is available for free
download from
<a href=http://sourceforge.net/projects/pyasn1/>project home</a> and
also from the
<a href=http://pypi.python.org/pypi>Python package repository</a>.
</p>
<hr>
</td>
</tr>
</table>
</center>
</body>
</html>