8 * ``keep_memoryview`` context option appeared, respected by OctetString
9 and Any objects during DER decoding. If set, then their internal
10 values will keep memoryview reference instead of full bytes copy
11 * Correspondingly OctetString and Any have ``.memoryview()`` method
17 * ``.totzdatetime()`` appeared in UTCTime and GeneralizedTime,
18 explicitly setting UTC timezone information.
19 Optional ``dateutils.tz`` library is required for that
25 * Drop Python 2.7 support. No ``six`` dependency anymore
31 * Fix previous release's style breaking in ASN.1 browser
37 * Append offsets to tree elements in ASN.1 browser for ease of navigation
43 * Trivial documentation fixes
49 * Workability under Microsoft Windows OS should be restored: it has
50 different ``mmap`` constants and implementation, preventing
51 ``pyderasn`` importing
57 * **Incompatible** change: explicitly check that only naive datetime
58 objects are used for UTCTime and GeneralizedTime, raise an error
59 otherwise. Previously they silently ignored ``tzinfo``
65 * Strictly check that tag's long encoded form does not contain leading zero
67 * Strictly check that tag's long form is used in expected way for small values
74 * Proper strict alphabet validation of VisibleString
75 * VisibleString and IA5String also have ``allowable_chars`` property
76 * Fixed TeletexString, T61String use ``iso-8859-1`` encoding (instead of
77 ``ascii``), because they are 8-bit encodings
83 * Also print full TLVlen in ASN.1 browser
90 * Fix DEFINED BY pprinting when invoking as __main__ module
91 * Integer has ``tohex()`` for getting hexadecimal representation of its value
92 * ``hexdump()`` (``hexdump -C`` like output) and ``ascii_visualize()``
93 (visualize ASCII printable characters, like in ``hexdump -C``) pretty
94 printing functions appeared
95 * Experimental ASN.1 interactive terminal browser (``--browse`` and
97 You will need `urwid package <http://urwid.org/>`__ to use it
104 * SEQUENCE/SET fully performs default value existence validation in
105 evgen mode, by the cost of DEFAULTed value full decoding. That should
106 not be the problem, as DEFAULTs are relatively small in practice. Now
107 evgen mode has the same DER validation strictness as an ordinary one
114 * Restored workability of some command line options
115 * 2-pass DER encoding mode with very little memory footprint
128 * Fixed invalid behaviour where SET OF allowed multiple objects with the
129 same tag to be successfully decoded
130 * Fixed possibly invalid SET DER encoding where objects were not sorted
131 by tag, but by encoded representation
132 * ``Any`` does not allow empty data value now. Now it checks if it has
134 * ``SetOf`` is not treated as ready, if no value was set and minimum
135 bounds are greater than zero
136 * ``Any`` allows an ordinary ``Obj`` storing, without its forceful
137 encoded representation storage. That is required for CER encoding
138 mode, where we do not know in advance what encoding will be used
139 * ``ObjectIdentifier`` stores values as C unsigned long integer,
140 forbidding storage of huge integers, that must not be a problem in
142 * Initial support for so called ``evgen_mode``: event generation mode,
143 where no in-memory objects storing happens, giving ability to process
144 ASN.1 data without fully parsing it first. ``python -m pyderasn`` has
145 ``--evgen`` mode switcher
146 * Useful ``agg_octet_string`` that is able to streamingly decode string
147 from events of ``evgen_mode``, allowing strings retrieving without
148 copying them to memory first
149 * Initial experimental CER encoding mode, allowing streaming encoding of
150 the data directly to some writeable object
151 * Ability to use mmap-ed memoryviews to skip files loading to memory
152 * Ability to use memoryview as an input for \*Strings. If they are
153 mmap-ed, then you can encode any quantities of data streamingly
154 without copying to memory
160 * Fixed workability under Python 3.5. Previously only 2.7 and 3.6
167 * Python ``int()``'s accepts even more various non-decimal characters
168 than expected. Make validation fully strict in UTCTime and
169 GeneralizedTime, without relying on ``int()``
175 * UTCTime and GeneralizedTime allowed values to have plus sign in them,
176 passing ``int()`` check successfully. Prohibit that incorrect behaviour
177 * UTCTime and GeneralizedTime BER decoding support
178 * Faster UTCTime and GeneralizedTime decoding, and slightly better
180 * Workability under Cython
181 * Explicitly Check that all ObjectIdentifier arcs are non-negative
187 * ``.copy()`` method removed: ``copy.copy()`` is preferred way to copy
189 * Copies made previously with ``.copy()`` lacked ``.defined`` field,
191 * All objects are friendly to ``pickle`` libraries
192 * PrintableString has ``allow_asterisk`` and ``allow_ampersand``
194 * ``.hexencode()``, ``.hexdecode()`` and ``.hexdecod()`` methods
195 appeared, working with hexadecimal encoded data
201 * Convenient ``.decod()`` method, that raises if tail is not empty
202 * Control characters (like newlines) of text fields in pprinted output
204 * Ability to allow asterisk and ampersand characters
205 (``allow_asterisk``, ``allow_ampersand`` kwargs) in PrintableString,
206 that unfortunately could be met in X.509 certificates
212 * PEP-396 compatible module's ``__version__``
218 * Do not shadow underlying DecodeError during decoding of optional
225 * Forbid any later GNU GPL version autousage (project's licence now is
227 * Fix ``defines_by_path`` context option usage example
233 * Fix fallbacked ``colored()`` function workability,
234 if no ``termcolor`` is installed
240 * Fix empty ``--oids`` workability
246 * Ability to specify multiple OID mappings for pprinted output
247 (``oids`` keyword argument is renamed to ``oid_maps``)
253 * Minor decode speed improvements
254 * Much faster UTCTime/GeneralizedTime decoders
255 * Stricter UTCTime/GeneralizedTime DER encoding check: trailing zeroes
257 * Valid DER encoding of GeneralizedTime with microseconds: no trailing
264 * ObjectIdentifier has ``ber_encoded`` set to True, if non-normalized
266 * Preserve BER-related attributes during ``copy()``
272 * Added `COMPLI <https://github.com/YuryStrozhevsky/asn1-test-suite>`__
273 ASN.1:2008 test suite. PyDERASN passes it (except for REAL values),
274 but it is more strict sometimes and aimed to be compliant with X.690-201508
275 * Check for arc values normalization in ObjectIdentifier.
276 Forbid non-normalized in DER encoding
282 * ``ctx`` parameter can be safely used in .decode() and won't be muted
283 * PP nametuple contains reference to the ASN1Obj itself
284 * ``colonize_hex`` function useful for pretty printing
285 * Integer values are also pretty printed in hexadecimal form
291 * All errors are inherited from ASN1Error class
292 * NumericString/PrintableString has ``allowable_chars`` property holding
293 all allowed characters
299 * Fix NumericString: space is allowed character
300 * Strict PrintableString sanitizing
306 * Removed ``lenindef``, ``ber_encoded`` attributes from the Choice --
307 they must be taken from underlying value, as Choice does not have its
309 * Do not yield extra EOC PP for Any, having indefinite length encoding
310 and containing autodecoded DEFINED BY value
316 * ``bered`` attribute, meaning if object has BER-specific encoding, is
317 renamed to ``ber_encoded``
318 * ``bered`` attribute is replace with property showing if any of
319 underlying values are BER-encoded. If value has length indefinite
320 encoded explicit tag, value, if value contains BER-related encoding,
321 or if it contains other objects that are ``bered``, then it is ``bered``
327 * Default value is checked also for Sets, not for Sequences only
328 * **Incompatible** change: defaulted values in Sequence/Set are always
329 strictly checked, unless ``allow_default_values`` context option is
330 set. ``strict_default_existence`` option disappeared
331 * Strict Set/Set Of's values ordering check
337 * Additional encoding validness check: explicit tag must contain exactly
338 one object inside. Throw DecodeError otherwise
339 * ``allow_expl_oob`` context and command-line options allow skipping of
346 * DecodeError's decode paths are separated with ``:``, instead of ``.``,
347 because of colliding with dots in OIDs
348 * Ability to print element decode paths with ``--print-decode-path``
349 command line option (and corresponding keyword argument)
350 * Ability to print tree's branch specified with ``--decode-path-only``
356 * Fix possible uncaught TypeError in Py2 with zero bytes inside the value
357 * Fix SequenceOf/SetOf raising BoundsError instead of DecodeError
363 * Fix uncaught UTCTime/GeneralizedTime decode error when dealing with
364 non ASCII-encoded values
370 * Fix long-standing bug with explicitly tagged objects inside the
371 Choice. If Choice had explicitly tagged value, then its ``.tlvlen``
372 reports the size without taking value's explicit tag in advance
373 * Add ``.fulllen`` and ``.fulloffset`` properties for all objects
379 * SEQUENCE's values are printed with field's name. Previously there was
380 the following output::
382 AlgorithmIdentifier SEQUENCE[OBJECT IDENTIFIER 1.3.14.3.2.26, [UNIV 5] ANY 0500 OPTIONAL]
386 AlgorithmIdentifier SEQUENCE[algorithm: OBJECT IDENTIFIER 1.3.14.3.2.26; parameters: [UNIV 5] ANY 0500 OPTIONAL]
387 * Fixed EOC (Unicode character) repr printing issues under Python2
393 BER's EOC is explicitly shown during pprinting. Following notation::
395 15-2 [0,0,1576]-4 . content: [0] EXPLICIT [UNIV 16] ANY
399 15-2∞ [0,0,1576]∞ . content: [0] EXPLICIT [UNIV 16] ANY
401 1587 [1,1, 0] . content: BER EOC
402 1589 [1,1, 0] . content: EXPLICIT BER EOC
408 * BER decoding support
409 * BitString's ''H notation support
410 * ``termcolor`` package is included in the tarball
416 * Ability to set values during Sequence initialization
422 * Fix TagMismatch exception completeness during Choice and Set decoding.
423 Previously we will loose offset and decode_path information about
424 concrete TagMismatched entity
430 * Strict NumericString's value sanitation
431 * Invalid encoding in string types will raise ``DecodeError`` exception,
432 instead of ``Unicode*Error``
433 * Fixed DecodePathDefBy workability with Python 2.x
439 * Fix nasty BitString decoding bug: it could fail when data follows
440 encoded BitString value. There weren't any problems when BitString is
441 at the end of Sequence
447 * Slightly corrected colours, now visible on white background
453 * Fix bug related to DecodeError showing with DecodePathDefBy entities
454 * Respect ``NO_COLOR`` environment variable
460 * :py:func:`pyderasn.decode_path_defby` is replaced with
461 :py:class:`pyderasn.DecodePathDefBy`
462 * Ability to turn colourized terminal output by calling
463 ``pprint(..., with_colours=True)``. You will need
464 `termcolor package <https://pypi.org/project/termcolor/>`__
470 * Fixed invalid offset calculation when dealing with DEFINED BY objects
477 * BIT STRINGs can also be :ref:`DEFINED BY <definedby>`
478 * Decoding process can be governed with optional :ref:`ctx <ctx>`
479 keyword argument to ``decode()`` method
480 * :ref:`defines_by_path <defines_by_path_ctx>` option is now
481 :ref:`decode context <ctx>` option, not a keyword argument
482 * Ability to do ``strict validation``
483 of defaulted values met in sequence, raising an exception
489 Ability to skip specified number of bytes (``--skip``) in command line
496 * Generic decoder's schema and pretty printer
497 (:py:func:`pyderasn.generic_decoder`) can be used in libraries
498 * Ability to specify :ref:`defines_by_path <defines_by_path_ctx>`
499 during command line invocation
505 Ability to automatically decode :ref:`DEFINED BY <definedby>` fields
512 Removed ``__lt__``/``__eq__`` from base class, as pylint likes it.
518 Full rich comparison operators added.
525 Trivial README addition.