Trivial alignment
[pyderasn.git] / doc / news.rst
1 News
2 ====
3
4 .. _release9.3:
5
6 9.3
7 ---
8 * CommonString's ``.memoryview()`` raises ValueError now for
9   friendliness with linters
10
11 .. _release9.2:
12
13 9.2
14 ---
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
19
20 .. _release9.1:
21
22 9.1
23 ---
24 * ``.totzdatetime()`` appeared in UTCTime and GeneralizedTime,
25   explicitly setting UTC timezone information.
26   Optional ``dateutils.tz`` library is required for that
27
28 .. _release9.0:
29
30 9.0
31 ---
32 * Drop Python 2.7 support. No ``six`` dependency anymore
33
34 .. _release8.4:
35
36 8.4
37 ---
38 * Fix previous release's style breaking in ASN.1 browser
39
40 .. _release8.3:
41
42 8.3
43 ---
44 * Append offsets to tree elements in ASN.1 browser for ease of navigation
45
46 .. _release8.2:
47
48 8.2
49 ---
50 * Trivial documentation fixes
51
52 .. _release8.1:
53
54 8.1
55 ---
56 * Workability under Microsoft Windows OS should be restored: it has
57   different ``mmap`` constants and implementation, preventing
58   ``pyderasn`` importing
59
60 .. _release8.0:
61
62 8.0
63 ---
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``
67
68 .. _release7.7:
69
70 7.7
71 ---
72 * Strictly check that tag's long encoded form does not contain leading zero
73   (X.690 8.1.2.4.2 (c))
74 * Strictly check that tag's long form is used in expected way for small values
75   (X.690 8.1.2.2)
76
77 .. _release7.6:
78
79 7.6
80 ---
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
85
86 .. _release7.5:
87
88 7.5
89 ---
90 * Also print full TLVlen in ASN.1 browser
91
92 .. _release7.4:
93
94 7.4
95 ---
96
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
105
106 .. _release7.3:
107
108 7.3
109 ---
110
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
115
116 .. _release7.2:
117
118 7.2
119 ---
120
121 * Restored workability of some command line options
122 * 2-pass DER encoding mode with very little memory footprint
123
124 .. _release7.1:
125
126 7.1
127 ---
128
129 * README updating
130
131 .. _release7.0:
132
133 7.0
134 ---
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
140   valid ASN.1 tag
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
148   practice
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
162
163 .. _release6.3:
164
165 6.3
166 ---
167 * Fixed workability under Python 3.5. Previously only 2.7 and 3.6
168   versions were tested
169
170 .. _release6.2:
171
172 6.2
173 ---
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()``
177
178 .. _release6.1:
179
180 6.1
181 ---
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
186   overall performance
187 * Workability under Cython
188 * Explicitly Check that all ObjectIdentifier arcs are non-negative
189
190 .. _release6.0:
191
192 6.0
193 ---
194 * ``.copy()`` method removed: ``copy.copy()`` is preferred way to copy
195   objects now
196 * Copies made previously with ``.copy()`` lacked ``.defined`` field,
197   now they are not
198 * All objects are friendly to ``pickle`` libraries
199 * PrintableString has ``allow_asterisk`` and ``allow_ampersand``
200   properties
201 * ``.hexencode()``, ``.hexdecode()`` and ``.hexdecod()`` methods
202   appeared, working with hexadecimal encoded data
203
204 .. _release5.6:
205
206 5.6
207 ---
208 * Convenient ``.decod()`` method, that raises if tail is not empty
209 * Control characters (like newlines) of text fields in pprinted output
210   are escaped
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
214
215 .. _release5.5:
216
217 5.5
218 ---
219 * PEP-396 compatible module's ``__version__``
220
221 .. _release5.4:
222
223 5.4
224 ---
225 * Do not shadow underlying DecodeError during decoding of optional
226   sequence's field
227
228 .. _release5.3:
229
230 5.3
231 ---
232 * Forbid any later GNU GPL version autousage (project's licence now is
233   GNU LGPLv3 only)
234 * Fix ``defines_by_path`` context option usage example
235
236 .. _release5.2:
237
238 5.2
239 ---
240 * Fix fallbacked ``colored()`` function workability,
241   if no ``termcolor`` is installed
242
243 .. _release5.1:
244
245 5.1
246 ---
247 * Fix empty ``--oids`` workability
248
249 .. _release5.0:
250
251 5.0
252 ---
253 * Ability to specify multiple OID mappings for pprinted output
254   (``oids`` keyword argument is renamed to ``oid_maps``)
255
256 .. _release4.9:
257
258 4.9
259 ---
260 * Minor decode speed improvements
261 * Much faster UTCTime/GeneralizedTime decoders
262 * Stricter UTCTime/GeneralizedTime DER encoding check: trailing zeroes
263   are forbidden
264 * Valid DER encoding of GeneralizedTime with microseconds: no trailing
265   zeroes appended
266
267 .. _release4.7:
268
269 4.7
270 ---
271 * ObjectIdentifier has ``ber_encoded`` set to True, if non-normalized
272   arc encoding is met
273 * Preserve BER-related attributes during ``copy()``
274
275 .. _release4.6:
276
277 4.6
278 ---
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
284
285 .. _release4.5:
286
287 4.5
288 ---
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
293
294 .. _release4.4:
295
296 4.4
297 ---
298 * All errors are inherited from ASN1Error class
299 * NumericString/PrintableString has ``allowable_chars`` property holding
300   all allowed characters
301
302 .. _release4.3:
303
304 4.3
305 ---
306 * Fix NumericString: space is allowed character
307 * Strict PrintableString sanitizing
308
309 .. _release4.2:
310
311 4.2
312 ---
313 * Removed ``lenindef``, ``ber_encoded`` attributes from the Choice --
314   they must be taken from underlying value, as Choice does not have its
315   own encoding
316 * Do not yield extra EOC PP for Any, having indefinite length encoding
317   and containing autodecoded DEFINED BY value
318
319 .. _release4.1:
320
321 4.1
322 ---
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``
329
330 .. _release4.0:
331
332 4.0
333 ---
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
339
340 .. _release3.14:
341
342 3.14
343 ----
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
347   that check
348
349 .. _release3.13:
350
351 3.13
352 ----
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``
358
359 .. _release3.12:
360
361 3.12
362 ----
363 * Fix possible uncaught TypeError in Py2 with zero bytes inside the value
364 * Fix SequenceOf/SetOf raising BoundsError instead of DecodeError
365
366 .. _release3.11:
367
368 3.11
369 ----
370 * Fix uncaught UTCTime/GeneralizedTime decode error when dealing with
371   non ASCII-encoded values
372
373 .. _release3.10:
374
375 3.10
376 ----
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
381
382 .. _release3.9:
383
384 3.9
385 ---
386 * SEQUENCE's values are printed with field's name. Previously there was
387   the following output::
388
389     AlgorithmIdentifier SEQUENCE[OBJECT IDENTIFIER 1.3.14.3.2.26, [UNIV 5] ANY 0500 OPTIONAL]
390
391   now it is::
392
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
395
396 .. _release3.8:
397
398 3.8
399 ---
400 BER's EOC is explicitly shown during pprinting. Following notation::
401
402       15-2 [0,0,1576]-4  . content: [0] EXPLICIT [UNIV 16] ANY
403
404 is replaced with::
405
406       15-2∞ [0,0,1576]∞  . content: [0] EXPLICIT [UNIV 16] ANY
407     [...]
408     1587    [1,1,   0]   . content:  BER EOC
409     1589    [1,1,   0]   . content: EXPLICIT BER EOC
410
411 .. _release3.7:
412
413 3.7
414 ---
415 * BER decoding support
416 * BitString's ''H notation support
417 * ``termcolor`` package is included in the tarball
418
419 .. _release3.6:
420
421 3.6
422 ---
423 * Ability to set values during Sequence initialization
424
425 .. _release3.5:
426
427 3.5
428 ---
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
432
433 .. _release3.4:
434
435 3.4
436 ---
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
441
442 .. _release3.3:
443
444 3.3
445 ---
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
449
450 .. _release3.2:
451
452 3.2
453 ---
454 * Slightly corrected colours, now visible on white background
455
456 .. _release3.1:
457
458 3.1
459 ---
460 * Fix bug related to DecodeError showing with DecodePathDefBy entities
461 * Respect ``NO_COLOR`` environment variable
462
463 .. _release3.0:
464
465 3.0
466 ---
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/>`__
472
473 .. _release2.1:
474
475 2.1
476 ---
477 * Fixed invalid offset calculation when dealing with DEFINED BY objects
478   having explicit tags
479
480 .. _release2.0:
481
482 2.0
483 ---
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
491
492 .. _release1.6:
493
494 1.6
495 ---
496 Ability to skip specified number of bytes (``--skip``) in command line
497 utility.
498
499 .. _release1.5:
500
501 1.5
502 ---
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
507
508 .. _release1.4:
509
510 1.4
511 ---
512 Ability to automatically decode :ref:`DEFINED BY <definedby>` fields
513 inside SEQUENCEs.
514
515 .. _release1.3:
516
517 1.3
518 ---
519 Removed ``__lt__``/``__eq__`` from base class, as pylint likes it.
520
521 .. _release1.2:
522
523 1.2
524 ---
525 Full rich comparison operators added.
526
527
528 .. _release1.1:
529
530 1.1
531 ---
532 Trivial README addition.
533
534 .. _release1.0:
535
536 1.0
537 ---
538 Initial release.