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