Commit Graph

87 Commits

Author SHA1 Message Date
Sean Bowe 160cb42398
Change various into_bytes to to_bytes. 2019-05-31 19:47:56 -06:00
Sean Bowe 02b05eb075
Make CompletedPoint::into_extended take ownership, and inline. 2019-05-31 19:41:15 -06:00
ebfull 803b6a3e65
Merge pull request #21 from str4d/stack-tweaks
Stack tweaks
2019-05-30 17:42:07 -06:00
Jack Grigg e1193d2ae9
impl Mul<Fr> for [Extended|Affine]NielsPoint 2019-05-29 17:30:24 +01:00
Sean Bowe 8c5adc3708
cargo fmt 2019-05-28 09:59:42 -06:00
Sean Bowe 4aebd80105
Change AffinePoint::to_niels to be a const fn. 2019-05-28 09:59:39 -06:00
Jack Grigg a6afd81603
AffineNielsPoint::multiply_bits
For parity with ExtendedNielsPoint::multiply_bits, and it is also
slightly more efficient to use if the caller is starting from an
AffinePoint.
2019-05-22 21:17:09 +01:00
Jack Grigg aa0628ffcf
ExtendedNielsPoint::multiply_bits
This allows the caller to control which stack frames pay the cost of
Montgomery reduction and scalar multiplication, by splitting
Fr::into_bytes out from the multiplication step. It also enables the
caller to drop the Montgomery multiplication and reduction round-trip if
they already have an encoded Fr element.
2019-05-22 11:41:33 +01:00
Jack Grigg c392ffbeb2
Use ExtendedNielsPoint::identity directly in ExtendedPoint::multiply
Saves two Fq multiplications and a stack allocation.
2019-05-22 11:41:33 +01:00
Jack Grigg c5bf022613
Remove unnecessary shadowing from Fq::invert and Fr::invert
Shadowing causes Rust to create new stack variables instead of reusing
the stack space. This change saves 160 bytes of stack space in
Fq::invert (a 20% saving in my tests), and 128 bytes of stack space in
Fr::invert.
2019-05-22 11:41:33 +01:00
Jack Grigg 085e8ae675
Replace unnecessary moves of Copy types with immutable references
This significantly reduces the size of the stack.
2019-05-22 11:39:16 +01:00
Jack Grigg cb57a647b5
Use CtOption from subtle crate
Closes #20.
2019-05-04 20:58:19 +01:00
Sean Bowe e72b382055
Fix comment regarding montgomery reduction 2019-03-31 23:15:27 -06:00
Sean Bowe 35d32faa63
Add implementations of is_prime_order() for AffinePoint and ExtendedPoint. 2019-03-26 21:31:34 -06:00
Sean Bowe 390aa23db2
Rename Maybe to CtOption, and do not expose submodule. 2019-03-26 21:13:50 -06:00
Sean Bowe 26de2362db
Add affine mixed addition operator overloading. 2019-03-26 20:59:28 -06:00
Sean Bowe 1d2a424c1e
Re-enable dead_code lints for EDWARDS_D/EDWARDS_D2. 2019-03-26 20:57:17 -06:00
Sean Bowe 3c630463df
Add tests for AffinePoint serialization and deserialization. 2019-03-26 20:56:56 -06:00
Sean Bowe 2601c13a2d
Remove glob import that was importing MODULUS from Fr. 2019-03-21 15:57:22 -06:00
Sean Bowe 8edc7ebe2f
Disallow unsafe code. 2019-03-21 15:52:13 -06:00
Sean Bowe 44765a7ad4
Introduce utility functions for AffinePoint and ExtendedPoint. 2019-03-21 15:47:43 -06:00
Sean Bowe 9f0b177fb7
Introduce from_raw for field elements. 2019-03-20 23:44:31 -06:00
Sean Bowe 0cc3d82d98
cargo fmt 2019-03-20 20:30:35 -06:00
Sean Bowe c0e7546f6f
Deny missing Debug implementations and documentation for public facing APIs. 2019-03-20 18:31:33 -06:00
Sean Bowe c70eac71f1
Avoid unnecessary subtraction of modulus during 512-bit reduction. 2019-03-20 18:28:24 -06:00
Sean Bowe 62e20edcf5
Make inversion API return Maybe. 2019-03-20 18:03:35 -06:00
Sean Bowe e597b7ee08
Add tests for Maybe::map and Maybe::and_then. 2019-03-20 17:48:41 -06:00
Sean Bowe 08221918bc
Make Fq square root constant time.
Co-authored-by: Jack Grigg <jack@z.cash>
Co-authored-by: Eirik0 <eirik@z.cash>
2019-03-20 15:32:06 -06:00
Sean Bowe 71d5b5a1e8
Make Fr sqrt constant time. 2019-03-19 18:06:29 -06:00
Sean Bowe 8752e54904
Make field element deserialization constant time. 2019-03-19 17:57:12 -06:00
Sean Bowe c764c97c8e
Introduce "Maybe" abstraction. 2019-03-19 16:26:39 -06:00
Sean Bowe d197cb1988
Implementation of Tonelli-Shanks that actually matches the paper, and is more efficient. 2019-03-01 20:34:53 -07:00
Sean Bowe 51a5b6ae25
Fix typo in documentation. 2019-02-22 13:49:47 -07:00
Sean Bowe d502391eef
Add more documentation. 2019-02-22 10:04:15 -07:00
Sean Bowe fd32165f1c
Various minor improvements. 2019-02-20 20:44:17 -07:00
Eirik0 b413f8b6c9 cargo fmt 2019-02-20 13:25:49 -07:00
Eirik0 27d6e94677 Add corner case tests for zero 2019-02-20 13:24:50 -07:00
ebfull 1aa0cdf63b
Merge pull request #15 from Eirik0/from-bytes-wide
From bytes wide
2019-02-19 19:52:25 -07:00
Eirik0 2da490cee3 Add from bytes wide for Fr 2019-02-10 23:09:15 -07:00
Eirik0 36a917965d Add from bytes wide for Fq 2019-02-10 22:56:57 -07:00
Eirik0 43e451f103 cargo fmt 2019-02-10 22:47:36 -07:00
Sean Bowe 812ab51091
Updates for Rust 2018 edition. 2019-02-08 19:11:29 -07:00
Eirik Ogilvie-Wigley f3c44112e6 Add test and format 2019-01-09 15:50:16 -07:00
Eirik Ogilvie-Wigley 954e5dbbd8 Remove duplicate assert 2019-01-09 15:25:37 -07:00
Eirik Ogilvie-Wigley abc25f7677 Simplify square root function for Fr 2019-01-09 15:25:36 -07:00
Eirik Ogilvie-Wigley 774be1dea6 Add scalar field Fr 2019-01-09 15:25:36 -07:00
Sean Bowe 318693246d
Add test for batch normalization. 2019-01-09 10:40:30 -07:00
Sean Bowe 55f5f4b676
Test for point multiplication. 2019-01-08 11:29:38 -07:00
ebfull d61b6bc841
Merge pull request #11 from Eirik0/fq-cleanup
Remove some mutable variables and use multiplication operator
2019-01-07 21:43:34 -07:00
Sean Bowe 62270c04fd
Implementation of basic point multiplication 2019-01-07 20:12:25 -07:00