8 * Workability under Microsoft Windows OS should be restored: it has
9 different ``mmap`` constants and implementation, preventing
10 ``pyderasn`` importing
16 * **Incompatible** change: explicitly check that only naive datetime
17 objects are used for UTCTime and GeneralizedTime, raise an error
18 otherwise. Previously they silently ignored ``tzinfo``
24 * Strictly check that tag's long encoded form does not contain leading zero
26 * Strictly check that tag's long form is used in expected way for small values
33 * Proper strict alphabet validation of VisibleString
34 * VisibleString and IA5String also have ``allowable_chars`` property
35 * Fixed TeletexString, T61String use ``iso-8859-1`` encoding (instead of
36 ``ascii``), because they are 8-bit encodings
42 * Also print full TLVlen in ASN.1 browser
49 * Fix DEFINED BY pprinting when invoking as __main__ module
50 * Integer has ``tohex()`` for getting hexadecimal representation of its value
51 * ``hexdump()`` (``hexdump -C`` like output) and ``ascii_visualize()``
52 (visualize ASCII printable characters, like in ``hexdump -C``) pretty
53 printing functions appeared
54 * Experimental ASN.1 interactive terminal browser (``--browse`` and
56 You will need `urwid package <http://urwid.org/>`__ to use it
63 * SEQUENCE/SET fully performs default value existence validation in
64 evgen mode, by the cost of DEFAULTed value full decoding. That should
65 not be the problem, as DEFAULTs are relatively small in practice. Now
66 evgen mode has the same DER validation strictness as an ordinary one
73 * Restored workability of some command line options
74 * 2-pass DER encoding mode with very little memory footprint
87 * Fixed invalid behaviour where SET OF allowed multiple objects with the
88 same tag to be successfully decoded
89 * Fixed possibly invalid SET DER encoding where objects were not sorted
90 by tag, but by encoded representation
91 * ``Any`` does not allow empty data value now. Now it checks if it has
93 * ``SetOf`` is not treated as ready, if no value was set and minimum
94 bounds are greater than zero
95 * ``Any`` allows an ordinary ``Obj`` storing, without its forceful
96 encoded representation storage. That is required for CER encoding
97 mode, where we do not know in advance what encoding will be used
98 * ``ObjectIdentifier`` stores values as C unsigned long integer,
99 forbidding storage of huge integers, that must not be a problem in
101 * Initial support for so called ``evgen_mode``: event generation mode,
102 where no in-memory objects storing happens, giving ability to process
103 ASN.1 data without fully parsing it first. ``python -m pyderasn`` has
104 ``--evgen`` mode switcher
105 * Useful ``agg_octet_string`` that is able to streamingly decode string
106 from events of ``evgen_mode``, allowing strings retrieving without
107 copying them to memory first
108 * Initial experimental CER encoding mode, allowing streaming encoding of
109 the data directly to some writeable object
110 * Ability to use mmap-ed memoryviews to skip files loading to memory
111 * Ability to use memoryview as an input for \*Strings. If they are
112 mmap-ed, then you can encode any quantities of data streamingly
113 without copying to memory
119 * Fixed workability under Python 3.5. Previously only 2.7 and 3.6
126 * Python ``int()``'s accepts even more various non-decimal characters
127 than expected. Make validation fully strict in UTCTime and
128 GeneralizedTime, without relying on ``int()``
134 * UTCTime and GeneralizedTime allowed values to have plus sign in them,
135 passing ``int()`` check successfully. Prohibit that incorrect behaviour
136 * UTCTime and GeneralizedTime BER decoding support
137 * Faster UTCTime and GeneralizedTime decoding, and slightly better
139 * Workability under Cython
140 * Explicitly Check that all ObjectIdentifier arcs are non-negative
146 * ``.copy()`` method removed: ``copy.copy()`` is preferred way to copy
148 * Copies made previously with ``.copy()`` lacked ``.defined`` field,
150 * All objects are friendly to ``pickle`` libraries
151 * PrintableString has ``allow_asterisk`` and ``allow_ampersand``
153 * ``.hexencode()``, ``.hexdecode()`` and ``.hexdecod()`` methods
154 appeared, working with hexadecimal encoded data
160 * Convenient ``.decod()`` method, that raises if tail is not empty
161 * Control characters (like newlines) of text fields in pprinted output
163 * Ability to allow asterisk and ampersand characters
164 (``allow_asterisk``, ``allow_ampersand`` kwargs) in PrintableString,
165 that unfortunately could be met in X.509 certificates
171 * PEP-396 compatible module's ``__version__``
177 * Do not shadow underlying DecodeError during decoding of optional
184 * Forbid any later GNU GPL version autousage (project's licence now is
186 * Fix ``defines_by_path`` context option usage example
192 * Fix fallbacked ``colored()`` function workability,
193 if no ``termcolor`` is installed
199 * Fix empty ``--oids`` workability
205 * Ability to specify multiple OID mappings for pprinted output
206 (``oids`` keyword argument is renamed to ``oid_maps``)
212 * Minor decode speed improvements
213 * Much faster UTCTime/GeneralizedTime decoders
214 * Stricter UTCTime/GeneralizedTime DER encoding check: trailing zeroes
216 * Valid DER encoding of GeneralizedTime with microseconds: no trailing
223 * ObjectIdentifier has ``ber_encoded`` set to True, if non-normalized
225 * Preserve BER-related attributes during ``copy()``
231 * Added `COMPLI <https://github.com/YuryStrozhevsky/asn1-test-suite>`__
232 ASN.1:2008 test suite. PyDERASN passes it (except for REAL values),
233 but it is more strict sometimes and aimed to be compliant with X.690-201508
234 * Check for arc values normalization in ObjectIdentifier.
235 Forbid non-normalized in DER encoding
241 * ``ctx`` parameter can be safely used in .decode() and won't be muted
242 * PP nametuple contains reference to the ASN1Obj itself
243 * ``colonize_hex`` function useful for pretty printing
244 * Integer values are also pretty printed in hexadecimal form
250 * All errors are inherited from ASN1Error class
251 * NumericString/PrintableString has ``allowable_chars`` property holding
252 all allowed characters
258 * Fix NumericString: space is allowed character
259 * Strict PrintableString sanitizing
265 * Removed ``lenindef``, ``ber_encoded`` attributes from the Choice --
266 they must be taken from underlying value, as Choice does not have its
268 * Do not yield extra EOC PP for Any, having indefinite length encoding
269 and containing autodecoded DEFINED BY value
275 * ``bered`` attribute, meaning if object has BER-specific encoding, is
276 renamed to ``ber_encoded``
277 * ``bered`` attribute is replace with property showing if any of
278 underlying values are BER-encoded. If value has length indefinite
279 encoded explicit tag, value, if value contains BER-related encoding,
280 or if it contains other objects that are ``bered``, then it is ``bered``
286 * Default value is checked also for Sets, not for Sequences only
287 * **Incompatible** change: defaulted values in Sequence/Set are always
288 strictly checked, unless ``allow_default_values`` context option is
289 set. ``strict_default_existence`` option disappeared
290 * Strict Set/Set Of's values ordering check
296 * Additional encoding validness check: explicit tag must contain exactly
297 one object inside. Throw DecodeError otherwise
298 * ``allow_expl_oob`` context and command-line options allow skipping of
305 * DecodeError's decode paths are separated with ``:``, instead of ``.``,
306 because of colliding with dots in OIDs
307 * Ability to print element decode paths with ``--print-decode-path``
308 command line option (and corresponding keyword argument)
309 * Ability to print tree's branch specified with ``--decode-path-only``
315 * Fix possible uncaught TypeError in Py2 with zero bytes inside the value
316 * Fix SequenceOf/SetOf raising BoundsError instead of DecodeError
322 * Fix uncaught UTCTime/GeneralizedTime decode error when dealing with
323 non ASCII-encoded values
329 * Fix long-standing bug with explicitly tagged objects inside the
330 Choice. If Choice had explicitly tagged value, then its ``.tlvlen``
331 reports the size without taking value's explicit tag in advance
332 * Add ``.fulllen`` and ``.fulloffset`` properties for all objects
338 * SEQUENCE's values are printed with field's name. Previously there was
339 the following output::
341 AlgorithmIdentifier SEQUENCE[OBJECT IDENTIFIER 1.3.14.3.2.26, [UNIV 5] ANY 0500 OPTIONAL]
345 AlgorithmIdentifier SEQUENCE[algorithm: OBJECT IDENTIFIER 1.3.14.3.2.26; parameters: [UNIV 5] ANY 0500 OPTIONAL]
346 * Fixed EOC (Unicode character) repr printing issues under Python2
352 BER's EOC is explicitly shown during pprinting. Following notation::
354 15-2 [0,0,1576]-4 . content: [0] EXPLICIT [UNIV 16] ANY
358 15-2∞ [0,0,1576]∞ . content: [0] EXPLICIT [UNIV 16] ANY
360 1587 [1,1, 0] . content: BER EOC
361 1589 [1,1, 0] . content: EXPLICIT BER EOC
367 * BER decoding support
368 * BitString's ''H notation support
369 * ``termcolor`` package is included in the tarball
375 * Ability to set values during Sequence initialization
381 * Fix TagMismatch exception completeness during Choice and Set decoding.
382 Previously we will loose offset and decode_path information about
383 concrete TagMismatched entity
389 * Strict NumericString's value sanitation
390 * Invalid encoding in string types will raise ``DecodeError`` exception,
391 instead of ``Unicode*Error``
392 * Fixed DecodePathDefBy workability with Python 2.x
398 * Fix nasty BitString decoding bug: it could fail when data follows
399 encoded BitString value. There weren't any problems when BitString is
400 at the end of Sequence
406 * Slightly corrected colours, now visible on white background
412 * Fix bug related to DecodeError showing with DecodePathDefBy entities
413 * Respect ``NO_COLOR`` environment variable
419 * :py:func:`pyderasn.decode_path_defby` is replaced with
420 :py:class:`pyderasn.DecodePathDefBy`
421 * Ability to turn colourized terminal output by calling
422 ``pprint(..., with_colours=True)``. You will need
423 `termcolor package <https://pypi.org/project/termcolor/>`__
429 * Fixed invalid offset calculation when dealing with DEFINED BY objects
436 * BIT STRINGs can also be :ref:`DEFINED BY <definedby>`
437 * Decoding process can be governed with optional :ref:`ctx <ctx>`
438 keyword argument to ``decode()`` method
439 * :ref:`defines_by_path <defines_by_path_ctx>` option is now
440 :ref:`decode context <ctx>` option, not a keyword argument
441 * Ability to do ``strict validation``
442 of defaulted values met in sequence, raising an exception
448 Ability to skip specified number of bytes (``--skip``) in command line
455 * Generic decoder's schema and pretty printer
456 (:py:func:`pyderasn.generic_decoder`) can be used in libraries
457 * Ability to specify :ref:`defines_by_path <defines_by_path_ctx>`
458 during command line invocation
464 Ability to automatically decode :ref:`DEFINED BY <definedby>` fields
471 Removed ``__lt__``/``__eq__`` from base class, as pylint likes it.
477 Full rich comparison operators added.
484 Trivial README addition.