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