8 * Trivial documentation fixes.
14 * Workability under Microsoft Windows OS should be restored: it has
15 different ``mmap`` constants and implementation, preventing
16 ``pyderasn`` importing
22 * **Incompatible** change: explicitly check that only naive datetime
23 objects are used for UTCTime and GeneralizedTime, raise an error
24 otherwise. Previously they silently ignored ``tzinfo``
30 * Strictly check that tag's long encoded form does not contain leading zero
32 * Strictly check that tag's long form is used in expected way for small values
39 * Proper strict alphabet validation of VisibleString
40 * VisibleString and IA5String also have ``allowable_chars`` property
41 * Fixed TeletexString, T61String use ``iso-8859-1`` encoding (instead of
42 ``ascii``), because they are 8-bit encodings
48 * Also print full TLVlen in ASN.1 browser
55 * Fix DEFINED BY pprinting when invoking as __main__ module
56 * Integer has ``tohex()`` for getting hexadecimal representation of its value
57 * ``hexdump()`` (``hexdump -C`` like output) and ``ascii_visualize()``
58 (visualize ASCII printable characters, like in ``hexdump -C``) pretty
59 printing functions appeared
60 * Experimental ASN.1 interactive terminal browser (``--browse`` and
62 You will need `urwid package <http://urwid.org/>`__ to use it
69 * SEQUENCE/SET fully performs default value existence validation in
70 evgen mode, by the cost of DEFAULTed value full decoding. That should
71 not be the problem, as DEFAULTs are relatively small in practice. Now
72 evgen mode has the same DER validation strictness as an ordinary one
79 * Restored workability of some command line options
80 * 2-pass DER encoding mode with very little memory footprint
93 * Fixed invalid behaviour where SET OF allowed multiple objects with the
94 same tag to be successfully decoded
95 * Fixed possibly invalid SET DER encoding where objects were not sorted
96 by tag, but by encoded representation
97 * ``Any`` does not allow empty data value now. Now it checks if it has
99 * ``SetOf`` is not treated as ready, if no value was set and minimum
100 bounds are greater than zero
101 * ``Any`` allows an ordinary ``Obj`` storing, without its forceful
102 encoded representation storage. That is required for CER encoding
103 mode, where we do not know in advance what encoding will be used
104 * ``ObjectIdentifier`` stores values as C unsigned long integer,
105 forbidding storage of huge integers, that must not be a problem in
107 * Initial support for so called ``evgen_mode``: event generation mode,
108 where no in-memory objects storing happens, giving ability to process
109 ASN.1 data without fully parsing it first. ``python -m pyderasn`` has
110 ``--evgen`` mode switcher
111 * Useful ``agg_octet_string`` that is able to streamingly decode string
112 from events of ``evgen_mode``, allowing strings retrieving without
113 copying them to memory first
114 * Initial experimental CER encoding mode, allowing streaming encoding of
115 the data directly to some writeable object
116 * Ability to use mmap-ed memoryviews to skip files loading to memory
117 * Ability to use memoryview as an input for \*Strings. If they are
118 mmap-ed, then you can encode any quantities of data streamingly
119 without copying to memory
125 * Fixed workability under Python 3.5. Previously only 2.7 and 3.6
132 * Python ``int()``'s accepts even more various non-decimal characters
133 than expected. Make validation fully strict in UTCTime and
134 GeneralizedTime, without relying on ``int()``
140 * UTCTime and GeneralizedTime allowed values to have plus sign in them,
141 passing ``int()`` check successfully. Prohibit that incorrect behaviour
142 * UTCTime and GeneralizedTime BER decoding support
143 * Faster UTCTime and GeneralizedTime decoding, and slightly better
145 * Workability under Cython
146 * Explicitly Check that all ObjectIdentifier arcs are non-negative
152 * ``.copy()`` method removed: ``copy.copy()`` is preferred way to copy
154 * Copies made previously with ``.copy()`` lacked ``.defined`` field,
156 * All objects are friendly to ``pickle`` libraries
157 * PrintableString has ``allow_asterisk`` and ``allow_ampersand``
159 * ``.hexencode()``, ``.hexdecode()`` and ``.hexdecod()`` methods
160 appeared, working with hexadecimal encoded data
166 * Convenient ``.decod()`` method, that raises if tail is not empty
167 * Control characters (like newlines) of text fields in pprinted output
169 * Ability to allow asterisk and ampersand characters
170 (``allow_asterisk``, ``allow_ampersand`` kwargs) in PrintableString,
171 that unfortunately could be met in X.509 certificates
177 * PEP-396 compatible module's ``__version__``
183 * Do not shadow underlying DecodeError during decoding of optional
190 * Forbid any later GNU GPL version autousage (project's licence now is
192 * Fix ``defines_by_path`` context option usage example
198 * Fix fallbacked ``colored()`` function workability,
199 if no ``termcolor`` is installed
205 * Fix empty ``--oids`` workability
211 * Ability to specify multiple OID mappings for pprinted output
212 (``oids`` keyword argument is renamed to ``oid_maps``)
218 * Minor decode speed improvements
219 * Much faster UTCTime/GeneralizedTime decoders
220 * Stricter UTCTime/GeneralizedTime DER encoding check: trailing zeroes
222 * Valid DER encoding of GeneralizedTime with microseconds: no trailing
229 * ObjectIdentifier has ``ber_encoded`` set to True, if non-normalized
231 * Preserve BER-related attributes during ``copy()``
237 * Added `COMPLI <https://github.com/YuryStrozhevsky/asn1-test-suite>`__
238 ASN.1:2008 test suite. PyDERASN passes it (except for REAL values),
239 but it is more strict sometimes and aimed to be compliant with X.690-201508
240 * Check for arc values normalization in ObjectIdentifier.
241 Forbid non-normalized in DER encoding
247 * ``ctx`` parameter can be safely used in .decode() and won't be muted
248 * PP nametuple contains reference to the ASN1Obj itself
249 * ``colonize_hex`` function useful for pretty printing
250 * Integer values are also pretty printed in hexadecimal form
256 * All errors are inherited from ASN1Error class
257 * NumericString/PrintableString has ``allowable_chars`` property holding
258 all allowed characters
264 * Fix NumericString: space is allowed character
265 * Strict PrintableString sanitizing
271 * Removed ``lenindef``, ``ber_encoded`` attributes from the Choice --
272 they must be taken from underlying value, as Choice does not have its
274 * Do not yield extra EOC PP for Any, having indefinite length encoding
275 and containing autodecoded DEFINED BY value
281 * ``bered`` attribute, meaning if object has BER-specific encoding, is
282 renamed to ``ber_encoded``
283 * ``bered`` attribute is replace with property showing if any of
284 underlying values are BER-encoded. If value has length indefinite
285 encoded explicit tag, value, if value contains BER-related encoding,
286 or if it contains other objects that are ``bered``, then it is ``bered``
292 * Default value is checked also for Sets, not for Sequences only
293 * **Incompatible** change: defaulted values in Sequence/Set are always
294 strictly checked, unless ``allow_default_values`` context option is
295 set. ``strict_default_existence`` option disappeared
296 * Strict Set/Set Of's values ordering check
302 * Additional encoding validness check: explicit tag must contain exactly
303 one object inside. Throw DecodeError otherwise
304 * ``allow_expl_oob`` context and command-line options allow skipping of
311 * DecodeError's decode paths are separated with ``:``, instead of ``.``,
312 because of colliding with dots in OIDs
313 * Ability to print element decode paths with ``--print-decode-path``
314 command line option (and corresponding keyword argument)
315 * Ability to print tree's branch specified with ``--decode-path-only``
321 * Fix possible uncaught TypeError in Py2 with zero bytes inside the value
322 * Fix SequenceOf/SetOf raising BoundsError instead of DecodeError
328 * Fix uncaught UTCTime/GeneralizedTime decode error when dealing with
329 non ASCII-encoded values
335 * Fix long-standing bug with explicitly tagged objects inside the
336 Choice. If Choice had explicitly tagged value, then its ``.tlvlen``
337 reports the size without taking value's explicit tag in advance
338 * Add ``.fulllen`` and ``.fulloffset`` properties for all objects
344 * SEQUENCE's values are printed with field's name. Previously there was
345 the following output::
347 AlgorithmIdentifier SEQUENCE[OBJECT IDENTIFIER 1.3.14.3.2.26, [UNIV 5] ANY 0500 OPTIONAL]
351 AlgorithmIdentifier SEQUENCE[algorithm: OBJECT IDENTIFIER 1.3.14.3.2.26; parameters: [UNIV 5] ANY 0500 OPTIONAL]
352 * Fixed EOC (Unicode character) repr printing issues under Python2
358 BER's EOC is explicitly shown during pprinting. Following notation::
360 15-2 [0,0,1576]-4 . content: [0] EXPLICIT [UNIV 16] ANY
364 15-2∞ [0,0,1576]∞ . content: [0] EXPLICIT [UNIV 16] ANY
366 1587 [1,1, 0] . content: BER EOC
367 1589 [1,1, 0] . content: EXPLICIT BER EOC
373 * BER decoding support
374 * BitString's ''H notation support
375 * ``termcolor`` package is included in the tarball
381 * Ability to set values during Sequence initialization
387 * Fix TagMismatch exception completeness during Choice and Set decoding.
388 Previously we will loose offset and decode_path information about
389 concrete TagMismatched entity
395 * Strict NumericString's value sanitation
396 * Invalid encoding in string types will raise ``DecodeError`` exception,
397 instead of ``Unicode*Error``
398 * Fixed DecodePathDefBy workability with Python 2.x
404 * Fix nasty BitString decoding bug: it could fail when data follows
405 encoded BitString value. There weren't any problems when BitString is
406 at the end of Sequence
412 * Slightly corrected colours, now visible on white background
418 * Fix bug related to DecodeError showing with DecodePathDefBy entities
419 * Respect ``NO_COLOR`` environment variable
425 * :py:func:`pyderasn.decode_path_defby` is replaced with
426 :py:class:`pyderasn.DecodePathDefBy`
427 * Ability to turn colourized terminal output by calling
428 ``pprint(..., with_colours=True)``. You will need
429 `termcolor package <https://pypi.org/project/termcolor/>`__
435 * Fixed invalid offset calculation when dealing with DEFINED BY objects
442 * BIT STRINGs can also be :ref:`DEFINED BY <definedby>`
443 * Decoding process can be governed with optional :ref:`ctx <ctx>`
444 keyword argument to ``decode()`` method
445 * :ref:`defines_by_path <defines_by_path_ctx>` option is now
446 :ref:`decode context <ctx>` option, not a keyword argument
447 * Ability to do ``strict validation``
448 of defaulted values met in sequence, raising an exception
454 Ability to skip specified number of bytes (``--skip``) in command line
461 * Generic decoder's schema and pretty printer
462 (:py:func:`pyderasn.generic_decoder`) can be used in libraries
463 * Ability to specify :ref:`defines_by_path <defines_by_path_ctx>`
464 during command line invocation
470 Ability to automatically decode :ref:`DEFINED BY <definedby>` fields
477 Removed ``__lt__``/``__eq__`` from base class, as pylint likes it.
483 Full rich comparison operators added.
490 Trivial README addition.