- Support for python3.13
uv
for package management- Typing for all non C extension modules in this package and a corresponding
py.typed
marker - Github Actions for testing and publishing
- Pre-commit hooks to enforce formatting and type checks
- Functions in
fastedcsa.keys
specific to public and private keys:export_private_key
export_public_key
import_private_key
import_public_key
__self__
tofastecdsa.curve.Curve
fastecdsa.encodng.KeyEncoder
interface:- All methods changed from static methods to instance methods
- Encoders always return
bytes
- Decoders always take
bytes
for key data - Private key methods do not consume or return public key data in their signatures
- Private key encoding does take a curve parameter as some encoders do encode the public key as part of the encoded private key (in this case the public key is computed using the private key and the curve)
- Support for python3.7
- Support for python3.8
int
tuples are no longer allowed to be passed asQ
infastecdsa.ecdsa.verify
.Q
must be of typepoint.Point
now.fastecdsa.keys.export_key
andfastecdsa.keys.import_key
. Superseded by functions specific to public and private keys.- Default curve parameter from
fastecdsa.point.Point
constructor __unicode__
fromfastecdsa.point.Point
- Support for python3.12
- CI/CD pipelines
- Memory corruption issue. Special thanks to keltecc for discovering this and to Snyk for reporting it.
- Building wheels via CI/CD for the following architectures
- Linux x86_64
- Linux i686
- MacOS x86_64
- MacOS arm64 (M1)
- Support for python3.6
- Minor doc issues and doc build
- Support for python3.10
- Error when adding two equal points where one point's coordinates are not reduced mod p (issue #75)
- Incorrect DER encoding of data with length >=0x80 (issue #61)
- Support for python3.9
- Support for python3.5
- Multiplying by negative scalars (issue #70)
- Reading and writing keys to disk using encoders that output bytes (PR #62)
fastecdsa.keys.import_key
now has a consistent return type (Tuple[Optional[int], Point]
) for public and private keys. Previously public key imports returnedPoint
, they now returnTuple[None, Point]
, in other words a tuple with the first entry beingNone
(the private key) and the second entry being the point representing the public key.
- Timing leakage from nonce bit length aka the Minerva vulnerability (PR #60)
- Reduction by base point order in scalar multiplication breaks when input point does not have that order (PR #58)
- Edge case for curves with order 2 was not handled (PR #58)
- Signature verification of pre-hashed messages broken (PR #56)
- Multiplying base point by curve order caused an error (issue #54)
- Point at infinity handling in C extensions (issue #52)
- DER signature decoding that assumed length was always encoded in one byte
- RFC6979 nonce generation for signatures on pre-hashed messages (issue #46)
- Curves W25519 and W448 from NIST.SP.800-186
- Curves with no OID are not added to the lookup by OID map
- Type validation for operations of points (issue #50)
- This changelog
- Type hints for clearer function signatures
- Support for python2.x
- Support for python3.4 and older
- Various unused imports
- Issue with benchmark script when C extensions weren't built in place (issue #44)