1
2ASN.1 library for Python
3========================
4
5.. toctree::
6   :maxdepth: 1
7
8Abstract Syntax Notation One (`ASN.1
9<http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_1x>`_) is a
10technology for exchanging structured data in a universally understood,
11hardware agnostic way. Many industrial, security and telephony
12applications heavily rely on ASN.1.
13
14The `pyasn1 <https://pypi.org/project/pyasn1/>`_ library implements
15ASN.1 support in pure-Python.
16
17What is ASN.1
18-------------
19
20ASN.1 is a large, arguably over-engineered and extremely old data modelling and
21serialisation tool. It is probably among the first serialisation protocols in
22the history of computer science and technology.
23
24ASN.1 started its life over 30 years ago as a serialisation mechanism for the first
25electronic mail (known as X.400). Later on if was split off the e-mail application
26and become a stand-alone tech still being actively supported by its designers
27and widely used in industry and technology.
28
29Since then ASN.1 is sort of haunted by its relations with the OSI model -- the
30first, unsuccessful, version of the Internet. You can read many interesting
31`discussions <https://news.ycombinator.com/item?id=8871453>`_ on that topic.
32
33In the following years, generations of software engineers tackled the serialisation
34problem many times. We can see that in Google's `ProtoBuffers <https://developers.google.com/protocol-buffers/>`_
35or `FlatBuffers <https://google.github.io/flatbuffers/>`_, for example.
36Interestingly, many new takes on binary protocol design do not depart
37far from ASN.1 from technical perspective. It's more of a matter of striking
38a balance between processing overhead, wire format overhead and human
39readability.
40
41Looking at what ASN.1 has to offer, it has three loosely coupled parts:
42
43* Data types: the standard introduces a collection of basic data types
44  (integers, bits, strings, arrays and records) that can be used for describing
45  arbitrarily complex, nested data structures.
46
47* Serialisation protocols: the above data structures could be converted into a
48  series of octets for storage or transmission over the wire as well as
49  recovered back into their structured form. The system is fully agnostic
50  to hardware architectures differences.
51
52* Schema language: ASN.1 data structures could be described in terms
53  of a schema language for ASN.1 compiler to turn it into platform-specific
54  implementation.
55
56ASN.1 applications
57------------------
58
59Being an old and generally successful standard, ASN.1 is widely
60adopted for many uses. To give you an example, these technologies
61use ASN.1 for their data exchange needs:
62
63* Signaling standards for the public switched telephone network (SS7 family)
64* Network management standards (SNMP, CMIP)
65* Directory standards (X.500 family, LDAP)
66* Public Key Infrastructure standards (X.509, etc.)
67* PBX control (CSTA)
68* IP-based Videoconferencing (H.323 family)
69* Biometrics (BIP, CBEFF, ACBio)
70* Intelligent transportation (SAE J2735)
71* Cellular telephony (GSM, GPRS/EDGE, UMTS, LTE)
72
73ASN.1 gotchas
74-------------
75
76Apparently, ASN.1 is hard to implement properly. Quality open-source
77ASN.1 tools are rare, but ad-hoc implementations are numerous. Judging from the
78`statistics <http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=ASN.1>`_ on discovered
79security vulnerabilities, many people have implemented ASN.1 parsers
80and oftentimes fell victim to its edge cases.
81
82On the bright side, ASN.1 has been around for a long time, it is well understood
83and security reviewed.
84
85Documentation
86-------------
87
88.. toctree::
89   :maxdepth: 2
90
91   /pyasn1/contents
92
93Use case
94--------
95
96.. toctree::
97   :maxdepth: 2
98
99   /example-use-case
100
101Download & Install
102------------------
103
104.. toctree::
105   :maxdepth: 2
106
107   /download
108
109Changes
110-------
111
112All changes and release history is maintained in changelog.  There you
113could also download the latest unreleased pyasn1 tarball containing
114the latest fixes and improvements.
115
116.. toctree::
117   :maxdepth: 1
118
119   /changelog
120
121License
122-------
123
124The PyASN1 software is distributed under 2-clause BSD License.
125
126.. toctree::
127   :maxdepth: 2
128
129   /license
130
131Getting help
132------------
133
134Please, file your `issues <https://github.com/etingof/pyasn1/issues>`_
135and `PRs <https://github.com/etingof/pyasn1/pulls>`_ at GitHub.
136Alternatively, you could ask for help at
137`Stack Overflow <http://stackoverflow.com/questions/tagged/pyasn1>`_
138or search
139`pyasn1-users <https://lists.sourceforge.net/lists/listinfo/pyasn1-users>`_
140mailing list archive.
141
142Books on ASN.1
143--------------
144
145The pyasn1 implementation is largely based on reading up the following awesome
146books:
147
148* `ASN.1 - Communication between heterogeneous systems <http://www.oss.com/asn1/dubuisson.html>`_ by Olivier Dubuisson
149* `ASN.1 Complete <http://www.oss.com/asn1/resources/books-whitepapers-pubs/larmouth-asn1-book.pdf>`_ by Prof John Larmouth
150
151Here you can get the official standards which is hard to read:
152
153* `ITU standards <http://www.itu.int/ITU-T/studygroups/com17/languages/X.680-X.693-0207w.zip>`_
154
155On the other end of the readability spectrum, here is a quick and sweet write up:
156
157* `A Layman's Guide to a Subset of ASN.1, BER, and DER <ftp://ftp.rsasecurity.com/pub/pkcs/ascii/layman.asc>`_ by Burton S. Kaliski
158
159If you are working with ASN.1, we'd highly recommend reading a proper
160book on the subject.
161
162