Commit Graph
47 Commits
Author SHA1 Message Date
bmerge 183a64b08e Auto merge of #90 - str4d:ff, r=ebfull
Use ff crate for traits and impls

Depends on https://github.com/ebfull/ff/pull/1 and https://github.com/ebfull/ff/pull/5
2018-07-05 17:20:21 +00:00
bmerge 09b6e6f921 Auto merge of #82 - str4d:read-write-le, r=ebfull
Add read_le and write_le to PrimeFieldRepr
2018-05-17 17:55:18 +00:00
bmerge dbe897d365 Auto merge of #79 - ebfull:nomorenightly, r=ebfull
Remove feature(i128_type)

The `i128_type` feature was recently stabilized in Rust, so this is unnecessary now for nightly users. In fact, in a few days there should be a new Rust beta (`1.26`) containing stable support for `i128_type`, meaning that (for Zcash) we can switch to the beta compiler for all future Rust development, and even switch to the stable compiler in six weeks when that's released.
2018-03-30 23:55:32 +00:00
bmerge ef7ade8c2c Auto merge of #78 - ebfull:release-0.14, r=ebfull
Release of pairing 0.14.0.

This release makes some changes in response to an audit of this library, as well as some obversations about the API that I made. Some names were changed (`divn` -> `shr`, `muln` -> `shl`) and `add_nocarry`/`sub_noborrow` no longer return anything (as their names would suggest.) Some potentially misleading comments are fixed as well.

The release also applies `rustfmt` and new lints from `clippy` to the codebase, enforced by the CI on a more recent version of the Nightly compiler.

Thanks go to @jasondavies for his contributions to this release.
2018-03-05 03:31:26 +00:00
bmerge 6fea7e382d Auto merge of #77 - ebfull:rustfmt-application-2, r=ebfull
Apply rustfmt

Supersedes #76

I've made a change to the CI which checks `rustfmt` against the code. Let's see if it worked.
2018-03-05 02:49:40 +00:00
bmerge d51a5b0122 Auto merge of #73 - plutomonkey:update-rand-dependency, r=ebfull
Update "rand" dependency to 0.4.
2018-02-21 16:33:33 +00:00
bmerge da717f4472 Auto merge of #75 - ebfull:primerepr-fixes, r=ebfull
PrimeRepr improvements

These are API-breaking changes that make `PrimeRepr` a little nicer.
2018-02-21 15:56:41 +00:00
bmerge 7b6e13bcb9 Auto merge of #74 - plutomonkey:clippy, r=ebfull
Update clippy and fix code indentation.

(The code indentation issue was not caught by clippy -- I noticed it by chance!)
2018-02-14 00:03:26 +00:00
bmerge a8583dd818 Auto merge of #71 - ebfull:expose-arith, r=ebfull
Expose arithmetic

This exposes `adc`/`sbb`/`mac_with_carry` from this library for downstream use, as long as a `expose-arith` feature is enabled. We need this downstream to avoid code duplication.

This also bumps to `0.13.2`.
2017-12-05 04:43:24 +00:00
bmerge cc8be5b780 Auto merge of #70 - ebfull:comment-fixes, r=ebfull
Fix some comments

The `mod q` stuff was spotted by @Pratyush and/or @howardwu.

I just noticed the `// 2` typo.
2017-11-26 10:19:09 +00:00
bmerge ed5a7f31e2 Auto merge of #69 - ebfull:0.13.1-release, r=ebfull
Release of 0.13.1

This release features the following changes:

* The `byteorder` version is now set to `1` as conventional.
* The `CurveAffine`/`CurveProjective` traits now enforce that the scalar field of the `Engine` is the same scalar field for the curves.
* `Engine` is now `'static` and `Clone` to avoid problems with lifetime quirks and auto-derives.
* The scalar field of `Engine` is now guaranteed to be `SqrtField` which helps downstream abstractions.

In this PR I will be updating the `clippy` version and fixing any linting problems that show up. The builder should be using the newest nightly/stable versions of Rust also.
2017-11-26 04:27:58 +00:00
bmerge df9d2aaa37 Auto merge of #68 - ebfull:scalar-sqrt, r=ebfull
Scalar field should be guaranteed to be SqrtField
2017-11-26 03:50:21 +00:00
bmerge affead11a5 Auto merge of #67 - ebfull:static-engine, r=ebfull
Engine should always be 'static, for flexibility in downstream code.
2017-11-21 06:47:28 +00:00
bmerge 36ad8b672c Auto merge of #66 - ebfull:scalar-assoc, r=ebfull
Enforce that Fr of Engine is the scalar for curve points

In bellman, I want to write:

```rust
pub struct Point<C: CurveProjective>(pub C);

impl<C: CurveProjective> Copy for Point<C> { }

impl<C: CurveProjective> Clone for Point<C> {
    fn clone(&self) -> Point<C> {
        *self
    }
}

impl<C: CurveProjective> Group<C::Engine> for Point<C> {
    fn group_zero() -> Self {
        Point(C::zero())
    }
    fn group_mul_assign(&mut self, by: &C::Scalar) {
        self.0.mul_assign(by.into_repr());
    }
    fn group_add_assign(&mut self, other: &Self) {
        self.0.add_assign(&other.0);
    }
    fn group_sub_assign(&mut self, other: &Self) {
        self.0.sub_assign(&other.0);
    }
}
```

However, this doesn't typecheck because the compiler cannot know that the `Engine`'s `Fr` type (as dictated by the `Group` trait) is the same as the `Scalar` type of the `CurveProjective` point. This can be solved with a where bound over the trait (for now), but it is generally a good idea for this to be constrained in `pairing`.
2017-11-20 19:26:16 +00:00
bmerge 5d9f77f5bf Auto merge of #65 - ebfull:byteorder-version, r=ebfull
Use 1 for the byteorder crate's version.
2017-10-12 17:48:25 +00:00
bmerge 48044a853f Auto merge of #64 - ebfull:bump-13, r=ebfull
Bump version to 0.13.0

After #58 and #63 are merged.
2017-10-12 17:20:04 +00:00
bmerge 364796d88c Auto merge of #58 - ebfull:derive-clone, r=ebfull
Derive `Clone` for G1/G2 encodings.

AFAIK this will finally work on stable when the next version of Rust is released.

Closes #55
2017-10-12 16:45:21 +00:00
bmerge 30ae5d6313 Auto merge of #63 - ebfull:rand-unknown-exponent, r=ebfull
G1/G2 rand() should produce elements of unknown exponent.

Closes #60.
2017-10-12 16:16:52 +00:00
bmerge 044256c2f7 Auto merge of #62 - mmaker:feature/scale_by_cofactor, r=ebfull
Add "scale_by_cofactor".

Add a function for Affine types that multiplies point by the cofactor of the
group. If the points are in the group, they'll thus end up in the
correct subgroup.

note: this patch is already being tested with previous unittests.
note: this patch raises warning for unused functions and consts.
2017-10-09 23:15:59 +00:00
bmerge dfb836170b Auto merge of #61 - ebfull:minor-changes, r=ebfull
Minor changes
2017-10-05 18:36:27 +00:00
bmerge f9d4c8b6aa Auto merge of #57 - ebfull:relic-interop, r=ebfull
RELIC interop

Closes #2

RELIC has changed the G2 generator to match ours: https://github.com/relic-toolkit/relic/commit/25aafecbecba237a786aa8881719b4a95eecefbc

RELIC will not have the same serialization as us.

One last difference is that RELIC conjugates the pairing result to account for the negative curve parameter. It doesn't matter for BLS curves but it's strictly more correct.
2017-10-04 15:51:28 +00:00
bmerge a8bf8362da Auto merge of #54 - ebfull:version-bump-0.12.0, r=ebfull
Bump version to 0.12.0.
2017-09-28 23:39:17 +00:00
bmerge 3e1562445a Auto merge of #53 - ebfull:assoc-consts, r=ebfull
Use associated constants for simple constants like these.

Closes #39.
2017-09-28 22:10:55 +00:00
bmerge 5bb8e3a841 Auto merge of #51 - ebfull:several-fixups, r=ebfull
Several fixups

Closes #50
Closes #48
Closes #46

Also, CI changes this PR will test:

Closes #43
Closes #44
2017-09-28 20:12:59 +00:00
bmerge 2540ab30fb Auto merge of #47 - ebfull:stable-wnaf, r=ebfull
Introduce a more typesafe wNAF API, and remove the unstable-wnaf feature

Closes #27.
2017-09-28 17:58:18 +00:00
bmerge 68b57b2ce4 Auto merge of #49 - ebfull:simplify-bench, r=ebfull
Simplify `pairing_benches`.
2017-09-28 17:33:23 +00:00
bmerge 1398a32b3a Auto merge of #42 - str4d:36-tests-on-stable, r=ebfull
Move benchmarks under benches/ so tests compile on stable

Closes #36.
2017-09-27 17:04:05 +00:00
bmerge 9b6fb37533 Auto merge of #41 - str4d:23-debug-trait, r=ebfull
Force public structures to implement Debug

Closes #23.
2017-09-27 06:04:17 +00:00
bmerge 57de78f4f1 Auto merge of #38 - mmaker:feature/legendre-symbol, r=ebfull
Add Legendre symbol.
2017-08-24 19:24:15 +00:00
bmerge c4c6e25bc0 Auto merge of #37 - ebfull:0.11-release, r=ebfull
Release 0.11.
2017-08-22 21:37:06 +00:00
bmerge dcbd0f3d0c Auto merge of #35 - ebfull:stable-arith, r=ebfull
Introduce stable arithmetic to avoid nightly/unstable features for some platforms

This PR allows the user to opt-out of the "u128-support" feature so that they can use the stable compiler and avoid the unstable `i128_type` feature in the Rust compiler. (Pass `--no-default-features` to opt out.)

This roughly triples the cost of everything in my experience, but it's necessary on some platforms (`arm-linux-androideabi`) which Rust/LLVM doesn't compile 128-bit integers for correctly yet.

**Before this can be merged the CI needs to test against this being enabled or disabled.**
2017-08-22 17:53:46 +00:00
bmerge 68747b4174 Auto merge of #34 - mmaker:fix/is_in_correct_subgroup, r=ebfull
s/is_in_correct_subgroup/is_in_correct_subgroup_assuming_on_curve/

I added a new method`is_in_correct_subgroup_assuming_on_curve` and added the method `is_in_correct_subgroup` for the `CurveAffine` trait.
2017-08-16 16:26:16 +00:00
bmerge 3f55cda9d1 Auto merge of #33 - plutomonkey:fix-use, r=ebfull
Remove redundant `use`.
2017-08-15 19:06:15 +00:00
bmerge 2eb25d2298 Auto merge of #32 - plutomonkey:fix-const, r=ebfull
Replace inline value with const.
2017-08-14 17:57:37 +00:00
bmerge 990401395c Auto merge of #31 - plutomonkey:fix-doc, r=ebfull
Fix some minor typos in docs.
2017-08-14 15:43:05 +00:00
bmerge d72929f64e Auto merge of #26 - ebfull:even-more-adjustments, r=ebfull
Even more adjustments

Closes #22
Closes #24
Closes #25
2017-08-01 17:38:38 +00:00
bmerge aa5d634c04 Auto merge of #21 - ebfull:bump-again, r=ebfull
Version bump to 0.10.1
2017-07-24 15:52:14 +00:00
bmerge c643f0b1fa Auto merge of #20 - ebfull:pairing_with, r=ebfull
Add pairing_with API.

I needed this for something I'm doing so I just wrote it.

Closes #8
2017-07-23 22:56:39 +00:00
bmerge f51a383ef1 Auto merge of #19 - ebfull:ohtenrelease, r=ebfull
Version bump.
2017-07-18 19:38:37 +00:00
bmerge 8fc026bb61 Auto merge of #18 - ebfull:primefieldreprtests, r=ebfull
Random encoding/decoding tests for `PrimeFieldRepr`
2017-07-18 17:20:57 +00:00
bmerge a6528a7876 Auto merge of #17 - ebfull:various-improvements, r=ebfull
Group encoding negative test vectors

Closes #10

Also simplifies the encoding code, which has the side-effect of being useful for testing. Also adds more descriptive error reporting throughout the API. Also ensures use of Debug/Display are consistent with standard expectations.
2017-07-18 16:21:39 +00:00
bmerge 7c35f2b8b0 Auto merge of #16 - ebfull:clippy-impl, r=ebfull
Enable clippy linting

Closes #5
2017-07-17 03:51:15 +00:00
bmerge 6df2c003c7 Auto merge of #15 - ebfull:serialization-impl, r=ebfull
Implements and documents serialization

Closes #11.
2017-07-17 03:28:05 +00:00
bmerge e282bc095a Auto merge of #13 - ebfull:fix-comment, r=ebfull
Fix comment about sqrt.

Still just testing CI stuff.
2017-06-19 22:40:09 +00:00
bmerge be1961124c Auto merge of #12 - ebfull:version-bump, r=ebfull
Version bump
2017-06-19 18:38:01 +00:00
bmerge 8ff6ce741a Auto merge of #10 - ebfull:remove-travis, r=ebfull
Remove travis CI.
2017-06-19 17:40:12 +00:00
bmerge 732af319fe Auto merge of #9 - ebfull:various-improvements, r=ebfull
Various improvements to project structure and implementation

This makes wNAF/multiexp more modularized and abstract (for use later in remodeling groth) and starts moving other things around.

Also, good chance to start working on buildbot.
2017-06-19 05:55:32 +00:00