ecdsa 0.17.0
tomato42
released this
27 May 18:14
·
197 commits
to master
since this release
New API:
- Keys that use explicit curve parameters can now be read and written.
Reading of explicit curves can be disabled by using the
valid_curve_encodings
keyword argument inVerifyingKey.from_pem()
,
VerifyingKey.from_der()
,SigningKey.from_pem()
, and
SigningKey.from_der()
. - Keys can now be written with use of explicit curve parameters,
usecurve_parameters_encoding
keyword argument ofVerifyingKey.to_pem()
,
VerifyingKey.to_der()
,SigningKey.to_pem()
, orSigningKey.to_der()
to
specify the format. By defaultnamed_curve
will be used, unless the
curve doesn't have an associated OID (as will be the case for an unsupported
curve), thenexplicit
encoding will be used. - Allow specifying acceptable point formats when loading public keys
(this also fixes a minor bug where python-ecdsa would accept raw
encoding for points in PKCS#8 files). Set of accepted encodings is controlled
byvalid_encodings
keyword argument in
ECDH.load_received_public_key_bytes()
,VerifyingKey.from_string()
,
VerifyingKey.from_pem()
,VerifyingKey.from_der()
. PointJacobi
andPoint
now inherit fromAbstractPoint
that implements
the methods for parsing points. That addedfrom_bytes()
and
to_bytes()
methods to both of them.- Curve parameters can now be read and written to PEM and DER files. The
Curve
class supports newto_der()
,from_der()
,to_pem()
, and
from_pem()
methods.
Doc fix:
- Describe in detail which methods can raise
RSZeroError
, and that
SigningKey.sign_deterministic()
won't raise it.
Bug fix:
- Correctly truncate hash values larger than the curve order (only impacted
custom curves and the curves added in this release). - Correctly handle curves for which the order is larger than the prime
(only impacted custom curves and the secp160r1 curve added in this release). - Fix the handling of
==
and!=
forPublic_key
,Private_key
,Point
,
PointJacobi
,VerifyingKey
, andSigningKey
so that it behaves
consistently and in the expected way both in Python 2 and Python 3. - Implement lock-less algorithm inside
PointJacobi
for keeping shared state
so that when calculation is aborted withKeyboardInterrupt
, the state doesn't
become corrupted (this fixes the occasional breakage of ecdsa in interactive
shells).
New features:
- The
speed.py
script now provides performance for signature verification
without use of precomputation. - New curves supported: secp112r1, secp112r2, secp128r1, secp160r1.
- Keys with explicit curve encoding are now supported.
Performance:
- Use 2-ary Non-Adjacent Form for the combined multiply-add. This speeds up
single-shot verify (i.e. without precomputation) by about 4 to 5%. - Use native Python 3.8 support for calculating multiplicative inverses.
Maintenace:
- Include Python 3.9 in PyPI keywords.
- More realistic branch coverage counting (ignore Python version-specific
branches). - Additional test coverage to many parts of the library.
- Migrate to Github Actions for Continuous Testing.