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