secp256k1

Pure Haskell Schnorr, ECDSA on the elliptic curve secp256k1 (docs.ppad.tech/secp256k1).
git clone git://git.ppad.tech/secp256k1.git
Log | Files | Refs | README | LICENSE

CHANGELOG (3882B)


      1 # Changelog
      2 
      3 - 0.5.8 (2026-08-01)
      4   * Addresses a number of minor issues found by an LLM scan:
      5 
      6     * Fixes potential out-of-bounds reads that could occur if anyone
      7       used the _no_hash-suffixed ECDSA internal entry points on invalid
      8       digest inputs.
      9 
     10     * Removes an entry point for the EC monoidal identity / point at
     11       infinity to make it into both the ECDSA and Schnorr signature
     12       machinery.
     13 
     14     * Fixes a validation lapse in sign_ecdsa, which previously e.g.
     15       accepted an invalid secret key of zero.
     16 
     17     * Fixes other minor spec conformance and testing issues.
     18 
     19 - 0.5.7 (2026-06-07)
     20   * Improves the performance of all wNAF-based signing & verification
     21     functions by about 1.5-2x, due to optimizations in 1) the
     22     constant-time wNAF scalar multiplication function, and 2) upstream
     23     modular field inversion (in ppad-fixed).
     24 
     25 - 0.5.6 (2026-06-07)
     26   * Improves the wall-clock performance of the constant-time, non-wNAF
     27     scalar multiplication function by about 35%. ECDH also speeds up
     28     proportionally as a direct result.
     29 
     30 - 0.5.5 (2026-05-22)
     31   * Adds no-hash ECDSA signature verification utilities that skip the
     32     internal SHA256 step.
     33 
     34 - 0.5.4 (2026-02-04)
     35   * Nonce generation for ECDSA is now more secure due to recent
     36     improvements in ppad-hmac-drbg. The DRBG state is now guaranteed
     37     to live in only one location on the heap, and it is now wiped
     38     explicitly after use.
     39 
     40   * ECDSA signing now allocates about 1.5 orders of magnitude less than
     41     it did previously.
     42 
     43 - 0.5.3 (2026-01-10)
     44   * Bumps the ppad-sha256 and ppad-hmac-drbg dependencies.
     45 
     46 - 0.5.2 (2025-12-28)
     47   * Adds an explicit 64-bit architecture constraint.
     48   * Tests on GHC.10.3.
     49 
     50 - 0.5.1 (2025-12-27)
     51   * Improves the constant-time semantics in wNAF scalar multiplication,
     52     replacing "indexing via a constant-time selected value" by performing
     53     a full window scan and selecting via mask.
     54 
     55 - 0.5.0 (2025-12-21)
     56   * We get a significant upgrade to all functionality by pulling in the
     57     ppad-fixed library for large unsigned and Montgomery-form integers.
     58     Constant-time and allocation properties are made much more rigorous
     59     across the board, as we no longer depend on 'Integer' whatsoever.
     60 
     61     This version also improves performance radically throughout. A
     62     summary of the speedups achieved:
     63 
     64     sign_schnorr:   ~7.1x speedup
     65     verify_schnorr: ~4.5x speedup
     66     sign_ecdsa:     ~1.5x speedup
     67     verify_ecdsa:   ~4.5x speedup
     68 
     69 - 0.4.0 (2025-06-21)
     70   * Scalar multiplication, signing, verifying, and ECHD functions are now
     71     all total, returning 'Nothing' when supplied with invalid inputs.
     72   * Adds a group element check to 'mul_wnaf'.
     73 
     74 - 0.3.0 (2025-03-14)
     75   * Adds 'ecdh' for computing ECDH secrets, any given secret being the
     76     SHA256 hash of the x-coordinate of the appropriate secp256k1 point.
     77 
     78 - 0.2.2 (2025-02-16)
     79   * Exports the secp256k1 "point at infinity" as _CURVE_ZERO.
     80 
     81 - 0.2.1 (2024-12-18)
     82   * Adds 'serialize_point' for compressed-format serialization of
     83     secp256k1 points.
     84 
     85 - 0.2.0 (2024-11-08)
     86   * Adds wNAF ("w-ary non-adjacent form") scalar multiplication, as
     87     well as fast 'sign' and 'verify' variants for Schnorr and ECDSA
     88     (disambiguated by a trailing apostrophe) that make use of it.
     89 
     90     Each wNAF-powered function requires a 'Context' consisting of
     91     precomputed secp256k1 generator multiples; one can be gotten via
     92     'precompute'.
     93 
     94     Note that the non-wNAF-powered sign and verify functions have
     95     incurred a slight performance decrease (on the order of tens to
     96     hundreds of microseconds) as a result.
     97 
     98   * Adds 'parse_sig' for parsing compact signatures.
     99 
    100   * Adds a dependency on the 'primitive' library (already transitively required
    101     via 'ppad-hmac-drbg').
    102 
    103 - 0.1.0 (2024-10-19)
    104   * Initial release, supporting public key derivation and Schnorr &
    105     ECDSA signatures on secp256k1.
    106