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