Commit Graph

688 Commits

Author SHA1 Message Date
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
Sean Bowe b8394bf14d
Fix some comments. 2017-11-26 03:09:06 -07: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
Sean Bowe bb1ced0bd7
Update clippy version. 2017-11-25 21:32:14 -07:00
Sean Bowe 566f100480
Release of 0.13.1. 2017-11-25 21:01:55 -07: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
Sean Bowe aa0cc06e5e
Scalar field should be guaranteed to be SqrtField. 2017-11-25 20:57:10 -07:00
Sean Bowe 1fc640e88f Guarantee that we inherit the correct variable type. 2017-11-24 10:14:11 -07:00
Sean Bowe 92029393f6 Guarantee that variables are Copy+Clone. 2017-11-22 22:55:32 -07:00
Sean Bowe 1d394e00f6 Allow linear combination terms to be inspected for downstream evaluation. 2017-11-22 21:11:41 -07:00
Sean Bowe e54c4bc1b3 Rename to `namespace_public`. 2017-11-21 14:00:00 -07:00
Sean Bowe af91dcda33 Infrastructure for public input namespacing. 2017-11-21 13:44:56 -07:00
Sean Bowe b7f2f9e409 Part one of Bellman being recoded. 2017-11-21 01:59:49 -07: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
Sean Bowe 4a1ac94799
Implement `Clone` for Bls12. 2017-11-20 23:53:58 -07:00
Sean Bowe 4b366a143d
Ensure `Engine`'s are always Clone. 2017-11-20 23:20:11 -07:00
Sean Bowe 6d55a4052a Move everything into `oldsrc`. 2017-11-20 23:01:15 -07:00
Sean Bowe 945d86fe7d Make the namespacing not introduce too much indirection. 2017-11-20 15:50:41 -07: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
Sean Bowe f32cb40929
Engine should always be 'static, for flexibility in downstream code. 2017-11-20 12:22:51 -07:00
Sean Bowe a1e1aa30b5 More infrastructure for test development. 2017-11-18 20:10:47 -07:00
Sean Bowe 35314c8771
Initial commit 2017-11-13 01:54:13 -07:00
Sean Bowe 3ee1a576f4 Bump version 2017-11-13 01:36:54 -07:00
Sean Bowe 471db6ab27
Enforce that Fr of Engine is the scalar for curve points, for simpler downstream abstractions. 2017-11-12 16:19:08 -07:00
Sean Bowe 7df272b349 Make license files/copyright identical to `pairing` crate. 2017-11-12 15:56:03 -07:00
Sean Bowe 13a5cbf9d5 Modify the public api surrounding multiexp. 2017-11-12 15:52:10 -07:00
Sean Bowe e4c62180d7 Use a basic heuristic to choose c for multiexp. 2017-11-12 15:50:34 -07:00
Sean Bowe b15f5f6f43 Fix some warnings and TODO's. 2017-11-12 13:45:13 -07:00
Sean Bowe d616362884 Add `TestConstraintSystem` 2017-11-12 13:26:03 -07:00
Sean Bowe bc19c76326 Change API to support constraint/variable annotation. 2017-11-11 04:50:30 -07:00
Sean Bowe 3bb6596507 Don't make u128-support a default feature anymore. 2017-11-05 19:35:28 -07:00
Sean Bowe 326996139e Update to use the latest version of pairing library. 2017-10-22 05:45:26 -06: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
Sean Bowe 342b94c76b
Use "1" for the byteorder crate's version. 2017-10-12 11:20:57 -06: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
Sean Bowe 39c25cd506
Bump version to 0.13.0 2017-10-10 01:54:53 -06:00
Sean Bowe 12b9606b9c
G1/G2 rand() should produce elements of unknown exponent. 2017-10-10 01:13:35 -06: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
Sean Bowe 65e50a9e5a
Allow `scale_by_cofactor` to be dead code temporarily. 2017-10-09 17:14:36 -06:00
Michele Orrù e5607bb528 Add "scale_by_cofactor".
Add a function for Affine types that multiplies point by the cofactor of the
group.
2017-10-09 10:04:22 +02:00
bmerge dfb836170b Auto merge of #61 - ebfull:minor-changes, r=ebfull
Minor changes
2017-10-05 18:36:27 +00:00
Sean Bowe dbac57c27b
Further refactoring of get_point_from_x() 2017-10-05 12:35:04 -06:00
Sean Bowe 683f21a4d5
Remove spurious newline. 2017-10-04 14:53:42 -06:00
Sean Bowe 85b95750e2
Fix comment about u128-support. 2017-10-04 14:09:40 -06:00
Sean Bowe 931257599d
Refactor code for finding affine points from x-coordinates. 2017-10-04 11:43:42 -06: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: 25aafecbec

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
Sean Bowe 60887521b6
Derive `Clone` for {G1|G2}{Uncompressed|Compressed}. 2017-10-03 14:35:00 -06:00
Sean Bowe 18c75f11ab
Account for negative curve parameter to be compatible with RELIC. 2017-10-03 14:27:01 -06:00