Releases: tlsfuzzer/python-ecdsa
ecdsa 0.14
tl;dr:
- support for Brainpool curves
- better test coverage, fixed bugs found by it
- support for compressed point representation
Bug fixes:
- Strict checking of DER requirements when parsing SEQUENCE, INTEGER,
OBJECT IDENTIFIER and BITSTRING objects. - DER parsers now consistently raise
UnexpectedDER
exception on malformed DER
encoded byte strings. - Make sure that both malformed and invalid signatures raise
BadSignatureError
. - Ensure that all
SigningKey
andVerifyingKey
methods that should accept
bytes-like objects actually do accept them (also avoid copying input strings). - Make
SigningKey.sign_digest_deterministic
use default object hashfunc when
none was provided. encode_integer
now works for large integers.- Make
encode_oid
andremove_object
correctly handle OBJECT IDENTIFIERs
with large second subidentifier and padding in encoded subidentifiers.
New features:
- Deterministic signature methods now accept
extra_entropy
parameter to further
randomise the selection ofk
(the nonce) for signature, as specified in
RFC6979. - Recovery of public key from signature is now supported.
- Support for SEC1/X9.62 formatted keys, all three encodings are supported:
"uncompressed", "compressed" and "hybrid". Both string, and PEM/DER will
automatically accept them, if the size of the key matches the curve. - Benchmarking application now provides performance numbers that are easier to
compare against OpenSSL. - Support for all Brainpool curves (non-twisted).
New API:
CurveFp
:__str__
is now supported.SigningKey.sign_deterministic
,SigningKey.sign_digest_deterministic
and
generate_k
: extra_entropy parameter was addedSignature.recover_public_keys
was addedVerifyingKey.from_public_key_recovery
andVerifyingKey.from_public_key_recovery_with_digest
were addedVerifyingKey.to_string
:encoding
parameter was addedVerifyingKey.to_der
andSigningKey.to_der
:point_encoding
parameter was
added.encode_bitstring
:unused
parameter was addedremove_bitstring
:expect_unused
parameter was addedSECP256k1
is now part ofcurves
*
importCurves
:__repr__
is now supportedVerifyingKey
:__repr__
is now supported
Deprecations:
- Python 2.5 is not supported any more - dead code removal.
from ecdsa.keys import *
will now import only objects defined in that module.- Trying to decode a malformed point using
VerifyingKey.from_string
will rise now theMalformedPointError
exception (that inherits from
AssertionError
but is not it). - Multiple functions in
numbertheory
are considered deprecated:phi
,
carmichael
,carmichael_of_factorized
,carmichael_of_ppower
,
order_mod
,largest_factor_relatively_prime
,kinda_order_mod
. They will
now emitDeprecationWarning
when used. Run the application or test suite
with-Wd
option or withPYTHONWARNINGS=default
environment variable to
verify if those methods are not used. They will be removed completely in a
future release. encode_bitstring
anddecode_bitstring
expect the number of unused
bits to be passed as an argument now. They will emitDeprecationWarning
if they are used in the deprecated way.modular_exp
: will emitDeprecationWarning
Hardening:
- Deterministic signatures now verify that the signature won't leak private
key through very unlikely selection ofk
value (the nonce). - Nonce bit size hiding was added (hardening against Minerva attack). Please
note that it DOES NOT make library secure against side channel attacks (timing
attacks).
Performance:
- The public key in key generation is not verified twice now, making key
generation and private key reading about 33% faster. - Microoptimisation to
inverse_mod
function, increasing performance by about
40% for all operations.
Maintenance:
- Extended test coverage to newer python versions.
- Fixes to examples in README.md: correct commands, more correct code (now works
on Python 3). - Stopped bundling
six
- Moved sources into
src
subdirectory - Made benchmarking script standalone (runnable either with
tox -e speed
, or
after installation, withpython speed.py
) - Now test coverage reported to coveralls is branch coverage, not line coverage
- Autodetection of curves supported by OpenSSL (test suite compatibility with
Fedora OpenSSL package). - More readable error messages (exceptions) in
der
module. - Documentation to
VerifyingKey
,SigningKey
and signature encoder/decoder
functions added. - Added measuring and verifying condition coverage to Continuous Integration.
- Big clean-up of the test suite, use pytest parametrisation and hypothesis
for better test coverage and more precise failure reporting. - Use platform-provided
math.gcd
, when provided.
ecdsa 0.13.3
Fix CVE-2019-14853 - possible DoS caused by malformed signature decoding
Fix CVE-2019-14859 - signature malleability caused by insufficient checks of DER encoding
Also harden key decoding from string and DER encodings.
ecdsa 0.13.2
Restore compatibility of setup.py with Python 2.6 and 2.7.
ecdsa 0.13.1
Fix the PyPI wheel - the old version included .pyc files.
ecdsa 0.13
Fix the argument order for Curve constructor (put openssl_name= at the end,
with a default value) to unbreak compatibility with external callers who used
the 0.11 convention.
ecdsa 0.12
Switch to Versioneer for version-string management (fixing the broken
ecdsa.__version__
attribute). Add Curve.openssl_name property. Mention
secp256k1 in README, test against OpenSSL. Produce "wheel" distributions. Add
py3.4 and pypy3 compatibility testing. Other minor fixes.