
ASN.1 library for Python
------------------------

This is an implementation of ASN.1 types and codecs in Python programming
language. It has been first written to support particular protocol (SNMP)
but then generalized to be suitable for a wide range of protocols
based on ASN.1 specification.

FEATURES
--------

* Generic implementation of ASN.1 types (X.208)
* Fully standard compliant BER/CER/DER codecs
* 100% Python, works with Python 2.4 up to Python 3.3 (beta 1)
* MT-safe

MISFEATURES
-----------

* No ASN.1 compiler (by-hand ASN.1 spec compilation into Python code required)
* Codecs are not restartable

INSTALLATION
------------

The pyasn1 package uses setuptools/distutils for installation. Thus do
either:

$ easy_install pyasn1

or

$ tar zxf pyasn1-0.1.3.tar.gz
$ cd pyasn1-0.1.3
$ python setup.py install
$ cd test
$ python suite.py   # run unit tests

OPERATION
---------

Perhaps a typical use would involve [by-hand] compilation of your ASN.1
specification into pyasn1-backed Python code at your application.

For more information on pyasn1 APIs, please, refer to the 
doc/pyasn1-tutorial.html file in the distribution.

Also refer to example modules. Take a look at pyasn1-modules package -- maybe
it already holds something useful to you.

AVAILABILITY
------------

The pyasn1 package is distributed under terms and conditions of BSD-style
license. See LICENSE file in the distribution. Source code is freely
available from:

http://pyasn1.sf.net


FEEDBACK
--------

Please, send your comments and fixes to mailing lists at project web site.

=-=-=
mailto: ilya@glas.net
