1
2Revision 0.4.7, released 01-09-2019
3-----------------------------------
4
5- Added `isInconsistent` property to all constructed types. This property
6  conceptually replaces `verifySizeSpec` method to serve a more general
7  purpose e.g. ensuring all required fields are in a good shape. By default
8  this check invokes subtype constraints verification and is run by codecs
9  on value de/serialisation.
10- Deprecate `subtypeSpec` attributes and keyword argument. It is now
11  recommended to pass `ValueSizeConstraint`, as well as all other constraints,
12  to `subtypeSpec`.
13- Fixed a design bug in a way of how the items assigned to constructed
14  types are verified. Now if `Asn1Type`-based object is assigned, its
15  compatibility is verified based on having all tags and constraint
16  objects as the type in field definition. When a bare Python value is
17  assigned, then field type object is cloned and initialized with the
18  bare value (constraints verificaton would run at this moment).
19- Added `WithComponentsConstraint` along with related
20  `ComponentPresentConstraint` and `ComponentAbsentConstraint` classes
21  to be used with `Sequence`/`Set` types representing
22  `SET ... WITH COMPONENTS ...` like ASN.1 constructs.
23
24Revision 0.4.6, released 31-07-2019
25-----------------------------------
26
27- Added previously missing `SET OF ANY` construct encoding/decoding support.
28- Added `omitEmptyOptionals` option which is respected by `Sequence`
29  and `Set` encoders. When `omitEmptyOptionals` is set to `True`, empty
30  initialized optional components are not encoded. Default is `False`.
31- New elements to `SequenceOf`/`SetOf` objects can now be added at any
32  position - the requirement for the new elements to reside at the end
33  of the existing ones (i.e. s[len(s)] = 123) is removed.
34- List-like slicing support added to `SequenceOf`/`SetOf` objects.
35- Removed default initializer from `SequenceOf`/`SetOf` types to ensure
36  consistent behaviour with the rest of ASN.1 types. Before this change,
37  `SequenceOf`/`SetOf` instances immediately become value objects behaving
38  like an empty list. With this change, `SequenceOf`/`SetOf` objects
39  remain schema objects unless a component is added or `.clear()` is
40  called.
41  This change can potentially cause incompatibilities with existing
42  pyasn1 objects which assume `SequenceOf`/`SetOf` instances are value
43  objects right upon instantiation.
44  The behaviour of `Sequence`/`Set` types depends on the `componentType`
45  initializer: if on `componentType` is given, the behaviour is the
46  same as `SequenceOf`/`SetOf` have. IF `componentType` is given, but
47  neither optional nor defaulted components are present, the created
48  instance remains schema object, If, however, either optional or
49  defaulted component isi present, the created instance immediately
50  becomes a value object.
51- Added `.reset()` method to all constructed types to turn value object
52  into a schema object.
53- Added `PyAsn1UnicodeDecodeError`/`PyAsn1UnicodeDecodeError` exceptions
54  to help the caller treating unicode errors happening internally
55  to pyasn1 at the upper layers.
56- Added support for subseconds CER/DER encoding edge cases in
57  `GeneralizedTime` codec.
58- Fixed 3-digit fractional seconds value CER/DER encoding of
59  `GeneralizedTime`.
60- Fixed `AnyDecoder` to accept possible `TagMap` as `asn1Spec`
61  to make dumping raw value operational
62
63Revision 0.4.5, released 29-12-2018
64-----------------------------------
65
66- Debug logging refactored for more efficiency when disabled and
67  for more functionality when in use. Specifically, the global
68  LOG object can easily be used from any function/method, not just
69  from codec main loop as it used to be.
70- More debug logging added to BER family of codecs to ease encoding
71  problems troubleshooting.
72- Copyright notice extended to the year 2019
73- Fixed defaulted constructed SEQUENCE component initialization.
74
75Revision 0.4.4, released 26-07-2018
76-----------------------------------
77
78- Fixed native encoder type map to include all ASN.1 types
79  rather than just ambiguous ones
80- Fixed crash in `.prettyPrint` of `Sequence` and `Set` occurring
81  at OPTIONAL components
82
83Revision 0.4.3, released 23-05-2018
84-----------------------------------
85
86- Copyright notice extended to the year 2018
87- Fixed GeneralizedTime.asDateTime to perform milliseconds conversion
88  correctly
89
90Revision 0.4.2, released 23-11-2017
91-----------------------------------
92
93- Fixed explicit tag splitting in chunked encoding mode at
94  OctetString and BitString encoders
95
96Revision 0.4.1, released 23-11-2017
97-----------------------------------
98
99- ANY DEFINED BY clause support implemented
100- Encoders refactored to take either a value (as ASN.1 object)
101  or a Python value plus ASN.1 schema
102- BitString decoder optimised for better performance when running on
103  constructed encoding
104- Constructed types' .getComponentBy*() methods accept the `default`
105  parameter to return instead if schema object is to be returned
106- Constructed types' .getComponentBy*() methods accept the `instantiate`
107  parameter to disable automatic inner component instantiation
108- The ASN.1 types' `__repr__` implementation reworked for better readability
109  at the cost of not being `eval`-compliant
110- Most ASN.1 types' `__str__` magic methods (except for OctetString and
111  character types) reworked to call `.prettyPrint()` rather than
112  `.prettyPrint` calling `__str__` as it was before. The intention is
113  to eventually deprecate `.prettyPrint()` in favor of `str()`.
114  The other related change is that `str()` of enumerations and boolean
115  types will return string label instead of number.
116- Fixed Choice.clear() to fully reset internal state of the object
117- Sphinx documentation rearranged, simplified and reworded
118- The `isValue` singleton is now the only way to indicate ASN.1 schema
119  as opposed to ASN.1 schema instance. The legacy `None` initializer
120  support has been removed.
121- Changed `Null` object initialization behaviour: previous default
122  value (`''`) is not set anymore. Thus `Null()` call produces a
123  ASN.1 schema object, while `Null('')` - value object.
124- Migrated all docs and references from SourceForge
125- Imports PEP8'ed
126- Fixed ASN.1 encoder not to omit empty substrate produced for inner
127  component if the inner component belongs to the simple class (as
128  opposed to constructed class)
129- Fixed CER/DER encoders to respect tagged CHOICE when ordering
130  SET components
131- Fixed ASN.1 types not to interfere with the Pickle protocol
132- Fixed Sequence/SequenceOf types decoding heuristics in schema-less
133  decoding mode
134
135Revision 0.3.7, released 04-10-2017
136-----------------------------------
137
138- Fixed ASN.1 time types pickling/deepcopy'ing
139
140Revision 0.3.6, released 21-09-2017
141-----------------------------------
142
143- End-of-octets encoding optimized at ASN.1 encoders
144- The __getitem__/__setitem__ behavior of Set/Sequence and SetOf/SequenceOf
145  objects aligned with the canonical Mapping and Sequence protocols in part
146- Fixed crash in ASN.1 encoder when encoding an explicitly tagged
147  component of a Sequence
148
149Revision 0.3.5, released 16-09-2017
150-----------------------------------
151
152- Codecs signatures unified and pass the options kwargs through the
153  call chain
154- Explicit tag encoding optimized to avoid unnecessary copying
155- End-of-octets sentinel encoding optimized
156- Refactored ASN.1 codecs properties to silently enforce proper
157  length and chunk size encoding modes
158- Fixed DER encoder to always produce primitive encoding
159- Fixed crash at SequenceOf native decoder
160- Fixed Real.prettyPrint() to fail gracefully on overflow
161- Fixed a couple of crashes when debug mode is enabled
162
163Revision 0.3.4, released 07-09-2017
164-----------------------------------
165
166- Fixed Native encoder to handle SEQUENCE/SET objects without
167  the componentType property
168- Added missing component-less SEQUENCE/SET objects dict duck-typing support
169- Fixed unnecessary duplicate tags detection at NamesType.tagMap
170- Fixed crash at SEQUENCE and SEQUENCE OF CER encoder when running
171  in schemaless mode
172- Fixed Character types instantiation from OctetString type -- double
173  unicode decoding may have scrambled the data
174
175Revision 0.3.3, released 27-08-2017
176-----------------------------------
177
178- Improved ASN.1 types instantiation performance
179- Improved BER/CER/DER decoder performance by not unconditionally casting
180  substrate into str/bytes.
181- Fixed exponential index size growth bug when building ambiguous
182  NamedTypes tree
183- Fixed constructed types decoding failure at BER codec if running
184  in schema-less mode
185- Fixed crash on prettyPrint'ing a SEQUENCE with no defined components
186- Fixed SetOf ordering at CER/DER encoder
187- Fixed crash on conditional binascii module import
188- Fix to TagSet hash value build
189
190Revision 0.3.2, released 04-08-2017
191-----------------------------------
192
193- Fixed SequenceOf/SetOf types initialization syntax to remain
194  backward compatible with pyasn1 0.2.*
195- Rectified thread safety issues by moving lazy, run-time computation
196  into object initializer.
197- Fixed .isValue property to return True for empty SetOf/SequenceOf
198  objects
199- Fixed GeneralizedTime/UTCTime CER/DER codecs to actually get invoked
200- Fixed DER/CER encoders handling optional SEQUENCE/SET fields containing
201  nested SEQUENCE/SET with optional fields.
202- Fixed crash in SequenceOf/SetOf pretty printing and decoding (in some
203  cases)
204- Fixed documentation markup issues.
205
206Revision 0.3.1, released 26-07-2017
207-----------------------------------
208
209- ASN.1 types __init__(), .clone() and .subtype() signatures
210  refactored into keyword arguments to simplify their signatures.
211- ASN.1 types initialization refactored to minimize the use of
212  relatively expensive isNoValue() call
213- Lazily pre-populate list of values of Sequence/Set/Choice types
214- NamedTypes comparison made more efficient
215- More efficient constraints computation and code clean up
216- The __getitem__() implementation of some ASN.1 types & tag object
217  refactored for better performance
218- BER/CER/DER value encoders refactored to produce either tuple of
219  bytes or octet-stream depending on what is more optimal
220- Reduced the frequency of expensive isinstance() calls
221- Tag-related classes optimized, refactored into properties and
222  documented.
223- The NamedValues implementation refactored to mimic Python dict, its use
224  in ASN.1 types refactored into properties and better documented.
225  WARNING: this change introduces a deviation from original API.
226- NamedType family of classes overhauled, optimized and documented.
227- The `componentType` attribute of constructed ASN.1 types turned
228  read-only on instances.
229- Sequence/Set DER/CER/DER decoder optimized to skip the case of
230  reordered components handling when not necessary.
231- Tags and constraints-related getter methods refactored into read-only
232  instance attributes.
233- The .hasValue() method refactored into .isValue property. All ASN.1
234  objects now support them, not just scalars.
235- The Real.{isInfinity, isPlusInfinity, isMinusInfinity} methods
236  refactored into properties and renamed into IsInf, IsPlusInf and isMinusInf
237- The end-of-octets type refactored to ensure it is a singleton. Codecs
238  changed to rely on that for better performance.
239- Codecs lookup made more efficient at BER/CER/DER decoder main loop by
240  assigning `typeId` to every ASN.1 type, not just ambiguous ones.
241- The .getComponent*() methods of constructed ASN.1 types changed
242  to lazily instantiate underlying type rather than return `None`.
243  This should simplify its API as initialization like `X[0][1] = 2` becomes
244  possible.
245  WARNING: this change introduces a deviation from the original API.
246- The .setComponent*() methods of SetOf/SequenceOf types changed not
247  to allow uninitialized "holes" inside the sequences of their components.
248  They now behave similarly to Python lists.
249  WARNING: this change introduces a deviation from the original API.
250- Default and optional components en/decoding of Constructed type
251  refactored towards better efficiency and more control.
252- OctetsString and Any decoder optimized to avoid creating ASN.1
253  objects for chunks of substrate. Instead they now join substrate
254  chunks together and create ASN.1 object from it just once.
255- The GeneralizedTime and UTCTime types now support to/from Python
256  datetime object conversion.
257- Unit tests added for the `compat` sub-package.
258- Fixed BitString named bits initialization bug.
259- Fixed non-functional tag cache (when running Python 2) at DER decoder.
260- Fixed chunked encoding restriction on DER encoder.
261- Fixed SET components ordering at DER encoder.
262- Fixed BIT STRING & OCTET STRING encoding to be always non-chunked (e.g.
263  primitive) at DER encoder
264- Fixed `compat.integer.from_bytes()` behaviour on empty input.
265
266Revision 0.2.3, released 25-02-2017
267-----------------------------------
268
269- Improved SEQUENCE/SET/CHOICE decoding performance by maintaining a single shared
270  NamedType object for all instances of SEQUENCE/SET object.
271- Improved INTEGER encoding/decoding by switching to Python's built-in
272  integer serialisation functions.
273- Improved BitString performance by rebasing it onto Python int type and leveraging
274  fast Integer serialisation functions.
275- BitString type usability improved in many ways: for example bitshifting and
276  numeric operation on BitString is now possible.
277- Minor ObjectIdentifier type performance optimization.
278- ASN.1 character types refactored to keep unicode contents internally
279  (rather than serialised octet stream) and duck-type it directly.
280- ASN.1 OctetString initialized from a Python object performs bytes()
281  on it when running on Python 3 (used to do str() which is probably
282  less logical).
283- Missing support for NoValue.__sizeof__ added.
284- Added checks to make sure SEQUENCE/SET components being assigned
285  match the prototypes.
286- Setter methods for constructed types consistently accept matchTags
287  and matchConstraints flags to control the strictness of inner
288  components compatibility verification. Previously, these checks
289  were tied to verifyConstraints flag, now they are all independent.
290- General documentation improvements here and there.
291- Fix to __reversed__() magic to make it returning an iterator.
292- Test suite simplified and unified.
293- The __all__ variable added to most of the Python modules.
294- The "test" directory renamed into "tests" not to collide with
295  the "test" module.
296
297Revision 0.2.2, released 07-02-2017
298-----------------------------------
299
300- FIX TO A SECURITY WEAKNESS: define length only decoders could have successfully
301  processed indefinite length serialisation.
302- FIX TO A SECURITY WEAKNESS: canonical decoders (CER/DER) may have successfully
303  consumed non-canonical variations of (otherwise valid) serialisation.
304- Broken Enumerated subtyping fixed.
305
306Revision 0.2.1, released 05-02-2017
307-----------------------------------
308
309- FIX TO A SECURITY WEAKNESS: BER decoder improperly cached long tags.
310- New "native" codec implemented to transform pyasn1 types to Python built-in types and back.
311- Switched to new-style classes.
312- Sphinx documentation added.
313- BitString improvements:
314
315  * simple string of binary digits is now supported as initializer
316  * default str() yields string of binary digits (used to yield str(tuple())
317  * binValue and hexValue initializers added
318  * .asNumbers(), .asOctets() and asInteger() representation added
319
320- Components of constructed ASN.1 types can now be populated with
321  uninitialized ASN.1 objects by assigning either noValue sentinel or
322  setupComponent() function return in addition to now-legacy None sentinel.
323  This should improve code readability.
324- NoValue class improved to become a singleton and catch more kinds
325  of access to it.
326- Compatibility wrappers str2octs() and oct2strs() fixed to run over
327  iso-8859-1 encoding.
328- Integer changed to emit Real instance if division produces a float.
329- True division operation now supported by Integer type.
330- The __contains__(), __reverse__() methods implemented for container types
331- Iterator protocol support implemented for all container types.
332  Warning, warning, warning: this change may potentially affect backward
333  compatibility when:
334
335  * user class overrides __getitem__() without overriding __iter__()
336  * when user code iterates over SEQUENCE object to get its components (now keys will be yielded)
337
338- Almost complete Python list and dict protocols added to SequenceOf/SetOf and
339  Sequence/Set respectively
340- Fix to divmod operation implementation in Integer type.
341- Fix to IntegerDecoder's precomputed value map on Python 3.
342- Fix to base ASN.1 types to run in "unicode_literals" mode.
343- Fix to composite constraints "+" operands ordering (AbstractConstraintSet.__radd__)
344- Fix to constraints merge in .subtype() -- on merge existing constraints are
345  expanded to accommodate new constraints, not the other way round. When existing
346  constraints are wrapped in ConstraintsIntersection composite, additional
347  constraints being added on subtyping effectively further narrow the set of
348  allowed values, which aligns well with the notion of subtyping.
349- Fix to NamedTypes methods to handle .getTagMap() returning None
350- Fix to Set/Sequence.setDefaultComponents() to return self
351- Copyright notice added to non-trivial source code files.
352- Author's email changed, copyright extended to 2017
353
354Revision 0.1.9, released 28-09-2015
355-----------------------------------
356
357- Wheel distribution format now supported.
358- Extensions added to text files, CVS attic flushed.
359- Fix to make uninitialized pyasn1 objects failing properly on hash().
360- Fix to ObjectIdentifier initialization from unicode string.
361- Fix to CER/DER Boolean decoder - fail on non single-octet payload.
362
363Revision 0.1.8, released 22-06-2015
364-----------------------------------
365
366- ObjectIdentifier codec fixed to work properly with arc 0 and arc 2 values.
367- Explicit limit on ObjectIdentifier arc value size removed.
368- Unicode initializer support added to OctetString type and derivatives.
369- New prettyPrintType() abstract method implemented to base pyasn1 types
370  to facilitate encoding errors analysis.
371- The __str__() method implemented to Tag, TagSet and TagMap classes to
372  ease encoding errors troubleshooting.
373  easing encoding errors
374- Fix to SEQUENCE and SET types to give them their private componentTypes
375  collection (which is a NamedTypes object) so that they won't collide in
376  a MT execution environment.
377- Missing T61String,ISO646String character types and ObjectDescriptor useful
378  type added.
379- Distribute is gone, switched to setuptools completely.
380- Missing NamedValues.__repr__() added.
381- The base.NoValue() class, that indicates uninitialized ASN.1 object,
382  made public.
383- The base.NoValue() class instances now support __repr__() what makes
384  possible to perform repr() on uninitialized pyasn1 types objects.
385- When comparing ASN.1 types, by-tag and/or by-constraints matching
386  can now be performed with the isSuperTypeOf()/isSameTypeWith() optional
387  flags.
388- Constructed types now verify their consistency by invoking
389  isSameTypeWith(matchTags=True, matchConstraints=False) and
390  isSuperTypeOf(matchTags=False, matchConstraints=True) for each of their
391  components rather than isSuperTypeOf() as it used to be. Constriants check
392  could be enforced to isSameTypeWith() with the strictConstraints=True
393  constructed classes attribute.
394- Constructed types can now be initialized with new .setComponents() method
395  which accepts both var-args and keyword-args. Default repr() modified to
396  reflect this change.
397- NamedTypes() and NamedValues() made comparable.
398- Test coverage extended to cover pyasn1 types __repr__() function.
399- The abs(Integer()) & abs(Real()) operation now returns respective pyasn1
400  type, not a Python type.
401- More Python magic methods implementations added to Integer & Real classes
402  (e.g.  __pos__, __neg__, __round__, __floor__, __ceil__, __trunc__)
403- The Integer.__invert__ Python magic method implemented.
404- The OctetString.__int__() and .__float__() magic methods implemented.
405- Handle the case of null writer at Debug printer.
406- BitString encoder/decoder performance improved.
407- Built-in debugging is now based on Python logging module.
408- Fix to NamedType.__repr__() to work properly.
409- Fixes to __repr__() implementation of many built-in ASN.1 types to take into
410  account all of their initializers such as tagSet, subtypeSpec etc.
411- String typed float initializer to REAL type now supported.
412- Float typed mantissa initializer to REAL type for base 2 added.
413- Encoding bases 8 and 16 support for REAL type binary encoder added.
414- More strict CER/DER encoders added for GeneralizedTime and UTCTime types.
415- Asn1Item.hasValue() added to easily distinguish initalized ASN.1 objects
416  from uninitialized ones (e.g. pure types).
417- Fix to REAL type binary decoder to handle different bases and scale factor.
418- Fix to TagSet.repr() to include [obsolete] baseTag information.
419- Fix to broken REAL type decoding handling.
420- Fix to BitString and OctetString decoders dealing with constructed
421  encoding -- it used to be possible to embed other types in substrate.
422- DER codec hardened not to tolerate indefinite length encoding/decoding.
423- Fix to end-of-octest sentinel handling:
424
425  + require strict two-zeros sentinel encoding
426  + recognize EOO sentinel only when explicitly requested by caller
427    of the decoder via allowEoo=True parameter (warning: API change)
428
429Revision 0.1.7
430--------------
431
432- License updated to vanilla BSD 2-Clause to ease package use
433  (https://opensource.org/licenses/BSD-2-Clause).
434- Test suite made discoverable by unittest/unittest2 discovery feature.
435- Fix to decoder working on indefinite length substrate -- end-of-octets
436  marker is now detected by both tag and value. Otherwise zero values may
437  interfere with end-of-octets marker.
438- Fix to decoder to fail in cases where tagFormat indicates inappropriate
439  format for the type (e.g. BOOLEAN is always PRIMITIVE, SET is always
440  CONSTRUCTED and OCTET STRING is either of the two)
441- Fix to REAL type encoder to force primitive encoding form encoding.
442- Fix to CHOICE decoder to handle explicitly tagged, indefinite length
443  mode encoding
444- Fix to REAL type decoder to handle negative REAL values correctly. Test
445  case added.
446
447Revision 0.1.6
448--------------
449
450- The compact (valueless) way of encoding zero INTEGERs introduced in
451  0.1.5 seems to fail miserably as the world is filled with broken
452  BER decoders. So we had to back off the *encoder* for a while.
453  There's still the IntegerEncoder.supportCompactZero flag which
454  enables compact encoding form whenever it evaluates to True.
455- Report package version on debugging code initialization.
456
457Revision 0.1.5
458--------------
459
460- Documentation updated and split into chapters to better match
461  web-site contents.
462- Make prettyPrint() working for non-initialized pyasn1 data objects. It
463  used to throw an exception.
464- Fix to encoder to produce empty-payload INTEGER values for zeros
465- Fix to decoder to support empty-payload INTEGER and REAL values
466- Fix to unit test suites imports to be able to run each from
467  their current directory
468
469Revision 0.1.4
470--------------
471
472- Built-in codec debugging facility added
473- Added some more checks to ObjectIdentifier BER encoder catching
474  posible 2^8 overflow condition by two leading sub-OIDs
475- Implementations overriding the AbstractDecoder.valueDecoder method
476  changed to return the rest of substrate behind the item being processed
477  rather than the unprocessed substrate within the item (which is usually
478  empty).
479- Decoder's recursiveFlag feature generalized as a user callback function
480  which is passed an uninitialized object recovered from substrate and
481  its uninterpreted payload.
482- Catch inappropriate substrate type passed to decoder.
483- Expose tagMap/typeMap/Decoder objects at DER decoder to uniform API.
484- Obsolete __init__.MajorVersionId replaced with __init__.__version__
485  which is now in-sync with distutils.
486- Package classifiers updated.
487- The __init__.py's made non-empty (rumors are that they may be optimized
488  out by package managers).
489- Bail out gracefully whenever Python version is older than 2.4.
490- Fix to Real codec exponent encoding (should be in 2's complement form),
491  some more test cases added.
492- Fix in Boolean truth testing built-in methods
493- Fix to substrate underrun error handling at ObjectIdentifier BER decoder
494- Fix to BER Boolean decoder that allows other pre-computed
495  values besides 0 and 1
496- Fix to leading 0x80 octet handling in DER/CER/DER ObjectIdentifier decoder.
497  See https://www.esat.kuleuven.be/cosic/publications/article-1432.pdf
498
499Revision 0.1.3
500--------------
501
502- Include class name into asn1 value constraint violation exception.
503- Fix to OctetString.prettyOut() method that looses leading zero when
504  building hex string.
505
506Revision 0.1.2
507--------------
508
509- Fix to __long__() to actually return longs on py2k
510- Fix to OctetString.__str__() workings of a non-initialized object.
511- Fix to quote initializer of OctetString.__repr__()
512- Minor fix towards ObjectIdentifier.prettyIn() reliability
513- ObjectIdentifier.__str__() is aliased to prettyPrint()
514- Exlicit repr() calls replaced with '%r'
515
516Revision 0.1.1
517--------------
518
519- Hex/bin string initializer to OctetString object reworked
520  (in a backward-incompatible manner)
521- Fixed float() infinity compatibility issue (affects 2.5 and earlier)
522- Fixed a bug/typo at Boolean CER encoder.
523- Major overhawl for Python 2.4 -- 3.2 compatibility:
524  + get rid of old-style types
525  + drop string module usage
526  + switch to rich comparation
527  + drop explicit long integer type use
528  + map()/filter() replaced with list comprehension
529  + apply() replaced with \*/\*\*args
530  + switched to use 'key' sort() callback function
531  + support both __nonzero__() and __bool__() methods
532  + modified not to use py3k-incompatible exception syntax
533  + getslice() operator fully replaced with getitem()
534  + dictionary operations made 2K/3K compatible
535  + base type for encoding substrate and OctetString-based types
536  is now 'bytes' when running py3k and 'str' otherwise
537  + OctetString and derivatives now unicode compliant.
538  + OctetString now supports two python-neutral getters: asOcts() & asInts()
539  + print OctetString content in hex whenever it is not printable otherwise
540  + in test suite, implicit relative import replaced with the absolute one
541  + in test suite, string constants replaced with numerics
542
543Revision 0.0.13
544---------------
545
546- Fix to base10 normalization function that loops on univ.Real(0)
547
548Revision 0.0.13b
549----------------
550
551- ASN.1 Real type is now supported properly.
552- Objects of Constructed types now support __setitem__()
553- Set/Sequence objects can now be addressed by their field names (string index)
554  and position (integer index).
555- Typo fix to ber.SetDecoder code that prevented with schema decoding
556  operation.
557- Fix to explicitly tagged items decoding support.
558- Fix to OctetString.prettyPrint() to better handle non-printable content.
559- Fix to repr() workings of Choice objects.
560
561Revision 0.0.13a
562----------------
563
564- Major codec re-design.
565- Documentation significantly improved.
566- ASN.1 Any type is now supported.
567- All example ASN.1 modules moved to separate pyasn1-modules package.
568- Fix to initial sub-OID overflow condition detection an encoder.
569- BitString initialization value verification improved.
570- The Set/Sequence.getNameByPosition() method implemented.
571- Fix to proper behaviour of PermittedAlphabetConstraint object.
572- Fix to improper Boolean substrate handling at CER/DER decoders.
573- Changes towards performance improvement:
574
575  + all dict.has_key() & dict.get() invocations replaced with modern syntax
576    (this breaks compatibility with Python 2.1 and older).
577  + tag and tagset caches introduced to decoder
578  + decoder code improved to prevent unnecessary pyasn1 objects creation
579  + allow disabling components verification when setting components to
580    structured types, this is used by decoder whilst running with schema
581    mode.
582  + BER decoder for integer values now looks up a small set of pre-computed
583    substrate values to save on decoding.
584  + a few pre-computed values configured to ObjectIdentifier BER encoder.
585  + ChoiceDecoder split-off SequenceOf one to save on unnecessary checks.
586  + replace slow hasattr()/getattr() calls with isinstance() introspection.
587  + track the number of initialized components of Constructed types to save
588    on default/optional components initialization.
589  + added a shortcut ObjectIdentifier.asTuple() to be used instead of
590    __getitem__() in hotspots.
591  + use Tag.asTuple() and pure integers at tag encoder.
592  + introduce and use in decoder the baseTagSet attribute of the built-in
593    ASN.1 types.
594
595Revision 0.0.12a
596----------------
597
598- The individual tag/length/value processing methods of
599  encoder.AbstractItemEncoder renamed (leading underscore stripped)
600  to promote overloading in cases where partial substrate processing
601  is required.
602- The ocsp.py, ldap.py example scripts added.
603- Fix to univ.ObjectIdentifier input value handler to disallow negative
604  sub-IDs.
605
606Revision 0.0.11a
607----------------
608
609- Decoder can now treat values of unknown types as opaque OctetString.
610- Fix to Set/SetOf type decoder to handle uninitialized scalar SetOf
611  components correctly.
612
613Revision 0.0.10a
614----------------
615
616- API versioning mechanics retired (pyasn1.v1 -> pyasn1) what makes
617  it possible to zip-import pyasn1 sources (used by egg and py2exe).
618
619Revision 0.0.9a
620---------------
621
622- Allow any non-zero values in Boolean type BER decoder, as it's in
623  accordnance with the standard.
624
625Revision 0.0.8a
626---------------
627
628- Integer.__index__() now supported (for Python 2.5+).
629- Fix to empty value encoding in BitString encoder, test case added.
630- Fix to SequenceOf decoder that prevents it skipping possible Choice
631  typed inner component.
632- Choice.getName() method added for getting currently set component
633  name.
634- OctetsString.prettyPrint() does a single str() against its value
635  eliminating an extra quotes.
636
637Revision 0.0.7a
638---------------
639
640- Large tags (>31) now supported by codecs.
641- Fix to encoder to properly handle explicitly tagged untagged items.
642- All possible value lengths (up to 256^126) now supported by encoders.
643- Fix to Tag class constructor to prevent negative IDs.
644
645Revision 0.0.6a
646---------------
647
648- Make use of setuptools.
649- Constraints derivation verification (isSuperTypeOf()/isSubTypeOf()) fixed.
650- Fix to constraints comparation logic -- can't cmp() hash values as it
651  may cause false positives due to hash conflicts.
652
653Revision 0.0.5a
654---------------
655
656- Integer BER codec reworked fixing negative values encoding bug.
657- clone() and subtype() methods of Constructed ASN.1 classes now
658  accept optional cloneValueFlag flag which controls original value
659  inheritance. The default is *not* to inherit original value for
660  performance reasons (this may affect backward compatibility).
661  Performance penalty may be huge on deeply nested Constructed objects
662  re-creation.
663- Base ASN.1 types (pyasn1.type.univ.*) do not have default values
664  anymore. They remain uninitialized acting as ASN.1 types. In
665  this model, initialized ASN.1 types represent either types with
666  default value installed or a type instance.
667- Decoders' prototypes are now class instances rather than classes.
668  This is to simplify initial value installation to decoder's
669  prototype value.
670- Bugfix to BitString BER decoder (trailing bits not regarded).
671- Bugfix to Constraints use as mapping keys.
672- Bugfix to Integer & BitString clone() methods
673- Bugix to the way to distinguish Set from SetOf at CER/DER SetOfEncoder
674- Adjustments to make it running on Python 1.5.
675- In tests, substrate constants converted from hex escaped literals into
676  octals to overcome indefinite hex width issue occuring in young Python.
677- Minor performance optimization of TagSet.isSuperTagSetOf() method
678- examples/sshkey.py added
679
680Revision 0.0.4a
681---------------
682
683* Asn1Type.prettyPrinter() -> \*.prettyPrint()
684
685Revision 0.0.3a
686---------------
687
688* Simple ASN1 objects now hash to their Python value and don't
689  depend upon tag/constraints/etc.
690* prettyIn & prettyOut methods of SimplleAsn1Object become public
691* many syntax fixes
692
693Revision 0.0.2a
694---------------
695
696* ConstraintsIntersection.isSuperTypeOf() and
697  ConstraintsIntersection.hasConstraint() implemented
698* Bugfix to NamedValues initialization code
699* +/- operators added to NamedValues objects
700* Integer.__abs__() & Integer.subtype() added
701* ObjectIdentifier.prettyOut() fixes
702* Allow subclass components at SequenceAndSetBase
703* AbstractConstraint.__cmp__() dropped
704* error.Asn1Error replaced with error.PyAsn1Error
705
706Revision 0.0.1a
707---------------
708
709* Initial public alpha release
710