9 * Fix DEFINED BY pprinting when invoking as __main__ module
10 * Integer has ``tohex()`` for getting hexadecimal representation of its value
11 * ``hexdump()`` (``hexdump -C`` like output) and ``ascii_visualize()``
12 (visualize ASCII printable characters, like in ``hexdump -C``) pretty
13 printing functions appeared
14 * Experimental ASN.1 interactive terminal browser.
15 You will need `urwid package <http://urwid.org/>`__ to use it
22 * SEQUENCE/SET fully performs default value existence validation in
23 evgen mode, by the cost of DEFAULTed value full decoding. That should
24 not be the problem, as DEFAULTs are relatively small in practice. Now
25 evgen mode has the same DER validation strictness as an ordinary one
32 * Restored workability of some command line options
33 * 2-pass DER encoding mode with very little memory footprint
46 * Fixed invalid behaviour where SET OF allowed multiple objects with the
47 same tag to be successfully decoded
48 * Fixed possibly invalid SET DER encoding where objects were not sorted
49 by tag, but by encoded representation
50 * ``Any`` does not allow empty data value now. Now it checks if it has
52 * ``SetOf`` is not treated as ready, if no value was set and minimum
53 bounds are greater than zero
54 * ``Any`` allows an ordinary ``Obj`` storing, without its forceful
55 encoded representation storage. That is required for CER encoding
56 mode, where we do not know in advance what encoding will be used
57 * ``ObjectIdentifier`` stores values as C unsigned long integer,
58 forbidding storage of huge integers, that must not be a problem in
60 * Initial support for so called ``evgen_mode``: event generation mode,
61 where no in-memory objects storing happens, giving ability to process
62 ASN.1 data without fully parsing it first. ``python -m pyderasn`` has
63 ``--evgen`` mode switcher
64 * Useful ``agg_octet_string`` that is able to streamingly decode string
65 from events of ``evgen_mode``, allowing strings retrieving without
66 copying them to memory first
67 * Initial experimental CER encoding mode, allowing streaming encoding of
68 the data directly to some writeable object
69 * Ability to use mmap-ed memoryviews to skip files loading to memory
70 * Ability to use memoryview as an input for \*Strings. If they are
71 mmap-ed, then you can encode any quantities of data streamingly
72 without copying to memory
78 * Fixed workability under Python 3.5. Previously only 2.7 and 3.6
85 * Python ``int()``'s accepts even more various non-decimal characters
86 than expected. Make validation fully strict in UTCTime and
87 GeneralizedTime, without relying on ``int()``
93 * UTCTime and GeneralizedTime allowed values to have plus sign in them,
94 passing int() check successfully. Prohibit that incorrect behaviour
95 * UTCTime and GeneralizedTime BER decoding support
96 * Faster UTCTime and GeneralizedTime decoding, and slightly better
98 * Workability under Cython
99 * Explicitly Check that all ObjectIdentifier arcs are non-negative
105 * ``.copy()`` method removed: ``copy.copy()`` is preferred way to copy
107 * Copies made previously with ``.copy()`` lacked ``.defined`` field,
109 * All objects are friendly to ``pickle`` libraries
110 * PrintableString has ``allow_asterisk`` and ``allow_ampersand``
112 * ``.hexencode()``, ``.hexdecode()`` and ``.hexdecod()`` methods
113 appeared, working with hexadecimal encoded data
119 * Convenient ``.decod()`` method, that raises if tail is not empty
120 * Control characters (like newlines) of text fields in pprinted output
122 * Ability to allow asterisk and ampersand characters
123 (``allow_asterisk``, ``allow_ampersand`` kwargs) in PrintableString,
124 that unfortunately could be met in X.509 certificates
130 * PEP-396 compatible module's ``__version__``
136 * Do not shadow underlying DecodeError during decoding of optional
143 * Forbid any later GNU GPL version autousage (project's licence now is
145 * Fix ``defines_by_path`` context option usage example
151 * Fix fallbacked ``colored()`` function workability,
152 if no ``termcolor`` is installed
158 * Fix empty ``--oids`` workability
164 * Ability to specify multiple OID mappings for pprinted output
165 (``oids`` keyword argument is renamed to ``oid_maps``)
171 * Minor decode speed improvements
172 * Much faster UTCTime/GeneralizedTime decoders
173 * Stricter UTCTime/GeneralizedTime DER encoding check: trailing zeroes
175 * Valid DER encoding of GeneralizedTime with microseconds: no trailing
182 * ObjectIdentifier has ``ber_encoded`` set to True, if non-normalized
184 * Preserve BER-related attributes during ``copy()``
190 * Added `COMPLI <https://github.com/YuryStrozhevsky/asn1-test-suite>`__
191 ASN.1:2008 test suite. PyDERASN passes it (except for REAL values),
192 but it is more strict sometimes and aimed to be compliant with X.690-201508
193 * Check for arc values normalization in ObjectIdentifier.
194 Forbid non-normalized in DER encoding
200 * ``ctx`` parameter can be safely used in .decode() and won't be muted
201 * PP nametuple contains reference to the ASN1Obj itself
202 * ``colonize_hex`` function useful for pretty printing
203 * Integer values are also pretty printed in hexadecimal form
209 * All errors are inherited from ASN1Error class
210 * NumericString/PrintableString has ``allowable_chars`` property holding
211 all allowed characters
217 * Fix NumericString: space is allowed character
218 * Strict PrintableString sanitizing
224 * Removed ``lenindef``, ``ber_encoded`` attributes from the Choice --
225 they must be taken from underlying value, as Choice does not have its
227 * Do not yield extra EOC PP for Any, having indefinite length encoding
228 and containing autodecoded DEFINED BY value
234 * ``bered`` attribute, meaning if object has BER-specific encoding, is
235 renamed to ``ber_encoded``
236 * ``bered`` attribute is replace with property showing if any of
237 underlying values are BER-encoded. If value has length indefinite
238 encoded explicit tag, value, if value contains BER-related encoding,
239 or if it contains other objects that are ``bered``, then it is ``bered``
245 * Default value is checked also for Sets, not for Sequences only
246 * **Incompatible** change: defaulted values in Sequence/Set are always
247 strictly checked, unless ``allow_default_values`` context option is
248 set. ``strict_default_existence`` option disappeared
249 * Strict Set/Set Of's values ordering check
255 * Additional encoding validness check: explicit tag must contain exactly
256 one object inside. Throw DecodeError otherwise
257 * ``allow_expl_oob`` context and command-line options allow skipping of
264 * DecodeError's decode paths are separated with ``:``, instead of ``.``,
265 because of colliding with dots in OIDs
266 * Ability to print element decode paths with ``--print-decode-path``
267 command line option (and corresponding keyword argument)
268 * Ability to print tree's branch specified with ``--decode-path-only``
274 * Fix possible uncaught TypeError in Py2 with zero bytes inside the value
275 * Fix SequenceOf/SetOf raising BoundsError instead of DecodeError
281 * Fix uncaught UTCTime/GeneralizedTime decode error when dealing with
282 non ASCII-encoded values
288 * Fix long-standing bug with explicitly tagged objects inside the
289 Choice. If Choice had explicitly tagged value, then its ``.tlvlen``
290 reports the size without taking value's explicit tag in advance
291 * Add ``.fulllen`` and ``.fulloffset`` properties for all objects
297 * SEQUENCE's values are printed with field's name. Previously there was
298 the following output::
300 AlgorithmIdentifier SEQUENCE[OBJECT IDENTIFIER 1.3.14.3.2.26, [UNIV 5] ANY 0500 OPTIONAL]
304 AlgorithmIdentifier SEQUENCE[algorithm: OBJECT IDENTIFIER 1.3.14.3.2.26; parameters: [UNIV 5] ANY 0500 OPTIONAL]
305 * Fixed EOC (Unicode character) repr printing issues under Python2
311 BER's EOC is explicitly shown during pprinting. Following notation::
313 15-2 [0,0,1576]-4 . content: [0] EXPLICIT [UNIV 16] ANY
317 15-2∞ [0,0,1576]∞ . content: [0] EXPLICIT [UNIV 16] ANY
319 1587 [1,1, 0] . content: BER EOC
320 1589 [1,1, 0] . content: EXPLICIT BER EOC
326 * BER decoding support
327 * BitString's ''H notation support
328 * ``termcolor`` package is included in the tarball
334 * Ability to set values during Sequence initialization
340 * Fix TagMismatch exception completeness during Choice and Set decoding.
341 Previously we will loose offset and decode_path information about
342 concrete TagMismatched entity
348 * Strict NumericString's value sanitation
349 * Invalid encoding in string types will raise ``DecodeError`` exception,
350 instead of ``Unicode*Error``
351 * Fixed DecodePathDefBy workability with Python 2.x
357 * Fix nasty BitString decoding bug: it could fail when data follows
358 encoded BitString value. There weren't any problems when BitString is
359 at the end of Sequence
365 * Slightly corrected colours, now visible on white background
371 * Fix bug related to DecodeError showing with DecodePathDefBy entities
372 * Respect ``NO_COLOR`` environment variable
378 * :py:func:`pyderasn.decode_path_defby` is replaced with
379 :py:class:`pyderasn.DecodePathDefBy`
380 * Ability to turn colourized terminal output by calling
381 ``pprint(..., with_colours=True)``. You will need
382 `termcolor package <https://pypi.org/project/termcolor/>`__
388 * Fixed invalid offset calculation when dealing with DEFINED BY objects
395 * BIT STRINGs can also be :ref:`DEFINED BY <definedby>`
396 * Decoding process can be governed with optional :ref:`ctx <ctx>`
397 keyword argument to ``decode()`` method
398 * :ref:`defines_by_path <defines_by_path_ctx>` option is now
399 :ref:`decode context <ctx>` option, not a keyword argument
400 * Ability to do ``strict validation``
401 of defaulted values met in sequence, raising an exception
407 Ability to skip specified number of bytes (``--skip``) in command line
414 * Generic decoder's schema and pretty printer
415 (:py:func:`pyderasn.generic_decoder`) can be used in libraries
416 * Ability to specify :ref:`defines_by_path <defines_by_path_ctx>`
417 during command line invocation
423 Ability to automatically decode :ref:`DEFINED BY <definedby>` fields
430 Removed ``__lt__``/``__eq__`` from base class, as pylint likes it.
436 Full rich comparison operators added.
443 Trivial README addition.