Commit Graph

46 Commits

Author SHA1 Message Date
Jack Grigg
49f119fb03 ff: Remove PrimeFieldRepr trait
The ff::PrimeField::Repr associated type now has the minimal necessary
bounds, which can be satisfied by a newtype around a byte array.
2020-04-23 18:15:14 +12:00
Jack Grigg
1fe3e3784c ff: Add Ord bound to PrimeField 2020-04-23 17:31:33 +12:00
Jack Grigg
08500ee712 ff: PrimeField: BitAnd<u64, Output = u64> + Shr<u32, Output = Self> 2020-04-23 16:23:24 +12:00
Jack Grigg
1fdca393bb ff: PrimeField::{is_even, is_odd} 2020-04-23 16:23:24 +12:00
Jack Grigg
232f0a50b8 ff: Rework BitIterator to work with both u8 and u64 limb sizes
This enables BitIterator to be used with both the byte encoding and limb
representation of scalars.
2020-04-23 16:23:24 +12:00
Jack Grigg
fd79de5408 ff: Add PrimeField: From<u64> constraint 2020-04-23 16:23:24 +12:00
Jack Grigg
b6457a905b ff: Move pow_vartime into a trait that is generic over the limb size
The trait is implemented by default for u8 and u64, allowing pow_vartime
to be used with both the byte encoding and limb representation of field
elements.
2020-03-28 00:27:59 +13:00
Jack Grigg
2942e9a7e6 Generate addition chains inside Field::invert and SqrtField::sqrt 2020-03-14 10:54:22 +13:00
Jack Grigg
232fb4b7a3 Procedural macro for fixed-exponent variable-base modular exponentiation
Uses the addchain crate to obtain an addition chain for the exponent,
and then generates the corresponding constant-time square-and-multiply
algorithm.
2020-03-14 10:54:22 +13:00
Jack Grigg
2df2a2b2f2 Merge branch 'develop' 2020-03-14 10:36:58 +13:00
Sean Bowe
100878cd14
Version bump of all crates (except librustzcash) 2020-03-12 15:59:19 -06:00
Sean Bowe
31d887c943
Merge commit 'd7f78db121ee6f720e97401ded0c9c597d1a4857' into depends-updates-2 2020-03-03 17:44:28 -07:00
Jack Grigg
620213a0f0 ff_derive: Fix a clippy issue in generated code
This shows up as a clippy warning in the pairing crate.
2020-01-14 22:00:50 -05:00
Jack Grigg
61f052a68f ff: Use readable literals 2020-01-14 22:00:17 -05:00
Jack Grigg
00a4e1388b ff: Make byteorder an optional dependency under the std feature flag
Building ff with the std feature flag was previously broken because it
required importing byteorder functionality behind the byteorder/std
feature flag. We don't use byteorder inside ff in no_std mode, so we can
just make it optional.
2020-01-14 22:00:16 -05:00
Jack Grigg
8887414c49 ff_derive: Fix various clippy issues 2020-01-14 21:59:45 -05:00
Jack Grigg
56999d0f73
Constant-time field inversion in ff_derive using Field::pow_vartime
This is around 2.5-3x slower than the non-constant-time inversion. We
can regain some of this speed later by dynamically generating addition
chains.
2019-12-19 12:25:39 -06:00
Jack Grigg
26ef9c9842
Pass modulus to prime_field_constants_and_sqrt by reference 2019-12-19 12:18:09 -06:00
Jack Grigg
ec2c304efd
no_std support for ff crate 2019-12-14 12:55:34 +00:00
Jack Grigg
1c9f5742fa
Improve Field::pow API and impl
Renamed to Field::pow_vartime to indicate it is still variable time with
respect to the exponent.
2019-12-14 12:27:48 +00:00
Jack Grigg
3d2acf48ce
Constant-time field square root
WARNING: THIS IS NOT FULLY CONSTANT TIME YET!

This will be fixed once we migrate to the jubjub and bls12_381 crates.
2019-12-13 20:13:30 +00:00
Jack Grigg
40749da9a7
Constant-time field inversion
WARNING: THIS IS NOT ACTUALLY CONSTANT TIME YET!

The jubjub and bls12_381 crates will replace our constant-time usages,
but we NEED to fix ff_derive because other users will expect it to
implement the Field trait correctly.
2019-12-13 19:46:04 +00:00
Jack Grigg
662be3551f
impl ConditionallySelectable for Field 2019-12-12 23:15:48 +00:00
Jack Grigg
cded08b0c5
Make Field::square take &self and return Self 2019-12-12 23:09:28 +00:00
Jack Grigg
9dac748224
Make Field::double take &self and return Self 2019-12-12 22:59:18 +00:00
Jack Grigg
91c32f1c7c
Move from Field::negate to Neg operator 2019-12-12 22:52:17 +00:00
Jack Grigg
27c8f34601
Move Field operations to operator-backed traits
The ff_derive, pairing, zcash_primitives::jubjub, and bellman dummy_engine
changes are minimally implemented on top of the existing *_assign()
functions.
2019-12-12 21:19:46 +00:00
str4d
40d22ea2cc
Merge pull request #135 from NikVolf/extern-purge
Remove unneeded "extern crate"
2019-10-31 17:12:26 +00:00
NikVolf
7844394364 Remove unneeded extern crate 2019-10-08 16:12:14 +03:00
Jack Grigg
216f0f62a0
ff 0.5.0 2019-10-08 17:43:33 +13:00
Jack Grigg
4ad3988e43
Crate docs 2019-09-24 14:23:59 +01:00
Jack Grigg
7f3036d2c8
Update READMEs 2019-09-24 14:23:55 +01:00
Jack Grigg
d9a0b9c83f
CI: Check intra-doc links
Credit: https://twitter.com/tomaka17/status/1176017851410526208
2019-09-24 10:35:12 +01:00
Jack Grigg
1d02363752
Add READMEs to Cargo.toml files
This will cause crates.io to render each crate's README as its
information page.
2019-09-23 14:42:38 +01:00
Jack Grigg
bef3e7e336
Migrate ff_derive to proc-macro2 1.0 2019-09-06 19:03:12 -04:00
Eirik Ogilvie-Wigley
76795a9014 cargo fmt 2019-08-20 22:22:03 -06:00
Eirik Ogilvie-Wigley
4b021fcf4d cargo fix --edition-idioms for ff 2019-08-20 22:01:46 -06:00
Eirik Ogilvie-Wigley
09882c6d08 Add edition = 2018 2019-08-20 18:31:20 -06:00
Eirik Ogilvie-Wigley
b35a819a09 Replace try! macro 2019-08-20 18:24:47 -06:00
Eirik Ogilvie-Wigley
e59738b4ee cargo fix --edition for ff 2019-08-20 16:45:10 -06:00
Eirik Ogilvie-Wigley
a7c5993597 cargo fmt 2019-08-15 10:41:48 -06:00
str4d
0255dca16e
Clarify masking of bits in Field::random impls
Co-Authored-By: Daira Hopwood <daira@jacaranda.org>
2019-07-26 19:43:42 +01:00
Jack Grigg
6f9083b5ab
Migrate to rand 0.7 2019-07-19 00:47:40 +02:00
Jack Grigg
83e1af104e
Migrate ff, group, pairing, and bellman to rand 0.6 2019-07-19 00:42:39 +02:00
Jack Grigg
7a6642b221
Migrate ff to rand_core 0.3 (used by rand 0.5) 2019-07-19 00:35:06 +02:00
Jack Grigg
af9f9c17ee Add 'ff/' from commit '661558e0c8a5e02e08dac6530d39b2e38919aa04'
git-subtree-dir: ff
git-subtree-mainline: 07955092f3
git-subtree-split: 661558e0c8
2019-01-06 09:37:22 +00:00