2018-03-18 18:45:38 +00:00
[![Build Status ](https://travis-ci.org/rust-bitcoin/rust-secp256k1.png?branch=master )](https://travis-ci.org/rust-bitcoin/rust-secp256k1)
2015-04-05 17:37:49 +00:00
2018-07-25 22:05:06 +00:00
[Full documentation ](https://docs.rs/secp256k1/ )
2015-04-04 17:30:07 +00:00
### rust-secp256k1
2020-11-25 22:41:02 +00:00
`rust-secp256k1` is a wrapper around [libsecp256k1 ](https://github.com/bitcoin-core/secp256k1 ),
2018-07-24 21:16:52 +00:00
a C library by Pieter Wuille for producing ECDSA signatures using the SECG curve
2015-04-04 17:30:07 +00:00
`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`
2015-04-05 16:45:40 +00:00
* makes no allocations (except in unit tests) for efficiency and use in freestanding implementations
2015-04-04 17:30:07 +00:00
2018-07-25 22:05:06 +00:00
### Contributing
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.
2020-09-21 14:09:33 +00:00
* This library should always compile with any combination of features on **Rust 1.29** .
2020-03-16 10:45:09 +00:00
2020-09-21 14:09:33 +00:00
## A note on Rust 1.29 support
2020-03-16 10:45:09 +00:00
The build dependency `cc` might require a more recent version of the Rust compiler.
2020-08-27 13:14:01 +00:00
To ensure compilation with Rust 1.29.0, pin its version in your `Cargo.lock`
2020-03-17 21:33:29 +00:00
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:
```yml
before_script:
2020-08-27 13:14:01 +00:00
- if [ "$TRAVIS_RUST_VERSION" == "1.29.0" ]; then
2020-03-17 21:33:29 +00:00
cargo generate-lockfile --verbose & & cargo update -p cc --precise "1.0.41" --verbose;
fi
```