#crypto #ECDSA #secp256k1 #libsecp256k1 #bitcoin


Rust bindings for Pieter Wuille’s libsecp256k1 library. Implements ECDSA for the SECG elliptic curve group secp256k1 and related utilities.

2 releases

Uses old Rust 2015

0.17.3 Jul 1, 2020
0.17.2 Jul 1, 2020

#128 in Cryptography

Download history 5/week @ 2020-08-06 6/week @ 2020-08-13 7/week @ 2020-08-20 38/week @ 2020-08-27 34/week @ 2020-09-03 19/week @ 2020-09-10 5/week @ 2020-09-17 12/week @ 2020-09-24 5/week @ 2020-10-01 33/week @ 2020-10-08 11/week @ 2020-10-15 9/week @ 2020-10-22 2/week @ 2020-10-29 9/week @ 2020-11-05 3/week @ 2020-11-12 5/week @ 2020-11-19

138 downloads per month
Used in 7 crates (6 directly)

CC0 license

2.5K SLoC

Build Status

Full documentation


This is a fork of https://github.com/rust-bitcoin/rust-secp256k1, the alterations are minor and relating directly to keeping up-to-date dependencies.


rust-secp256k1 is a wrapper around libsecp256k1, a C library by Pieter Wuille for producing ECDSA signatures using the SECG curve secp256k1. This library

  • exposes type-safe Rust bindings for all libsecp256k1 functions
  • implements key generation
  • implements deterministic nonce generation via RFC6979
  • implements many unit tests, adding to those already present in libsecp256k1
  • makes no allocations (except in unit tests) for efficiency and use in freestanding implementations


Contributions to this library are welcome. A few guidelines:

  • Any breaking changes must have an accompanied entry in CHANGELOG.md
  • No new dependencies, please.
  • No crypto should be implemented in Rust, with the possible exception of hash functions. Cryptographic contributions should be directed upstream to libsecp256k1.
  • This library should always compile with any combination of features on Rust 1.22.

A note on Rust 1.22 support

The build dependency cc might require a more recent version of the Rust compiler. To ensure compilation with Rust 1.22.0, pin its version in your Cargo.lock with cargo update -p cc --precise 1.0.41. If you're using secp256k1 in a library, to make sure it compiles in CI, you'll need to generate a lockfile first. Example for Travis CI:

  - if [ "$TRAVIS_RUST_VERSION" == "1.22.0" ]; then
    cargo generate-lockfile --verbose && cargo update -p cc --precise "1.0.41" --verbose;


~16K SLoC