Properly raise version
[pyderasn.git] / doc / news.rst
1 News
2 ====
3
4 .. _release9.1:
5
6 9.1
7 ---
8 * ``.totzdatetime()`` appeared in UTCTime and GeneralizedTime,
9   explicitly setting UTC timezone information.
10   Optional ``dateutils.tz`` library is required for that
11
12 .. _release9.0:
13
14 9.0
15 ---
16 * Drop Python 2.7 support. No ``six`` dependency anymore
17
18 .. _release8.4:
19
20 8.4
21 ---
22 * Fix previous release's style breaking in ASN.1 browser
23
24 .. _release8.3:
25
26 8.3
27 ---
28 * Append offsets to tree elements in ASN.1 browser for ease of navigation
29
30 .. _release8.2:
31
32 8.2
33 ---
34 * Trivial documentation fixes
35
36 .. _release8.1:
37
38 8.1
39 ---
40 * Workability under Microsoft Windows OS should be restored: it has
41   different ``mmap`` constants and implementation, preventing
42   ``pyderasn`` importing
43
44 .. _release8.0:
45
46 8.0
47 ---
48 * **Incompatible** change: explicitly check that only naive datetime
49   objects are used for UTCTime and GeneralizedTime, raise an error
50   otherwise. Previously they silently ignored ``tzinfo``
51
52 .. _release7.7:
53
54 7.7
55 ---
56 * Strictly check that tag's long encoded form does not contain leading zero
57   (X.690 8.1.2.4.2 (c))
58 * Strictly check that tag's long form is used in expected way for small values
59   (X.690 8.1.2.2)
60
61 .. _release7.6:
62
63 7.6
64 ---
65 * Proper strict alphabet validation of VisibleString
66 * VisibleString and IA5String also have ``allowable_chars`` property
67 * Fixed TeletexString, T61String use ``iso-8859-1`` encoding (instead of
68   ``ascii``), because they are 8-bit encodings
69
70 .. _release7.5:
71
72 7.5
73 ---
74 * Also print full TLVlen in ASN.1 browser
75
76 .. _release7.4:
77
78 7.4
79 ---
80
81 * Fix DEFINED BY pprinting when invoking as __main__ module
82 * Integer has ``tohex()`` for getting hexadecimal representation of its value
83 * ``hexdump()`` (``hexdump -C`` like output) and ``ascii_visualize()``
84   (visualize ASCII printable characters, like in ``hexdump -C``) pretty
85   printing functions appeared
86 * Experimental ASN.1 interactive terminal browser (``--browse`` and
87   ``pyderasn.browse``).
88   You will need `urwid package <http://urwid.org/>`__ to use it
89
90 .. _release7.3:
91
92 7.3
93 ---
94
95 * SEQUENCE/SET fully performs default value existence validation in
96   evgen mode, by the cost of DEFAULTed value full decoding. That should
97   not be the problem, as DEFAULTs are relatively small in practice. Now
98   evgen mode has the same DER validation strictness as an ordinary one
99
100 .. _release7.2:
101
102 7.2
103 ---
104
105 * Restored workability of some command line options
106 * 2-pass DER encoding mode with very little memory footprint
107
108 .. _release7.1:
109
110 7.1
111 ---
112
113 * README updating
114
115 .. _release7.0:
116
117 7.0
118 ---
119 * Fixed invalid behaviour where SET OF allowed multiple objects with the
120   same tag to be successfully decoded
121 * Fixed possibly invalid SET DER encoding where objects were not sorted
122   by tag, but by encoded representation
123 * ``Any`` does not allow empty data value now. Now it checks if it has
124   valid ASN.1 tag
125 * ``SetOf`` is not treated as ready, if no value was set and minimum
126   bounds are greater than zero
127 * ``Any`` allows an ordinary ``Obj`` storing, without its forceful
128   encoded representation storage. That is required for CER encoding
129   mode, where we do not know in advance what encoding will be used
130 * ``ObjectIdentifier`` stores values as C unsigned long integer,
131   forbidding storage of huge integers, that must not be a problem in
132   practice
133 * Initial support for so called ``evgen_mode``: event generation mode,
134   where no in-memory objects storing happens, giving ability to process
135   ASN.1 data without fully parsing it first. ``python -m pyderasn`` has
136   ``--evgen`` mode switcher
137 * Useful ``agg_octet_string`` that is able to streamingly decode string
138   from events of ``evgen_mode``, allowing strings retrieving without
139   copying them to memory first
140 * Initial experimental CER encoding mode, allowing streaming encoding of
141   the data directly to some writeable object
142 * Ability to use mmap-ed memoryviews to skip files loading to memory
143 * Ability to use memoryview as an input for \*Strings. If they are
144   mmap-ed, then you can encode any quantities of data streamingly
145   without copying to memory
146
147 .. _release6.3:
148
149 6.3
150 ---
151 * Fixed workability under Python 3.5. Previously only 2.7 and 3.6
152   versions were tested
153
154 .. _release6.2:
155
156 6.2
157 ---
158 * Python ``int()``'s accepts even more various non-decimal characters
159   than expected. Make validation fully strict in UTCTime and
160   GeneralizedTime, without relying on ``int()``
161
162 .. _release6.1:
163
164 6.1
165 ---
166 * UTCTime and GeneralizedTime allowed values to have plus sign in them,
167   passing ``int()`` check successfully. Prohibit that incorrect behaviour
168 * UTCTime and GeneralizedTime BER decoding support
169 * Faster UTCTime and GeneralizedTime decoding, and slightly better
170   overall performance
171 * Workability under Cython
172 * Explicitly Check that all ObjectIdentifier arcs are non-negative
173
174 .. _release6.0:
175
176 6.0
177 ---
178 * ``.copy()`` method removed: ``copy.copy()`` is preferred way to copy
179   objects now
180 * Copies made previously with ``.copy()`` lacked ``.defined`` field,
181   now they are not
182 * All objects are friendly to ``pickle`` libraries
183 * PrintableString has ``allow_asterisk`` and ``allow_ampersand``
184   properties
185 * ``.hexencode()``, ``.hexdecode()`` and ``.hexdecod()`` methods
186   appeared, working with hexadecimal encoded data
187
188 .. _release5.6:
189
190 5.6
191 ---
192 * Convenient ``.decod()`` method, that raises if tail is not empty
193 * Control characters (like newlines) of text fields in pprinted output
194   are escaped
195 * Ability to allow asterisk and ampersand characters
196   (``allow_asterisk``, ``allow_ampersand`` kwargs) in PrintableString,
197   that unfortunately could be met in X.509 certificates
198
199 .. _release5.5:
200
201 5.5
202 ---
203 * PEP-396 compatible module's ``__version__``
204
205 .. _release5.4:
206
207 5.4
208 ---
209 * Do not shadow underlying DecodeError during decoding of optional
210   sequence's field
211
212 .. _release5.3:
213
214 5.3
215 ---
216 * Forbid any later GNU GPL version autousage (project's licence now is
217   GNU LGPLv3 only)
218 * Fix ``defines_by_path`` context option usage example
219
220 .. _release5.2:
221
222 5.2
223 ---
224 * Fix fallbacked ``colored()`` function workability,
225   if no ``termcolor`` is installed
226
227 .. _release5.1:
228
229 5.1
230 ---
231 * Fix empty ``--oids`` workability
232
233 .. _release5.0:
234
235 5.0
236 ---
237 * Ability to specify multiple OID mappings for pprinted output
238   (``oids`` keyword argument is renamed to ``oid_maps``)
239
240 .. _release4.9:
241
242 4.9
243 ---
244 * Minor decode speed improvements
245 * Much faster UTCTime/GeneralizedTime decoders
246 * Stricter UTCTime/GeneralizedTime DER encoding check: trailing zeroes
247   are forbidden
248 * Valid DER encoding of GeneralizedTime with microseconds: no trailing
249   zeroes appended
250
251 .. _release4.7:
252
253 4.7
254 ---
255 * ObjectIdentifier has ``ber_encoded`` set to True, if non-normalized
256   arc encoding is met
257 * Preserve BER-related attributes during ``copy()``
258
259 .. _release4.6:
260
261 4.6
262 ---
263 * Added `COMPLI <https://github.com/YuryStrozhevsky/asn1-test-suite>`__
264   ASN.1:2008 test suite. PyDERASN passes it (except for REAL values),
265   but it is more strict sometimes and aimed to be compliant with X.690-201508
266 * Check for arc values normalization in ObjectIdentifier.
267   Forbid non-normalized in DER encoding
268
269 .. _release4.5:
270
271 4.5
272 ---
273 * ``ctx`` parameter can be safely used in .decode() and won't be muted
274 * PP nametuple contains reference to the ASN1Obj itself
275 * ``colonize_hex`` function useful for pretty printing
276 * Integer values are also pretty printed in hexadecimal form
277
278 .. _release4.4:
279
280 4.4
281 ---
282 * All errors are inherited from ASN1Error class
283 * NumericString/PrintableString has ``allowable_chars`` property holding
284   all allowed characters
285
286 .. _release4.3:
287
288 4.3
289 ---
290 * Fix NumericString: space is allowed character
291 * Strict PrintableString sanitizing
292
293 .. _release4.2:
294
295 4.2
296 ---
297 * Removed ``lenindef``, ``ber_encoded`` attributes from the Choice --
298   they must be taken from underlying value, as Choice does not have its
299   own encoding
300 * Do not yield extra EOC PP for Any, having indefinite length encoding
301   and containing autodecoded DEFINED BY value
302
303 .. _release4.1:
304
305 4.1
306 ---
307 * ``bered`` attribute, meaning if object has BER-specific encoding, is
308   renamed to ``ber_encoded``
309 * ``bered`` attribute is replace with property showing if any of
310   underlying values are BER-encoded. If value has length indefinite
311   encoded explicit tag, value, if value contains BER-related encoding,
312   or if it contains other objects that are ``bered``, then it is ``bered``
313
314 .. _release4.0:
315
316 4.0
317 ---
318 * Default value is checked also for Sets, not for Sequences only
319 * **Incompatible** change: defaulted values in Sequence/Set are always
320   strictly checked, unless ``allow_default_values`` context option is
321   set. ``strict_default_existence`` option disappeared
322 * Strict Set/Set Of's values ordering check
323
324 .. _release3.14:
325
326 3.14
327 ----
328 * Additional encoding validness check: explicit tag must contain exactly
329   one object inside. Throw DecodeError otherwise
330 * ``allow_expl_oob`` context and command-line options allow skipping of
331   that check
332
333 .. _release3.13:
334
335 3.13
336 ----
337 * DecodeError's decode paths are separated with ``:``, instead of ``.``,
338   because of colliding with dots in OIDs
339 * Ability to print element decode paths with ``--print-decode-path``
340   command line option (and corresponding keyword argument)
341 * Ability to print tree's branch specified with ``--decode-path-only``
342
343 .. _release3.12:
344
345 3.12
346 ----
347 * Fix possible uncaught TypeError in Py2 with zero bytes inside the value
348 * Fix SequenceOf/SetOf raising BoundsError instead of DecodeError
349
350 .. _release3.11:
351
352 3.11
353 ----
354 * Fix uncaught UTCTime/GeneralizedTime decode error when dealing with
355   non ASCII-encoded values
356
357 .. _release3.10:
358
359 3.10
360 ----
361 * Fix long-standing bug with explicitly tagged objects inside the
362   Choice. If Choice had explicitly tagged value, then its ``.tlvlen``
363   reports the size without taking value's explicit tag in advance
364 * Add ``.fulllen`` and ``.fulloffset`` properties for all objects
365
366 .. _release3.9:
367
368 3.9
369 ---
370 * SEQUENCE's values are printed with field's name. Previously there was
371   the following output::
372
373     AlgorithmIdentifier SEQUENCE[OBJECT IDENTIFIER 1.3.14.3.2.26, [UNIV 5] ANY 0500 OPTIONAL]
374
375   now it is::
376
377     AlgorithmIdentifier SEQUENCE[algorithm: OBJECT IDENTIFIER 1.3.14.3.2.26; parameters: [UNIV 5] ANY 0500 OPTIONAL]
378 * Fixed EOC (Unicode character) repr printing issues under Python2
379
380 .. _release3.8:
381
382 3.8
383 ---
384 BER's EOC is explicitly shown during pprinting. Following notation::
385
386       15-2 [0,0,1576]-4  . content: [0] EXPLICIT [UNIV 16] ANY
387
388 is replaced with::
389
390       15-2∞ [0,0,1576]∞  . content: [0] EXPLICIT [UNIV 16] ANY
391     [...]
392     1587    [1,1,   0]   . content:  BER EOC
393     1589    [1,1,   0]   . content: EXPLICIT BER EOC
394
395 .. _release3.7:
396
397 3.7
398 ---
399 * BER decoding support
400 * BitString's ''H notation support
401 * ``termcolor`` package is included in the tarball
402
403 .. _release3.6:
404
405 3.6
406 ---
407 * Ability to set values during Sequence initialization
408
409 .. _release3.5:
410
411 3.5
412 ---
413 * Fix TagMismatch exception completeness during Choice and Set decoding.
414   Previously we will loose offset and decode_path information about
415   concrete TagMismatched entity
416
417 .. _release3.4:
418
419 3.4
420 ---
421 * Strict NumericString's value sanitation
422 * Invalid encoding in string types will raise ``DecodeError`` exception,
423   instead of ``Unicode*Error``
424 * Fixed DecodePathDefBy workability with Python 2.x
425
426 .. _release3.3:
427
428 3.3
429 ---
430 * Fix nasty BitString decoding bug: it could fail when data follows
431   encoded BitString value. There weren't any problems when BitString is
432   at the end of Sequence
433
434 .. _release3.2:
435
436 3.2
437 ---
438 * Slightly corrected colours, now visible on white background
439
440 .. _release3.1:
441
442 3.1
443 ---
444 * Fix bug related to DecodeError showing with DecodePathDefBy entities
445 * Respect ``NO_COLOR`` environment variable
446
447 .. _release3.0:
448
449 3.0
450 ---
451 * :py:func:`pyderasn.decode_path_defby` is replaced with
452   :py:class:`pyderasn.DecodePathDefBy`
453 * Ability to turn colourized terminal output by calling
454   ``pprint(..., with_colours=True)``. You will need
455   `termcolor package <https://pypi.org/project/termcolor/>`__
456
457 .. _release2.1:
458
459 2.1
460 ---
461 * Fixed invalid offset calculation when dealing with DEFINED BY objects
462   having explicit tags
463
464 .. _release2.0:
465
466 2.0
467 ---
468 * BIT STRINGs can also be :ref:`DEFINED BY <definedby>`
469 * Decoding process can be governed with optional :ref:`ctx <ctx>`
470   keyword argument to ``decode()`` method
471 * :ref:`defines_by_path <defines_by_path_ctx>` option is now
472   :ref:`decode context <ctx>` option, not a keyword argument
473 * Ability to do ``strict validation``
474   of defaulted values met in sequence, raising an exception
475
476 .. _release1.6:
477
478 1.6
479 ---
480 Ability to skip specified number of bytes (``--skip``) in command line
481 utility.
482
483 .. _release1.5:
484
485 1.5
486 ---
487 * Generic decoder's schema and pretty printer
488   (:py:func:`pyderasn.generic_decoder`) can be used in libraries
489 * Ability to specify :ref:`defines_by_path <defines_by_path_ctx>`
490   during command line invocation
491
492 .. _release1.4:
493
494 1.4
495 ---
496 Ability to automatically decode :ref:`DEFINED BY <definedby>` fields
497 inside SEQUENCEs.
498
499 .. _release1.3:
500
501 1.3
502 ---
503 Removed ``__lt__``/``__eq__`` from base class, as pylint likes it.
504
505 .. _release1.2:
506
507 1.2
508 ---
509 Full rich comparison operators added.
510
511
512 .. _release1.1:
513
514 1.1
515 ---
516 Trivial README addition.
517
518 .. _release1.0:
519
520 1.0
521 ---
522 Initial release.