* BER/CER/DER decoding, DER encoding
* Basic ASN.1 data types (X.208): BOOLEAN, INTEGER, BIT STRING, OCTET
- STRING, NULL, OBJECT IDENTIFIER, ENUMERATED, all strings, UTCTime,
- GeneralizedTime, CHOICE, ANY, SEQUENCE (OF), SET (OF)
+ STRING, NULL, OBJECT IDENTIFIER, ENUMERATED, all strings, UTCTime (no
+ BER), GeneralizedTime (no BER), CHOICE, ANY, SEQUENCE (OF), SET (OF)
* Size :ref:`constraints <bounds>` checking
* Working with sequences as high level data objects with ability to
(un)marshall them
* Python 2.7/3.5/3.6 compatibility
+* Aimed to be complaint with `X.690-201508 <https://www.itu.int/rec/T-REC-X.690-201508-I/en>`__
-Why yet another library? `pyasn1 <https://github.com/etingof/pyasn1>`__
+Why yet another library? `pyasn1 <http://snmplabs.com/pyasn1/>`__
had all of this a long time ago. PyDERASN resembles it in many ways. In
practice it should be relatively easy to convert ``pyasn1``'s code to
``pyderasn``'s one. But additionally it offers:
* However they do not require tags matching: IMPLICIT/EXPLICIT tags will
be set automatically in the given sequence
* Descriptive errors, like ``pyderasn.DecodeError: UTCTime
- (tbsCertificate.validity.notAfter.utcTime) (at 328) invalid UTCTime format``
+ (tbsCertificate:validity:notAfter:utcTime) (at 328) invalid UTCTime format``
* ``__slots__`` friendliness
* Could be significantly faster. For example parsing of CACert.org's CRL
under Python 3.5.2:
There are drawbacks:
* No old Python versions support
-* PyDERASN does **not** have object recreation capable ``repr``-s::
-
- pyderasn>>> repr(algo_id)
- AlgorithmIdentifier SEQUENCE[algorithm: OBJECT IDENTIFIER 1.3.14.3.2.26; parameters: [UNIV 5] ANY 0500 OPTIONAL]
-
- pyasn1>>> repr(algo_id)
- AlgorithmIdentifier().setComponents(ObjectIdentifier('1.3.14.3.2.26'), Any(hexValue='0500'))
-
* Strings are not validated in any way, except just trying to be decoded
in ``ascii``, ``iso-8859-1``, ``utf-8/16/32`` correspondingly
* No REAL, RELATIVE OID, EXTERNAL, INSTANCE OF, EMBEDDED PDV, CHARACTER STRING