8 * CommonString's ``.memoryview()`` raises ValueError now for
9 friendliness with linters
15 * ``keep_memoryview`` context option appeared, respected by OctetString
16 and Any objects during DER decoding. If set, then their internal
17 values will keep memoryview reference instead of full bytes copy
18 * Correspondingly OctetString and Any have ``.memoryview()`` method
24 * ``.totzdatetime()`` appeared in UTCTime and GeneralizedTime,
25 explicitly setting UTC timezone information.
26 Optional ``dateutils.tz`` library is required for that
32 * Drop Python 2.7 support. No ``six`` dependency anymore
38 * Fix previous release's style breaking in ASN.1 browser
44 * Append offsets to tree elements in ASN.1 browser for ease of navigation
50 * Trivial documentation fixes
56 * Workability under Microsoft Windows OS should be restored: it has
57 different ``mmap`` constants and implementation, preventing
58 ``pyderasn`` importing
64 * **Incompatible** change: explicitly check that only naive datetime
65 objects are used for UTCTime and GeneralizedTime, raise an error
66 otherwise. Previously they silently ignored ``tzinfo``
72 * Strictly check that tag's long encoded form does not contain leading zero
74 * Strictly check that tag's long form is used in expected way for small values
81 * Proper strict alphabet validation of VisibleString
82 * VisibleString and IA5String also have ``allowable_chars`` property
83 * Fixed TeletexString, T61String use ``iso-8859-1`` encoding (instead of
84 ``ascii``), because they are 8-bit encodings
90 * Also print full TLVlen in ASN.1 browser
97 * Fix DEFINED BY pprinting when invoking as __main__ module
98 * Integer has ``tohex()`` for getting hexadecimal representation of its value
99 * ``hexdump()`` (``hexdump -C`` like output) and ``ascii_visualize()``
100 (visualize ASCII printable characters, like in ``hexdump -C``) pretty
101 printing functions appeared
102 * Experimental ASN.1 interactive terminal browser (``--browse`` and
103 ``pyderasn.browse``).
104 You will need `urwid package <http://urwid.org/>`__ to use it
111 * SEQUENCE/SET fully performs default value existence validation in
112 evgen mode, by the cost of DEFAULTed value full decoding. That should
113 not be the problem, as DEFAULTs are relatively small in practice. Now
114 evgen mode has the same DER validation strictness as an ordinary one
121 * Restored workability of some command line options
122 * 2-pass DER encoding mode with very little memory footprint
135 * Fixed invalid behaviour where SET OF allowed multiple objects with the
136 same tag to be successfully decoded
137 * Fixed possibly invalid SET DER encoding where objects were not sorted
138 by tag, but by encoded representation
139 * ``Any`` does not allow empty data value now. Now it checks if it has
141 * ``SetOf`` is not treated as ready, if no value was set and minimum
142 bounds are greater than zero
143 * ``Any`` allows an ordinary ``Obj`` storing, without its forceful
144 encoded representation storage. That is required for CER encoding
145 mode, where we do not know in advance what encoding will be used
146 * ``ObjectIdentifier`` stores values as C unsigned long integer,
147 forbidding storage of huge integers, that must not be a problem in
149 * Initial support for so called ``evgen_mode``: event generation mode,
150 where no in-memory objects storing happens, giving ability to process
151 ASN.1 data without fully parsing it first. ``python -m pyderasn`` has
152 ``--evgen`` mode switcher
153 * Useful ``agg_octet_string`` that is able to streamingly decode string
154 from events of ``evgen_mode``, allowing strings retrieving without
155 copying them to memory first
156 * Initial experimental CER encoding mode, allowing streaming encoding of
157 the data directly to some writeable object
158 * Ability to use mmap-ed memoryviews to skip files loading to memory
159 * Ability to use memoryview as an input for \*Strings. If they are
160 mmap-ed, then you can encode any quantities of data streamingly
161 without copying to memory
167 * Fixed workability under Python 3.5. Previously only 2.7 and 3.6
174 * Python ``int()``'s accepts even more various non-decimal characters
175 than expected. Make validation fully strict in UTCTime and
176 GeneralizedTime, without relying on ``int()``
182 * UTCTime and GeneralizedTime allowed values to have plus sign in them,
183 passing ``int()`` check successfully. Prohibit that incorrect behaviour
184 * UTCTime and GeneralizedTime BER decoding support
185 * Faster UTCTime and GeneralizedTime decoding, and slightly better
187 * Workability under Cython
188 * Explicitly Check that all ObjectIdentifier arcs are non-negative
194 * ``.copy()`` method removed: ``copy.copy()`` is preferred way to copy
196 * Copies made previously with ``.copy()`` lacked ``.defined`` field,
198 * All objects are friendly to ``pickle`` libraries
199 * PrintableString has ``allow_asterisk`` and ``allow_ampersand``
201 * ``.hexencode()``, ``.hexdecode()`` and ``.hexdecod()`` methods
202 appeared, working with hexadecimal encoded data
208 * Convenient ``.decod()`` method, that raises if tail is not empty
209 * Control characters (like newlines) of text fields in pprinted output
211 * Ability to allow asterisk and ampersand characters
212 (``allow_asterisk``, ``allow_ampersand`` kwargs) in PrintableString,
213 that unfortunately could be met in X.509 certificates
219 * PEP-396 compatible module's ``__version__``
225 * Do not shadow underlying DecodeError during decoding of optional
232 * Forbid any later GNU GPL version autousage (project's licence now is
234 * Fix ``defines_by_path`` context option usage example
240 * Fix fallbacked ``colored()`` function workability,
241 if no ``termcolor`` is installed
247 * Fix empty ``--oids`` workability
253 * Ability to specify multiple OID mappings for pprinted output
254 (``oids`` keyword argument is renamed to ``oid_maps``)
260 * Minor decode speed improvements
261 * Much faster UTCTime/GeneralizedTime decoders
262 * Stricter UTCTime/GeneralizedTime DER encoding check: trailing zeroes
264 * Valid DER encoding of GeneralizedTime with microseconds: no trailing
271 * ObjectIdentifier has ``ber_encoded`` set to True, if non-normalized
273 * Preserve BER-related attributes during ``copy()``
279 * Added `COMPLI <https://github.com/YuryStrozhevsky/asn1-test-suite>`__
280 ASN.1:2008 test suite. PyDERASN passes it (except for REAL values),
281 but it is more strict sometimes and aimed to be compliant with X.690-201508
282 * Check for arc values normalization in ObjectIdentifier.
283 Forbid non-normalized in DER encoding
289 * ``ctx`` parameter can be safely used in .decode() and won't be muted
290 * PP nametuple contains reference to the ASN1Obj itself
291 * ``colonize_hex`` function useful for pretty printing
292 * Integer values are also pretty printed in hexadecimal form
298 * All errors are inherited from ASN1Error class
299 * NumericString/PrintableString has ``allowable_chars`` property holding
300 all allowed characters
306 * Fix NumericString: space is allowed character
307 * Strict PrintableString sanitizing
313 * Removed ``lenindef``, ``ber_encoded`` attributes from the Choice --
314 they must be taken from underlying value, as Choice does not have its
316 * Do not yield extra EOC PP for Any, having indefinite length encoding
317 and containing autodecoded DEFINED BY value
323 * ``bered`` attribute, meaning if object has BER-specific encoding, is
324 renamed to ``ber_encoded``
325 * ``bered`` attribute is replace with property showing if any of
326 underlying values are BER-encoded. If value has length indefinite
327 encoded explicit tag, value, if value contains BER-related encoding,
328 or if it contains other objects that are ``bered``, then it is ``bered``
334 * Default value is checked also for Sets, not for Sequences only
335 * **Incompatible** change: defaulted values in Sequence/Set are always
336 strictly checked, unless ``allow_default_values`` context option is
337 set. ``strict_default_existence`` option disappeared
338 * Strict Set/Set Of's values ordering check
344 * Additional encoding validness check: explicit tag must contain exactly
345 one object inside. Throw DecodeError otherwise
346 * ``allow_expl_oob`` context and command-line options allow skipping of
353 * DecodeError's decode paths are separated with ``:``, instead of ``.``,
354 because of colliding with dots in OIDs
355 * Ability to print element decode paths with ``--print-decode-path``
356 command line option (and corresponding keyword argument)
357 * Ability to print tree's branch specified with ``--decode-path-only``
363 * Fix possible uncaught TypeError in Py2 with zero bytes inside the value
364 * Fix SequenceOf/SetOf raising BoundsError instead of DecodeError
370 * Fix uncaught UTCTime/GeneralizedTime decode error when dealing with
371 non ASCII-encoded values
377 * Fix long-standing bug with explicitly tagged objects inside the
378 Choice. If Choice had explicitly tagged value, then its ``.tlvlen``
379 reports the size without taking value's explicit tag in advance
380 * Add ``.fulllen`` and ``.fulloffset`` properties for all objects
386 * SEQUENCE's values are printed with field's name. Previously there was
387 the following output::
389 AlgorithmIdentifier SEQUENCE[OBJECT IDENTIFIER 1.3.14.3.2.26, [UNIV 5] ANY 0500 OPTIONAL]
393 AlgorithmIdentifier SEQUENCE[algorithm: OBJECT IDENTIFIER 1.3.14.3.2.26; parameters: [UNIV 5] ANY 0500 OPTIONAL]
394 * Fixed EOC (Unicode character) repr printing issues under Python2
400 BER's EOC is explicitly shown during pprinting. Following notation::
402 15-2 [0,0,1576]-4 . content: [0] EXPLICIT [UNIV 16] ANY
406 15-2∞ [0,0,1576]∞ . content: [0] EXPLICIT [UNIV 16] ANY
408 1587 [1,1, 0] . content: BER EOC
409 1589 [1,1, 0] . content: EXPLICIT BER EOC
415 * BER decoding support
416 * BitString's ''H notation support
417 * ``termcolor`` package is included in the tarball
423 * Ability to set values during Sequence initialization
429 * Fix TagMismatch exception completeness during Choice and Set decoding.
430 Previously we will loose offset and decode_path information about
431 concrete TagMismatched entity
437 * Strict NumericString's value sanitation
438 * Invalid encoding in string types will raise ``DecodeError`` exception,
439 instead of ``Unicode*Error``
440 * Fixed DecodePathDefBy workability with Python 2.x
446 * Fix nasty BitString decoding bug: it could fail when data follows
447 encoded BitString value. There weren't any problems when BitString is
448 at the end of Sequence
454 * Slightly corrected colours, now visible on white background
460 * Fix bug related to DecodeError showing with DecodePathDefBy entities
461 * Respect ``NO_COLOR`` environment variable
467 * :py:func:`pyderasn.decode_path_defby` is replaced with
468 :py:class:`pyderasn.DecodePathDefBy`
469 * Ability to turn colourized terminal output by calling
470 ``pprint(..., with_colours=True)``. You will need
471 `termcolor package <https://pypi.org/project/termcolor/>`__
477 * Fixed invalid offset calculation when dealing with DEFINED BY objects
484 * BIT STRINGs can also be :ref:`DEFINED BY <definedby>`
485 * Decoding process can be governed with optional :ref:`ctx <ctx>`
486 keyword argument to ``decode()`` method
487 * :ref:`defines_by_path <defines_by_path_ctx>` option is now
488 :ref:`decode context <ctx>` option, not a keyword argument
489 * Ability to do ``strict validation``
490 of defaulted values met in sequence, raising an exception
496 Ability to skip specified number of bytes (``--skip``) in command line
503 * Generic decoder's schema and pretty printer
504 (:py:func:`pyderasn.generic_decoder`) can be used in libraries
505 * Ability to specify :ref:`defines_by_path <defines_by_path_ctx>`
506 during command line invocation
512 Ability to automatically decode :ref:`DEFINED BY <definedby>` fields
519 Removed ``__lt__``/``__eq__`` from base class, as pylint likes it.
525 Full rich comparison operators added.
532 Trivial README addition.