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