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