ecdsa 0.17.0
          ·
          
            215 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_encodingskeyword 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_encodingkeyword argument ofVerifyingKey.to_pem(),
 VerifyingKey.to_der(),SigningKey.to_pem(), orSigningKey.to_der()to
 specify the format. By defaultnamed_curvewill be used, unless the
 curve doesn't have an associated OID (as will be the case for an unsupported
 curve), thenexplicitencoding 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_encodingskeyword argument in
 ECDH.load_received_public_key_bytes(),VerifyingKey.from_string(),
 VerifyingKey.from_pem(),VerifyingKey.from_der().
- PointJacobiand- Pointnow inherit from- AbstractPointthat implements
 the methods for parsing points. That added- from_bytes()and
 - to_bytes()methods to both of them.
- Curve parameters can now be read and written to PEM and DER files. The
 Curveclass 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, andSigningKeyso that it behaves
 consistently and in the expected way both in Python 2 and Python 3.
- Implement lock-less algorithm inside PointJacobifor 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.pyscript 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.