9 * SEQUENCE/SET fully performs default value existence validation in
10 evgen mode, by the cost of DEFAULTed value full decoding. That should
11 not be the problem, as DEFAULTs are relatively small in practice. Now
12 evgen mode has the same DER validation strictness as an ordinary one
19 * Restored workability of some command line options
20 * 2-pass DER encoding mode with very little memory footprint
33 * Fixed invalid behaviour where SET OF allowed multiple objects with the
34 same tag to be successfully decoded
35 * Fixed possibly invalid SET DER encoding where objects were not sorted
36 by tag, but by encoded representation
37 * ``Any`` does not allow empty data value now. Now it checks if it has
39 * ``SetOf`` is not treated as ready, if no value was set and minimum
40 bounds are greater than zero
41 * ``Any`` allows an ordinary ``Obj`` storing, without its forceful
42 encoded representation storage. That is required for CER encoding
43 mode, where we do not know in advance what encoding will be used
44 * ``ObjectIdentifier`` stores values as C unsigned long integer,
45 forbidding storage of huge integers, that must not be a problem in
47 * Initial support for so called ``evgen_mode``: event generation mode,
48 where no in-memory objects storing happens, giving ability to process
49 ASN.1 data without fully parsing it first. ``python -m pyderasn`` has
50 ``--evgen`` mode switcher
51 * Useful ``agg_octet_string`` that is able to streamingly decode string
52 from events of ``evgen_mode``, allowing strings retrieving without
53 copying them to memory first
54 * Initial experimental CER encoding mode, allowing streaming encoding of
55 the data directly to some writeable object
56 * Ability to use mmap-ed memoryviews to skip files loading to memory
57 * Ability to use memoryview as an input for \*Strings. If they are
58 mmap-ed, then you can encode any quantities of data streamingly
59 without copying to memory
65 * Fixed workability under Python 3.5. Previously only 2.7 and 3.6
72 * Python ``int()``'s accepts even more various non-decimal characters
73 than expected. Make validation fully strict in UTCTime and
74 GeneralizedTime, without relying on ``int()``
80 * UTCTime and GeneralizedTime allowed values to have plus sign in them,
81 passing int() check successfully. Prohibit that incorrect behaviour
82 * UTCTime and GeneralizedTime BER decoding support
83 * Faster UTCTime and GeneralizedTime decoding, and slightly better
85 * Workability under Cython
86 * Explicitly Check that all ObjectIdentifier arcs are non-negative
92 * ``.copy()`` method removed: ``copy.copy()`` is preferred way to copy
94 * Copies made previously with ``.copy()`` lacked ``.defined`` field,
96 * All objects are friendly to ``pickle`` libraries
97 * PrintableString has ``allow_asterisk`` and ``allow_ampersand``
99 * ``.hexencode()``, ``.hexdecode()`` and ``.hexdecod()`` methods
100 appeared, working with hexadecimal encoded data
106 * Convenient ``.decod()`` method, that raises if tail is not empty
107 * Control characters (like newlines) of text fields in pprinted output
109 * Ability to allow asterisk and ampersand characters
110 (``allow_asterisk``, ``allow_ampersand`` kwargs) in PrintableString,
111 that unfortunately could be met in X.509 certificates
117 * PEP-396 compatible module's ``__version__``
123 * Do not shadow underlying DecodeError during decoding of optional
130 * Forbid any later GNU GPL version autousage (project's licence now is
132 * Fix ``defines_by_path`` context option usage example
138 * Fix fallbacked ``colored()`` function workability,
139 if no ``termcolor`` is installed
145 * Fix empty ``--oids`` workability
151 * Ability to specify multiple OID mappings for pprinted output
152 (``oids`` keyword argument is renamed to ``oid_maps``)
158 * Minor decode speed improvements
159 * Much faster UTCTime/GeneralizedTime decoders
160 * Stricter UTCTime/GeneralizedTime DER encoding check: trailing zeroes
162 * Valid DER encoding of GeneralizedTime with microseconds: no trailing
169 * ObjectIdentifier has ``ber_encoded`` set to True, if non-normalized
171 * Preserve BER-related attributes during ``copy()``
177 * Added `COMPLI <https://github.com/YuryStrozhevsky/asn1-test-suite>`__
178 ASN.1:2008 test suite. PyDERASN passes it (except for REAL values),
179 but it is more strict sometimes and aimed to be compliant with X.690-201508
180 * Check for arc values normalization in ObjectIdentifier.
181 Forbid non-normalized in DER encoding
187 * ``ctx`` parameter can be safely used in .decode() and won't be muted
188 * PP nametuple contains reference to the ASN1Obj itself
189 * ``colonize_hex`` function useful for pretty printing
190 * Integer values are also pretty printed in hexadecimal form
196 * All errors are inherited from ASN1Error class
197 * NumericString/PrintableString has ``allowable_chars`` property holding
198 all allowed characters
204 * Fix NumericString: space is allowed character
205 * Strict PrintableString sanitizing
211 * Removed ``lenindef``, ``ber_encoded`` attributes from the Choice --
212 they must be taken from underlying value, as Choice does not have its
214 * Do not yield extra EOC PP for Any, having indefinite length encoding
215 and containing autodecoded DEFINED BY value
221 * ``bered`` attribute, meaning if object has BER-specific encoding, is
222 renamed to ``ber_encoded``
223 * ``bered`` attribute is replace with property showing if any of
224 underlying values are BER-encoded. If value has length indefinite
225 encoded explicit tag, value, if value contains BER-related encoding,
226 or if it contains other objects that are ``bered``, then it is ``bered``
232 * Default value is checked also for Sets, not for Sequences only
233 * **Incompatible** change: defaulted values in Sequence/Set are always
234 strictly checked, unless ``allow_default_values`` context option is
235 set. ``strict_default_existence`` option disappeared
236 * Strict Set/Set Of's values ordering check
242 * Additional encoding validness check: explicit tag must contain exactly
243 one object inside. Throw DecodeError otherwise
244 * ``allow_expl_oob`` context and command-line options allow skipping of
251 * DecodeError's decode paths are separated with ``:``, instead of ``.``,
252 because of colliding with dots in OIDs
253 * Ability to print element decode paths with ``--print-decode-path``
254 command line option (and corresponding keyword argument)
255 * Ability to print tree's branch specified with ``--decode-path-only``
261 * Fix possible uncaught TypeError in Py2 with zero bytes inside the value
262 * Fix SequenceOf/SetOf raising BoundsError instead of DecodeError
268 * Fix uncaught UTCTime/GeneralizedTime decode error when dealing with
269 non ASCII-encoded values
275 * Fix long-standing bug with explicitly tagged objects inside the
276 Choice. If Choice had explicitly tagged value, then its ``.tlvlen``
277 reports the size without taking value's explicit tag in advance
278 * Add ``.fulllen`` and ``.fulloffset`` properties for all objects
284 * SEQUENCE's values are printed with field's name. Previously there was
285 the following output::
287 AlgorithmIdentifier SEQUENCE[OBJECT IDENTIFIER 1.3.14.3.2.26, [UNIV 5] ANY 0500 OPTIONAL]
291 AlgorithmIdentifier SEQUENCE[algorithm: OBJECT IDENTIFIER 1.3.14.3.2.26; parameters: [UNIV 5] ANY 0500 OPTIONAL]
292 * Fixed EOC (Unicode character) repr printing issues under Python2
298 BER's EOC is explicitly shown during pprinting. Following notation::
300 15-2 [0,0,1576]-4 . content: [0] EXPLICIT [UNIV 16] ANY
304 15-2∞ [0,0,1576]∞ . content: [0] EXPLICIT [UNIV 16] ANY
306 1587 [1,1, 0] . content: BER EOC
307 1589 [1,1, 0] . content: EXPLICIT BER EOC
313 * BER decoding support
314 * BitString's ''H notation support
315 * ``termcolor`` package is included in the tarball
321 * Ability to set values during Sequence initialization
327 * Fix TagMismatch exception completeness during Choice and Set decoding.
328 Previously we will loose offset and decode_path information about
329 concrete TagMismatched entity
335 * Strict NumericString's value sanitation
336 * Invalid encoding in string types will raise ``DecodeError`` exception,
337 instead of ``Unicode*Error``
338 * Fixed DecodePathDefBy workability with Python 2.x
344 * Fix nasty BitString decoding bug: it could fail when data follows
345 encoded BitString value. There weren't any problems when BitString is
346 at the end of Sequence
352 * Slightly corrected colours, now visible on white background
358 * Fix bug related to DecodeError showing with DecodePathDefBy entities
359 * Respect ``NO_COLOR`` environment variable
365 * :py:func:`pyderasn.decode_path_defby` is replaced with
366 :py:class:`pyderasn.DecodePathDefBy`
367 * Ability to turn colourized terminal output by calling
368 ``pprint(..., with_colours=True)``. You will need
369 `termcolor package <https://pypi.org/project/termcolor/>`__
375 * Fixed invalid offset calculation when dealing with DEFINED BY objects
382 * BIT STRINGs can also be :ref:`DEFINED BY <definedby>`
383 * Decoding process can be governed with optional :ref:`ctx <ctx>`
384 keyword argument to ``decode()`` method
385 * :ref:`defines_by_path <defines_by_path_ctx>` option is now
386 :ref:`decode context <ctx>` option, not a keyword argument
387 * Ability to do ``strict validation``
388 of defaulted values met in sequence, raising an exception
394 Ability to skip specified number of bytes (``--skip``) in command line
401 * Generic decoder's schema and pretty printer
402 (:py:func:`pyderasn.generic_decoder`) can be used in libraries
403 * Ability to specify :ref:`defines_by_path <defines_by_path_ctx>`
404 during command line invocation
410 Ability to automatically decode :ref:`DEFINED BY <definedby>` fields
417 Removed ``__lt__``/``__eq__`` from base class, as pylint likes it.
423 Full rich comparison operators added.
430 Trivial README addition.