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