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