librustzcash/README.md

68 lines
1.8 KiB
Markdown
Raw Normal View History

2017-06-25 22:09:43 -07:00
# ff
2017-06-25 22:18:32 -07:00
`ff` is a finite field library written in pure Rust, with no `unsafe{}` code.
2017-06-25 22:09:43 -07:00
## Disclaimers
* This library does not provide constant-time guarantees.
## Usage
Add the `ff` crate to your `Cargo.toml`:
```toml
[dependencies]
2019-12-21 12:35:47 -08:00
ff = "0.5"
2017-06-25 22:09:43 -07:00
```
2019-09-24 02:53:52 -07:00
The `ff` crate contains `Field`, `PrimeField`, `PrimeFieldRepr` and `SqrtField` traits.
See the **[documentation](https://docs.rs/ff/)** for more.
2017-06-25 22:09:43 -07:00
### #![derive(PrimeField)]
2019-09-24 02:53:52 -07:00
If you need an implementation of a prime field, this library also provides a procedural
macro that will expand into an efficient implementation of a prime field when supplied
with the modulus. `PrimeFieldGenerator` must be an element of Fp of p-1 order, that is
also quadratic nonresidue.
2017-06-25 22:09:43 -07:00
First, enable the `derive` crate feature:
```toml
[dependencies]
2018-07-02 15:07:41 -07:00
ff = { version = "0.4", features = ["derive"] }
```
And then use the macro like so:
2017-06-25 22:09:43 -07:00
```rust
extern crate rand;
#[macro_use]
extern crate ff;
#[derive(PrimeField)]
2017-06-27 08:27:29 -07:00
#[PrimeFieldModulus = "52435875175126190479447740508185965837690552500527637822603658699938581184513"]
#[PrimeFieldGenerator = "7"]
2017-06-25 22:09:43 -07:00
struct Fp(FpRepr);
```
2019-09-24 02:53:52 -07:00
And that's it! `Fp` now implements `Field` and `PrimeField`. `Fp` will also implement
`SqrtField` if supported. The library implements `FpRepr` itself and derives
`PrimeFieldRepr` for it.
2017-06-25 22:09:43 -07:00
## License
Licensed under either of
2019-09-24 02:53:52 -07:00
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
http://www.apache.org/licenses/LICENSE-2.0)
2017-06-25 22:09:43 -07:00
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally
submitted for inclusion in the work by you, as defined in the Apache-2.0
license, shall be dual licensed as above, without any additional terms or
conditions.