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