NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #65 most downloaded on PyPI
Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)
Last release 2 months ago
09 Jul 2026
Ships unpredictably
gaps range from 4 weeks to 3.4 years
Nearly every release is documented
notes for 35 of 35 stable releases
Nothing withdrawn
no release was ever pulled
17 years old
42 releases · first in 2009
CVE-2026-59885 (GHSA-8ppf-4f7h-5ppj): Fixed quadratic time complexity in the OBJECT IDENTIFIER and RELATIVE-OID decoders. A small crafted substrate en…
This is a security release.
Real.__float__() for values with large base-10 exponents.All changes are noted in the CHANGELOG.
CVE-2026-59885 (GHSA-8ppf-4f7h-5ppj): Fixed quadratic time complexity in the OBJECT IDENTIFIER and RELATIVE-OID decoders. A small crafted substrate encoding many arcs could consume excessive CPU. Arcs are now accumulated in linear time; decoded values are unchanged (thanks for reporting, tynus2)
CVE-2026-59884 (GHSA-m4p7-r5rc-7g4j): Limited BER long-form tag IDs to 20 octets (140 bits), matching the OID arc limit introduced in 0.6.2. Unbounded tag IDs allowed a crafted substrate to consume excessive CPU and memory; longer tag IDs are now rejected with PyAsn1Error. Also fixed Tag and TagSet repr() failing on huge tag (thanks for reporting, mikeappsec) IDs due to the integer-to-string conversion limit (Python 3.11+)
CVE-2026-59886 (GHSA-hm4w-wwcw-mr6r): Fixed excessive memory and CPU consumption in Real.__float__() for values with large base-10 exponents. Conversion no longer materializes huge intermediate integers; values too large to represent as a Python float raise OverflowError promptly, and prettyPrint() renders them as '<overflow>' as before. Also fixed base-10 mantissa normalization to use exact integer arithmetic; mantissas larger than 2**53 could previously lose precision through float division (thanks for reporting, gvozdila)
Pinned PyPI publish GitHub Action to an immutable commit [pr #113](https://github.com/pyasn1/pyasn1/pull/113)
One column per quarter.
Added nesting depth limit to ASN.1 decoder to prevent stack overflow from deeply nested structures ( CVE-2026-30922 ).
It's a minor release.
All changes are noted in the CHANGELOG.
CVE-2026-30922 (GHSA-jr27-m4p2-rc6r): Added nesting depth limit to ASN.1 decoder to prevent stack overflow from deeply nested structures (thanks for reporting, romanticpragmatism)
Fixed OverflowError from oversized BER length field [issue #54](https://github.com/pyasn1/pyasn1/issues/54) [pr #100](https://github.com/pyasn1/pyasn1/pull/100)
Fixed DeprecationWarning stacklevel for deprecated attributes [issue #86](https://github.com/pyasn1/pyasn1/issues/86) [pr #101](https://github.com/pyasn1/pyasn1/pull/101)
Fixed asDateTime incorrect fractional seconds parsing [issue #81](https://github.com/pyasn1/pyasn1/issues/81) [pr #102](https://github.com/pyasn1/pyasn1/pull/102)
Fixed continuation octet limits in OID/RELATIVE-OID decoder ( CVE-2026-23490 ).
It's a minor release.
All changes are noted in the CHANGELOG.
CVE-2026-23490 (GHSA-63vm-454h-vhhq): Fixed continuation octet limits in OID/RELATIVE-OID decoder (thanks to tsigouris007)
Added support for Python 3.14 [pr #97](https://github.com/pyasn1/pyasn1/pull/97)
Added SECURITY.md policy
Fixed unit tests failing due to missing code [issue #91](https://github.com/pyasn1/pyasn1/issues/91) [pr #92](https://github.com/pyasn1/pyasn1/pull/92)
Migrated to pyproject.toml packaging [pr #90](https://github.com/pyasn1/pyasn1/pull/90)
Removed bdist_wheel universal flag from setup.cfg.
It's a minor release.
All changes are noted in the CHANGELOG.
Added support for Python 3.13 and updated GitHub Actions [pr #73](https://github.com/pyasn1/pyasn1/pull/73/)
Removed Python 2 support and related code [pr #62](https://github.com/pyasn1/pyasn1/pull/62/) [pr #61](https://github.com/pyasn1/pyasn1/pull/61/) [pr #60](https://github.com/pyasn1/pyasn1/pull/60/)
Improved error handling and consistency [pr #71](https://github.com/pyasn1/pyasn1/pull/71/) [pr #70](https://github.com/pyasn1/pyasn1/pull/70/)
Runtime deprecation of tagMap and typeMap aliases [pr #72](https://github.com/pyasn1/pyasn1/pull/72/)
Fixed duplicated and missing declarations [pr #64](https://github.com/pyasn1/pyasn1/pull/64/)
Cleaned documentation and comments [pr #63](https://github.com/pyasn1/pyasn1/pull/63/)
Removed bdist_wheel universal flag from setup.cfg [pr #69](https://github.com/pyasn1/pyasn1/pull/69/)
It's a major release where we drop Python 2 support entirely. The most significant changes are:
It's a major release where we drop Python 2 support entirely.
The most significant changes are:
RELATIVE-OID constructAll changes are noted in the CHANGELOG.
Added support for previously missing RELATIVE-OID construct [pr #48](https://github.com/pyasn1/pyasn1/pull/48/)
Updated link to Layman's Guide Now it provides a link to links to a formatted PDF version of the paper, at a stable domain (researchgate), using https [pr #50](https://github.com/pyasn1/pyasn1/pull/50/)
Removed support for EOL Python 2.7, 3.6, 3.7 [pr #56](https://github.com/pyasn1/pyasn1/pull/56/)
Added support for PyPy 3.10 and Python 3.12
It's a minor release.
decoder.decode() can now be either v0.4 Non-Streaming or v0.5 Streaming.All changes are noted in the CHANGELOG.
It's a major release. The most important changes are:
It's a major release. The most important changes are:
pyasn1 and pyasn1-module has been transferred to Christian Heimes and Simon Pichugin in PyPI support ticket #2090.pyasn1 and pyasn1-modules are now in the GitHub organization https://github.com/pyasn1/.setup.cfg, pyproject.toml, build, and GitHub Actions.All changes are noted in the CHANGELOG.
Change RealEncoder.supportIndefLenMode type to a boolean [pr #21](https://github.com/pyasn1/pyasn1/pull/21/)
Fix CI for py39 test environment [pr #25](https://github.com/pyasn1/pyasn1/pull/25/)
Replace all snmplabs.com links [issue #4](https://github.com/pyasn1/pyasn1/issues/4)
Use correct SPDX identifier for the license [pr #16](https://github.com/pyasn1/pyasn1/pull/16)
Re-add tagMap and typeMap module level attributes to all encoder and decoder modules. They are aliases for TAG_MAP and TYPE_MAP, [issue #9](https://github.com/pyasn1/pyasn1/issues/9).
Restore API for passing for tagMap and typeMap arguments to Encoder and Decoder classes by name and position, [issue #12](https://github.com/pyasn1/pyasn1/issues/12).
Re-add tagMap and typeMap module level attributes to all encoder and decoder modules. They are aliases for TAG_MAP and TYPE_MAP, [issue #9](https://github.com/pyasn1/pyasn1/issues/9).
Restore API for passing for tagMap and typeMap arguments to Encoder and Decoder classes by name and position,
Make BER/CER/DER decoders streaming and suspendible
The goal of this change is to make the decoder yielding on input data starvation and resuming from where it stopped whenever the caller decides to try again (hopefully making sure that some more input becomes available).
This change makes it possible for the decoder to operate on streams of data (meaning that the entire DER blob might not be immediately available on input).
On top of that, the decoder yields partially reconstructed ASN.1 object on input starvation making it possible for the caller to inspect what has been decoded so far and possibly consume partial ASN.1 data.
All these new feature are natively available through StreamingDecoder class. Previously published API is implemented as a thin wrapper on top of that ensuring backward compatibility.
Added support for Python 3.8, 3.9, 3.10, 3.11
Removed support for EOL Pythons 2.4, 2.5, 2.6, 3.2, 3.3, 3.4, 3.5
Added support for PyPy 3.7, 3.8, 3.9
Modernized packaging and testing. pyasn1 now uses setup.cfg, pyproject.toml, [build](https://pypi.org/project/build/), and GitHub Actions.
PyPI package ownership for pyasn1 and pyasn1-module has been transfered to Christian Heimes and Simon Pichugin in [PyPI support ticket #2090](https://github.com/pypa/pypi-support/issues/2090).
The upstream repositories for pyasn1 and pyasn1-modules are now in the GitHub organization https://github.com/pyasn1/.
Added ability of combining SingleValueConstraint and PermittedAlphabetConstraint objects into one for proper modeling FROM ... EXCEPT ... ASN.1 clause
Added ability of combining SingleValueConstraint and PermittedAlphabetConstraint objects into one for proper modeling FROM ... EXCEPT ... ASN.1 clause.
Deprecate subtypeSpec attributes and keyword argument. It is now recommended to pass ValueSizeConstraint, as well as all other constraints, to subtype…
Added isInconsistent property to all constructed types. This property conceptually replaces verifySizeSpec method to serve a more general purpose e.g. ensuring all required fields are in a good shape. By default this check invokes subtype constraints verification and is run by codecs on value de/serialisation.
Deprecate subtypeSpec attributes and keyword argument. It is now recommended to pass ValueSizeConstraint, as well as all other constraints, to subtypeSpec.
Fixed a design bug in a way of how the items assigned to constructed types are verified. Now if Asn1Type-based object is assigned, its compatibility is verified based on having all tags and constraint objects as the type in field definition. When a bare Python value is assigned, then field type object is cloned and initialized with the bare value (constraints verificaton would run at this moment).
Added WithComponentsConstraint along with related ComponentPresentConstraint and ComponentAbsentConstraint classes to be used with Sequence/Set types representing SET ... WITH COMPONENTS ... like ASN.1 constructs.
Added previously missing SET OF ANY construct encoding/decoding support.
Added previously missing SET OF ANY construct encoding/decoding support.
Added omitEmptyOptionals option which is respected by Sequence and Set encoders. When omitEmptyOptionals is set to True, empty initialized optional components are not encoded. Default is False.
New elements to SequenceOf/SetOf objects can now be added at any position - the requirement for the new elements to reside at the end of the existing ones (i.e. s[len(s)] = 123) is removed.
List-like slicing support added to SequenceOf/SetOf objects.
Removed default initializer from SequenceOf/SetOf types to ensure consistent behaviour with the rest of ASN.1 types. Before this change, SequenceOf/SetOf instances immediately become value objects behaving like an empty list. With this change, SequenceOf/SetOf objects remain schema objects unless a component is added or .clear() is called. This change can potentially cause incompatibilities with existing pyasn1 objects which assume SequenceOf/SetOf instances are value objects right upon instantiation. The behaviour of Sequence/Set types depends on the componentType initializer: if on componentType is given, the behaviour is the same as SequenceOf/SetOf have. IF componentType is given, but neither optional nor defaulted components are present, the created instance remains schema object, If, however, either optional or defaulted component isi present, the created instance immediately becomes a value object.
Added .reset() method to all constructed types to turn value object into a schema object.
Added PyAsn1UnicodeDecodeError/PyAsn1UnicodeDecodeError exceptions to help the caller treating unicode errors happening internally to pyasn1 at the upper layers.
Added support for subseconds CER/DER encoding edge cases in GeneralizedTime codec.
Fixed 3-digit fractional seconds value CER/DER encoding of GeneralizedTime.
Fixed AnyDecoder to accept possible TagMap as asn1Spec to make dumping raw value operational
Debug logging refactored for more efficiency when disabled and for more functionality when in use. Specifically, the global LOG object can easily be u
Debug logging refactored for more efficiency when disabled and for more functionality when in use. Specifically, the global LOG object can easily be used from any function/method, not just from codec main loop as it used to be.
More debug logging added to BER family of codecs to ease encoding problems troubleshooting.
Copyright notice extended to the year 2019
Fixed defaulted constructed SEQUENCE component initialization.
Fixed native encoder type map to include all ASN.1 types rather than just ambiguous ones
Fixed native encoder type map to include all ASN.1 types rather than just ambiguous ones
Fixed crash in .prettyPrint of Sequence and Set occurring at OPTIONAL components
Copyright notice extended to the year 2018
Copyright notice extended to the year 2018
Fixed GeneralizedTime.asDateTime to perform milliseconds conversion correctly
Fixed explicit tag splitting in chunked encoding mode at OctetString and BitString encoders
Fixed explicit tag splitting in chunked encoding mode at OctetString and BitString encoders
The intention is to eventually deprecate .prettyPrint() in favor of str(). The other related change is that str() of enumerations and boolean types wi…
ANY DEFINED BY clause support implemented
Encoders refactored to take either a value (as ASN.1 object) or a Python value plus ASN.1 schema
BitString decoder optimised for better performance when running on constructed encoding
Constructed types' .getComponentBy*() methods accept the default parameter to return instead if schema object is to be returned
Constructed types' .getComponentBy*() methods accept the instantiate parameter to disable automatic inner component instantiation
The ASN.1 types' __repr__ implementation reworked for better readability at the cost of not being eval-compliant
Most ASN.1 types' __str__ magic methods (except for OctetString and character types) reworked to call .prettyPrint() rather than .prettyPrint calling __str__ as it was before. The intention is to eventually deprecate .prettyPrint() in favor of str(). The other related change is that str() of enumerations and boolean types will return string label instead of number.
Fixed Choice.clear() to fully reset internal state of the object
Sphinx documentation rearranged, simplified and reworded
The isValue singleton is now the only way to indicate ASN.1 schema as opposed to ASN.1 schema instance. The legacy None initializer support has been removed.
Changed Null object initialization behaviour: previous default value ('') is not set anymore. Thus Null() call produces a ASN.1 schema object, while Null('') - value object.
Migrated all docs and references from SourceForge
Imports PEP8'ed
Fixed ASN.1 encoder not to omit empty substrate produced for inner component if the inner component belongs to the simple class (as opposed to constructed class)
Fixed CER/DER encoders to respect tagged CHOICE when ordering SET components
Fixed ASN.1 types not to interfere with the Pickle protocol
Fixed Sequence/SequenceOf types decoding heuristics in schema-less decoding mode
Fixed ASN.1 time types pickling/deepcopy'ing
Fixed ASN.1 time types pickling/deepcopy'ing
End-of-octets encoding optimized at ASN.1 encoders
End-of-octets encoding optimized at ASN.1 encoders
The __getitem__/__setitem__ behavior of Set/Sequence and SetOf/SequenceOf objects aligned with the canonical Mapping and Sequence protocols in part
Fixed crash in ASN.1 encoder when encoding an explicitly tagged component of a Sequence
Codecs signatures unified and pass the options kwargs through the call chain
Codecs signatures unified and pass the options kwargs through the call chain
Explicit tag encoding optimized to avoid unnecessary copying
End-of-octets sentinel encoding optimized
Refactored ASN.1 codecs properties to silently enforce proper length and chunk size encoding modes
Fixed DER encoder to always produce primitive encoding
Fixed crash at SequenceOf native decoder
Fixed Real.prettyPrint() to fail gracefully on overflow
Fixed a couple of crashes when debug mode is enabled
Fixed Native encoder to handle SEQUENCE/SET objects without the componentType property
Fixed Native encoder to handle SEQUENCE/SET objects without the componentType property
Added missing component-less SEQUENCE/SET objects dict duck-typing support
Fixed unnecessary duplicate tags detection at NamesType.tagMap
Fixed crash at SEQUENCE and SEQUENCE OF CER encoder when running in schemaless mode
Fixed Character types instantiation from OctetString type -- double unicode decoding may have scrambled the data
Improved ASN.1 types instantiation performance
Improved ASN.1 types instantiation performance
Improved BER/CER/DER decoder performance by not unconditionally casting substrate into str/bytes.
Fixed exponential index size growth bug when building ambiguous NamedTypes tree
Fixed constructed types decoding failure at BER codec if running in schema-less mode
Fixed crash on prettyPrint'ing a SEQUENCE with no defined components
Fixed SetOf ordering at CER/DER encoder
Fixed crash on conditional binascii module import
Fix to TagSet hash value build
Fixed SequenceOf/SetOf types initialization syntax to remain backward compatible with pyasn1 0.2.*
Fixed SequenceOf/SetOf types initialization syntax to remain backward compatible with pyasn1 0.2.*
Rectified thread safety issues by moving lazy, run-time computation into object initializer.
Fixed .isValue property to return True for empty SetOf/SequenceOf objects
Fixed GeneralizedTime/UTCTime CER/DER codecs to actually get invoked
Fixed DER/CER encoders handling optional SEQUENCE/SET fields containing nested SEQUENCE/SET with optional fields.
Fixed crash in SequenceOf/SetOf pretty printing and decoding (in some cases)
Fixed documentation markup issues.
ASN.1 types __init__(), .clone() and .subtype() signatures refactored into keyword arguments to simplify their signatures.
ASN.1 types __init__(), .clone() and .subtype() signatures refactored into keyword arguments to simplify their signatures.
ASN.1 types initialization refactored to minimize the use of relatively expensive isNoValue() call
Lazily pre-populate list of values of Sequence/Set/Choice types
NamedTypes comparison made more efficient
More efficient constraints computation and code clean up
The __getitem__() implementation of some ASN.1 types & tag object refactored for better performance
BER/CER/DER value encoders refactored to produce either tuple of bytes or octet-stream depending on what is more optimal
Reduced the frequency of expensive isinstance() calls
Tag-related classes optimized, refactored into properties and documented.
The NamedValues implementation refactored to mimic Python dict, its use in ASN.1 types refactored into properties and better documented. WARNING: this change introduces a deviation from original API.
NamedType family of classes overhauled, optimized and documented.
The componentType attribute of constructed ASN.1 types turned read-only on instances.
Sequence/Set DER/CER/DER decoder optimized to skip the case of reordered components handling when not necessary.
Tags and constraints-related getter methods refactored into read-only instance attributes.
The .hasValue() method refactored into .isValue property. All ASN.1 objects now support them, not just scalars.
The Real.{isInfinity, isPlusInfinity, isMinusInfinity} methods refactored into properties and renamed into IsInf, IsPlusInf and isMinusInf
The end-of-octets type refactored to ensure it is a singleton. Codecs changed to rely on that for better performance.
Codecs lookup made more efficient at BER/CER/DER decoder main loop by assigning typeId to every ASN.1 type, not just ambiguous ones.
The .getComponent*() methods of constructed ASN.1 types changed to lazily instantiate underlying type rather than return None. This should simplify its API as initialization like X[0][1] = 2 becomes possible. WARNING: this change introduces a deviation from the original API.
The .setComponent*() methods of SetOf/SequenceOf types changed not to allow uninitialized "holes" inside the sequences of their components. They now behave similarly to Python lists. WARNING: this change introduces a deviation from the original API.
Default and optional components en/decoding of Constructed type refactored towards better efficiency and more control.
OctetsString and Any decoder optimized to avoid creating ASN.1 objects for chunks of substrate. Instead they now join substrate chunks together and create ASN.1 object from it just once.
The GeneralizedTime and UTCTime types now support to/from Python datetime object conversion.
Unit tests added for the compat sub-package.
Fixed BitString named bits initialization bug.
Fixed non-functional tag cache (when running Python 2) at DER decoder.
Fixed chunked encoding restriction on DER encoder.
Fixed SET components ordering at DER encoder.
Fixed BIT STRING & OCTET STRING encoding to be always non-chunked (e.g. primitive) at DER encoder
Fixed compat.integer.from_bytes() behaviour on empty input.
Improved SEQUENCE/SET/CHOICE decoding performance by maintaining a single shared NamedType object for all instances of SEQUENCE/SET object.
Improved SEQUENCE/SET/CHOICE decoding performance by maintaining a single shared NamedType object for all instances of SEQUENCE/SET object.
Improved INTEGER encoding/decoding by switching to Python's built-in integer serialisation functions.
Improved BitString performance by rebasing it onto Python int type and leveraging fast Integer serialisation functions.
BitString type usability improved in many ways: for example bitshifting and numeric operation on BitString is now possible.
Minor ObjectIdentifier type performance optimization.
ASN.1 character types refactored to keep unicode contents internally (rather than serialised octet stream) and duck-type it directly.
ASN.1 OctetString initialized from a Python object performs bytes() on it when running on Python 3 (used to do str() which is probably less logical).
Missing support for NoValue.__sizeof__ added.
Added checks to make sure SEQUENCE/SET components being assigned match the prototypes.
Setter methods for constructed types consistently accept matchTags and matchConstraints flags to control the strictness of inner components compatibility verification. Previously, these checks were tied to verifyConstraints flag, now they are all independent.
General documentation improvements here and there.
Fix to __reversed__() magic to make it returning an iterator.
Test suite simplified and unified.
The __all__ variable added to most of the Python modules.
The "test" directory renamed into "tests" not to collide with the "test" module.
FIX TO A SECURITY WEAKNESS: define length only decoders could have successfully processed indefinite length serialisation.
FIX TO A SECURITY WEAKNESS: define length only decoders could have successfully processed indefinite length serialisation.
FIX TO A SECURITY WEAKNESS: canonical decoders (CER/DER) may have successfully consumed non-canonical variations of (otherwise valid) serialisation.
Broken Enumerated subtyping fixed.
FIX TO A SECURITY WEAKNESS: BER decoder improperly cached long tags.
FIX TO A SECURITY WEAKNESS: BER decoder improperly cached long tags.
New "native" codec implemented to transform pyasn1 types to Python built-in types and back.
Switched to new-style classes.
Sphinx documentation added.
BitString improvements:
simple string of binary digits is now supported as initializer
default str() yields string of binary digits (used to yield str(tuple())
binValue and hexValue initializers added
.asNumbers(), .asOctets() and asInteger() representation added
Components of constructed ASN.1 types can now be populated with uninitialized ASN.1 objects by assigning either noValue sentinel or setupComponent() function return in addition to now-legacy None sentinel. This should improve code readability.
NoValue class improved to become a singleton and catch more kinds of access to it.
Compatibility wrappers str2octs() and oct2strs() fixed to run over iso-8859-1 encoding.
Integer changed to emit Real instance if division produces a float.
True division operation now supported by Integer type.
The __contains__(), __reverse__() methods implemented for container types
Iterator protocol support implemented for all container types. Warning, warning, warning: this change may potentially affect backward compatibility when:
user class overrides __getitem__() without overriding __iter__()
when user code iterates over SEQUENCE object to get its components (now keys will be yielded)
Almost complete Python list and dict protocols added to SequenceOf/SetOf and Sequence/Set respectively
Fix to divmod operation implementation in Integer type.
Fix to IntegerDecoder's precomputed value map on Python 3.
Fix to base ASN.1 types to run in "unicode_literals" mode.
Fix to composite constraints "+" operands ordering (AbstractConstraintSet.__radd__)
Fix to constraints merge in .subtype() -- on merge existing constraints are expanded to accommodate new constraints, not the other way round. When existing constraints are wrapped in ConstraintsIntersection composite, additional constraints being added on subtyping effectively further narrow the set of allowed values, which aligns well with the notion of subtyping.
Fix to NamedTypes methods to handle .getTagMap() returning None
Fix to Set/Sequence.setDefaultComponents() to return self
Copyright notice added to non-trivial source code files.
Author's email changed, copyright extended to 2017
Wheel distribution format now supported.
Wheel distribution format now supported.
Extensions added to text files, CVS attic flushed.
Fix to make uninitialized pyasn1 objects failing properly on hash().
Fix to ObjectIdentifier initialization from unicode string.
Fix to CER/DER Boolean decoder - fail on non single-octet payload.
ObjectIdentifier codec fixed to work properly with arc 0 and arc 2 values.
ObjectIdentifier codec fixed to work properly with arc 0 and arc 2 values.
Explicit limit on ObjectIdentifier arc value size removed.
Unicode initializer support added to OctetString type and derivatives.
New prettyPrintType() abstract method implemented to base pyasn1 types to facilitate encoding errors analysis.
The __str__() method implemented to Tag, TagSet and TagMap classes to ease encoding errors troubleshooting. easing encoding errors
Fix to SEQUENCE and SET types to give them their private componentTypes collection (which is a NamedTypes object) so that they won't collide in a MT execution environment.
Missing T61String,ISO646String character types and ObjectDescriptor useful type added.
Distribute is gone, switched to setuptools completely.
Missing NamedValues.__repr__() added.
The base.NoValue() class, that indicates uninitialized ASN.1 object, made public.
The base.NoValue() class instances now support __repr__() what makes possible to perform repr() on uninitialized pyasn1 types objects.
When comparing ASN.1 types, by-tag and/or by-constraints matching can now be performed with the isSuperTypeOf()/isSameTypeWith() optional flags.
Constructed types now verify their consistency by invoking isSameTypeWith(matchTags=True, matchConstraints=False) and isSuperTypeOf(matchTags=False, matchConstraints=True) for each of their components rather than isSuperTypeOf() as it used to be. Constriants check could be enforced to isSameTypeWith() with the strictConstraints=True constructed classes attribute.
Constructed types can now be initialized with new .setComponents() method which accepts both var-args and keyword-args. Default repr() modified to reflect this change.
NamedTypes() and NamedValues() made comparable.
Test coverage extended to cover pyasn1 types __repr__() function.
The abs(Integer()) & abs(Real()) operation now returns respective pyasn1 type, not a Python type.
More Python magic methods implementations added to Integer & Real classes (e.g. __pos__, __neg__, __round__, __floor__, __ceil__, __trunc__)
The Integer.__invert__ Python magic method implemented.
The OctetString.__int__() and .__float__() magic methods implemented.
Handle the case of null writer at Debug printer.
BitString encoder/decoder performance improved.
Built-in debugging is now based on Python logging module.
Fix to NamedType.__repr__() to work properly.
Fixes to __repr__() implementation of many built-in ASN.1 types to take into account all of their initializers such as tagSet, subtypeSpec etc.
String typed float initializer to REAL type now supported.
Float typed mantissa initializer to REAL type for base 2 added.
Encoding bases 8 and 16 support for REAL type binary encoder added.
More strict CER/DER encoders added for GeneralizedTime and UTCTime types.
Asn1Item.hasValue() added to easily distinguish initalized ASN.1 objects from uninitialized ones (e.g. pure types).
Fix to REAL type binary decoder to handle different bases and scale factor.
Fix to TagSet.repr() to include [obsolete] baseTag information.
Fix to broken REAL type decoding handling.
Fix to BitString and OctetString decoders dealing with constructed encoding -- it used to be possible to embed other types in substrate.
DER codec hardened not to tolerate indefinite length encoding/decoding.
Fix to end-of-octest sentinel handling:
require strict two-zeros sentinel encoding
recognize EOO sentinel only when explicitly requested by caller of the decoder via allowEoo=True parameter (warning: API change)
License updated to vanilla BSD 2-Clause to ease package use (https://opensource.org/licenses/BSD-2-Clause).
License updated to vanilla BSD 2-Clause to ease package use (https://opensource.org/licenses/BSD-2-Clause).
Test suite made discoverable by unittest/unittest2 discovery feature.
Fix to decoder working on indefinite length substrate -- end-of-octets marker is now detected by both tag and value. Otherwise zero values may interfere with end-of-octets marker.
Fix to decoder to fail in cases where tagFormat indicates inappropriate format for the type (e.g. BOOLEAN is always PRIMITIVE, SET is always CONSTRUCTED and OCTET STRING is either of the two)
Fix to REAL type encoder to force primitive encoding form encoding.
Fix to CHOICE decoder to handle explicitly tagged, indefinite length mode encoding
Fix to REAL type decoder to handle negative REAL values correctly. Test case added.
The compact (valueless) way of encoding zero INTEGERs introduced in 0.1.5 seems to fail miserably as the world is filled with broken BER decoders. So
The compact (valueless) way of encoding zero INTEGERs introduced in 0.1.5 seems to fail miserably as the world is filled with broken BER decoders. So we had to back off the encoder for a while. There's still the IntegerEncoder.supportCompactZero flag which enables compact encoding form whenever it evaluates to True.
Report package version on debugging code initialization.
Documentation updated and split into chapters to better match web-site contents.
Documentation updated and split into chapters to better match web-site contents.
Make prettyPrint() working for non-initialized pyasn1 data objects. It used to throw an exception.
Fix to encoder to produce empty-payload INTEGER values for zeros
Fix to decoder to support empty-payload INTEGER and REAL values
Fix to unit test suites imports to be able to run each from their current directory
Built-in codec debugging facility added
Built-in codec debugging facility added
Added some more checks to ObjectIdentifier BER encoder catching posible 2^8 overflow condition by two leading sub-OIDs
Implementations overriding the AbstractDecoder.valueDecoder method changed to return the rest of substrate behind the item being processed rather than the unprocessed substrate within the item (which is usually empty).
Decoder's recursiveFlag feature generalized as a user callback function which is passed an uninitialized object recovered from substrate and its uninterpreted payload.
Catch inappropriate substrate type passed to decoder.
Expose tagMap/typeMap/Decoder objects at DER decoder to uniform API.
Obsolete __init__.MajorVersionId replaced with __init__.__version__ which is now in-sync with distutils.
Package classifiers updated.
The __init__.py's made non-empty (rumors are that they may be optimized out by package managers).
Bail out gracefully whenever Python version is older than 2.4.
Fix to Real codec exponent encoding (should be in 2's complement form), some more test cases added.
Fix in Boolean truth testing built-in methods
Fix to substrate underrun error handling at ObjectIdentifier BER decoder
Fix to BER Boolean decoder that allows other pre-computed values besides 0 and 1
Fix to leading 0x80 octet handling in DER/CER/DER ObjectIdentifier decoder. See https://www.esat.kuleuven.be/cosic/publications/article-1432.pdf
Include class name into asn1 value constraint violation exception.
Include class name into asn1 value constraint violation exception.
Fix to OctetString.prettyOut() method that looses leading zero when building hex string.
Fix to __long__() to actually return longs on py2k
Fix to __long__() to actually return longs on py2k
Fix to OctetString.__str__() workings of a non-initialized object.
Fix to quote initializer of OctetString.__repr__()
Minor fix towards ObjectIdentifier.prettyIn() reliability
ObjectIdentifier.__str__() is aliased to prettyPrint()
Exlicit repr() calls replaced with '%r'
Hex/bin string initializer to OctetString object reworked (in a backward-incompatible manner)
Hex/bin string initializer to OctetString object reworked (in a backward-incompatible manner)
Fixed float() infinity compatibility issue (affects 2.5 and earlier)
Fixed a bug/typo at Boolean CER encoder.
Major overhawl for Python 2.4 -- 3.2 compatibility: + get rid of old-style types + drop string module usage + switch to rich comparation + drop explicit long integer type use + map()/filter() replaced with list comprehension + apply() replaced with */**args + switched to use 'key' sort() callback function + support both __nonzero__() and __bool__() methods + modified not to use py3k-incompatible exception syntax + getslice() operator fully replaced with getitem() + dictionary operations made 2K/3K compatible + base type for encoding substrate and OctetString-based types is now 'bytes' when running py3k and 'str' otherwise + OctetString and derivatives now unicode compliant. + OctetString now supports two python-neutral getters: asOcts() & asInts() + print OctetString content in hex whenever it is not printable otherwise + in test suite, implicit relative import replaced with the absolute one + in test suite, string constants replaced with numerics
Fix to base10 normalization function that loops on univ.Real(0)
Fix to base10 normalization function that loops on univ.Real(0)
ASN.1 Real type is now supported properly.
ASN.1 Real type is now supported properly.
Objects of Constructed types now support __setitem__()
Set/Sequence objects can now be addressed by their field names (string index) and position (integer index).
Typo fix to ber.SetDecoder code that prevented with schema decoding operation.
Fix to explicitly tagged items decoding support.
Fix to OctetString.prettyPrint() to better handle non-printable content.
Fix to repr() workings of Choice objects.
Documentation significantly improved.
Major codec re-design.
Documentation significantly improved.
ASN.1 Any type is now supported.
All example ASN.1 modules moved to separate pyasn1-modules package.
Fix to initial sub-OID overflow condition detection an encoder.
BitString initialization value verification improved.
The Set/Sequence.getNameByPosition() method implemented.
Fix to proper behaviour of PermittedAlphabetConstraint object.
Fix to improper Boolean substrate handling at CER/DER decoders.
Changes towards performance improvement:
all dict.has_key() & dict.get() invocations replaced with modern syntax (this breaks compatibility with Python 2.1 and older).
tag and tagset caches introduced to decoder
decoder code improved to prevent unnecessary pyasn1 objects creation
allow disabling components verification when setting components to structured types, this is used by decoder whilst running with schema mode.
BER decoder for integer values now looks up a small set of pre-computed substrate values to save on decoding.
a few pre-computed values configured to ObjectIdentifier BER encoder.
ChoiceDecoder split-off SequenceOf one to save on unnecessary checks.
replace slow hasattr()/getattr() calls with isinstance() introspection.
track the number of initialized components of Constructed types to save on default/optional components initialization.
added a shortcut ObjectIdentifier.asTuple() to be used instead of __getitem__() in hotspots.
use Tag.asTuple() and pure integers at tag encoder.
introduce and use in decoder the baseTagSet attribute of the built-in ASN.1 types.
The individual tag/length/value processing methods of encoder.AbstractItemEncoder renamed (leading underscore stripped) to promote overloading in case
The individual tag/length/value processing methods of encoder.AbstractItemEncoder renamed (leading underscore stripped) to promote overloading in cases where partial substrate processing is required.
The ocsp.py, ldap.py example scripts added.
Fix to univ.ObjectIdentifier input value handler to disallow negative sub-IDs.
Decoder can now treat values of unknown types as opaque OctetString.
Decoder can now treat values of unknown types as opaque OctetString.
Fix to Set/SetOf type decoder to handle uninitialized scalar SetOf components correctly.
API versioning mechanics retired (pyasn1.v1 -> pyasn1) what makes it possible to zip-import pyasn1 sources (used by egg and py2exe).
API versioning mechanics retired (pyasn1.v1 -> pyasn1) what makes it possible to zip-import pyasn1 sources (used by egg and py2exe).
Allow any non-zero values in Boolean type BER decoder, as it's in accordnance with the standard.
Allow any non-zero values in Boolean type BER decoder, as it's in accordnance with the standard.
Constraints derivation verification (isSuperTypeOf()/isSubTypeOf()) fixed.
Make use of setuptools.
Constraints derivation verification (isSuperTypeOf()/isSubTypeOf()) fixed.
Fix to constraints comparation logic -- can't cmp() hash values as it may cause false positives due to hash conflicts.
Your coding agent can read these notes before it upgrades. Set up the MCP server →