1177 Commits

Author SHA1 Message Date
Jakub Nabaglo
e50d79a347 Tweaks to CrandallField::product 2021-09-08 17:15:56 -07:00
Jakub Nabaglo
3674ceb571 Lints 2021-09-08 12:15:25 -07:00
Jakub Nabaglo
db3171bb81 Conversion to/from statically-sized arrays 2021-09-08 12:15:25 -07:00
Jakub Nabaglo
5d69d85d42 Daniel PR comments + delete throughput figures 2021-09-08 12:15:25 -07:00
Jakub Nabaglo
87f5201e6f Style (incl. Daniel PR comments) 2021-09-08 12:15:25 -07:00
Jakub Nabaglo
7ee7d8bf8a Crandall arithmetic in AVX2 2021-09-08 12:15:25 -07:00
Daniel Lubarov
3bc34c59d8
Refactor GMiMC code (#224)
* Refactor GMiMC code

Adds a sub-trait of `Field` called `GMiMCInterface`, which is similar to `PoseidonInterface`.

This lets us have different fields with different GMiMC constants in a type-safe way.

* Remove `Interface`

* Const generic for width
2021-09-07 18:28:28 -07:00
Daniel Lubarov
a2eaaceb34
Rework the field test code a bit (#225)
- Split it into two files, one for general `Field` tests and one for `PrimeField` tests.
- Replace most uses of `BigUint` in tests with `u64`. These uses were only applicable for `PrimeField`s, which are 64-bit fields anyway. This lets us delete the `BigUInt` conversion methods.
- Simplify `test_inputs`, which was originally written for large prime fields. Now that it's only used for 64-bit fields, I think interesting inputs are just the smallest and largest elements, and those close to 2^32 etc.
2021-09-07 14:17:15 -07:00
Nicholas Ward
50274883c7
Merge pull request #217 from mir-protocol/permutation
Permutation network code
2021-09-06 21:39:10 -07:00
Nicholas Ward
effcc967d0 fmt 2021-09-06 21:39:00 -07:00
Nicholas Ward
c07f99ac81 merge 2021-09-06 21:38:52 -07:00
Daniel Lubarov
676c244de7 Unused field 2021-09-06 17:01:15 -07:00
Nicholas Ward
1818e69ce3 addressed comments 2021-09-06 08:38:47 -07:00
Daniel Lubarov
a42bec0354 cargo fix 2021-09-05 22:36:10 -07:00
Daniel Lubarov
236a143abf
Move some Field members to a Field64 subtrait (#213)
* Move some Field members to a Field64 subtrait

I.e. move anything specific to 64-bit fields.

Also, relatedly,
- Tweak a bunch of prover code to require `Field64`, since 64-bit stuff is used in a couple places, like the FRI proof-of-work
- Remove `bits()`, which was unused and assumed a 64-bit field
- Rename a couple methods to reflect that they're u64 variants

There are no functional changes.

* Field64 -> PrimeField

* Remove `exp_u32`, `kth_root_u32`

* PrimeField: PrimeField

* Move `to_canonical_biguint` as well

* Add back from_noncanonical_u128
2021-09-05 10:27:11 -07:00
Nicholas Ward
0e24719908 fixes 2021-09-04 22:31:12 -07:00
Nicholas Ward
6f885db677 fixes 2021-09-04 16:44:49 -07:00
Nicholas Ward
1fb7eeb03e variable-sized tests 2021-09-04 16:29:33 -07:00
Nicholas Ward
4c3f3cda39 6x6 test 2021-09-04 16:29:33 -07:00
Nicholas Ward
4f7a587bfa fix for non-2x2 permutation case 2021-09-04 16:29:32 -07:00
Nicholas Ward
f01d373d1e made switch_bool wires routeable 2021-09-04 16:28:10 -07:00
Nicholas Ward
7acdf976c1 fixed fill_switch_gates 2021-09-04 16:28:07 -07:00
Daniel Lubarov
f89f49249a wip 2021-09-04 16:27:40 -07:00
Daniel Lubarov
ba4b03e487
Unroll a couple loops in Poseidon code (#215)
* Unroll a couple loops in Poseidon code (super hacky)

* Comments
2021-09-03 21:42:40 -07:00
Nicholas Ward
d1fea5cfd3 witnessgenerator 2021-09-03 18:07:51 -07:00
Nicholas Ward
10d016a92c chunk size as field 2021-09-03 18:07:21 -07:00
Nicholas Ward
3ad0365967 fixed infinite loop 2021-09-03 18:07:21 -07:00
Nicholas Ward
3494839227 removed more to_vec calls (within maps) 2021-09-03 18:07:21 -07:00
Nicholas Ward
260d4bd13c removed to_vec calls 2021-09-03 18:07:21 -07:00
Nicholas Ward
485d4862ff fixes 2021-09-03 18:07:21 -07:00
Nicholas Ward
4ea1df82ba fixes 2021-09-03 18:07:21 -07:00
Nicholas Ward
c2439557bf fix 2021-09-03 18:07:21 -07:00
Nicholas Ward
0f6e9c5b68 progress 2021-09-03 18:07:21 -07:00
Nicholas Ward
ab744a7c36 edits and fixes 2021-09-03 18:07:21 -07:00
Nicholas Ward
d4aa4d7153 fixes and new generator 2021-09-03 18:07:21 -07:00
Nicholas Ward
f7607dddd4 fmt 2021-09-03 18:07:21 -07:00
Nicholas Ward
fe843db57f many fixes 2021-09-03 18:07:20 -07:00
Nicholas Ward
a1d5f5b6fe progress 2021-09-03 18:07:20 -07:00
Nicholas Ward
f9a47ade33 fixes 2021-09-03 18:07:20 -07:00
Nicholas Ward
2d5f362c6a fixes 2021-09-03 18:07:20 -07:00
Nicholas Ward
013c8bb612 progress 2021-09-03 18:07:20 -07:00
Nicholas Ward
2ab37e688f progress 2021-09-03 18:07:20 -07:00
Nicholas Ward
a574fecc4d permutation progress 2021-09-03 18:07:20 -07:00
Nicholas Ward
412ada762a permutation progress 2021-09-03 18:07:20 -07:00
Nicholas Ward
b0a855a9c3 progress on permutation 2021-09-03 18:07:20 -07:00
Jakub Nabaglo
032e2feeb4 Daniel comments 2021-09-03 17:19:48 -07:00
Jakub Nabaglo
ec0195c8eb PackedField trait 2021-09-03 17:19:48 -07:00
Hamish Ivey-Law
92bc65a6b5
Native Poseidon implementation(s) (#207)
* Simplify and refactor GMiMC benchmark.

* Refactor/combine GMiMC and Rescue hash benchmarks.

* Remove old Rescue bench; rename GMiMC bench.

* Add from_canonical_u128 for fields.

* Initial version of Poseidon.

* Partial implementation of fast Poseidon.

* Complete (but broken) implementation of fast partial rounds.

* Fix index calculation.

* Add basic tests.

* Fix constants; fix bugs in fast partial round calculation.

* Rename main functions.

* Add test vectors.

* Use x^7 for s-box monomial.

* Fix s-box application in fast version.

* Make WIDTH a parameter.

* Working version with both widths.

* Updated the constants so they use x^3; added test vectors.

* Expand bench_hash to cover both widths and report relative slowdown.

* Remove references to MaybeUninit.

* First draft of refactoring the two Poseidon widths.

* Tidy up use of conversion to/from raw data.

* Add some comments.

* Refactor tests.

* Apply cargo fmt changes.

* Have `Field`s implement `PoseidonInterface` (#209)

* Have `Field`s implement `PoseidonInterface`

Rather than having a sort of "dummy struct" implement `PoseidonInterface` with the field as a generic param. I think this seems more natural and type-safe.

The type safety does come at a price -- it would be harder to do dynamic things such as taking `WIDTH` as a command line option -- but I think that's alright.

* Fix missed conflicts.

* cargo fmt fixes.

* Fix to accommodate changes in latest nightly.

Co-authored-by: Hamish Ivey-Law <426294+unzvfu@users.noreply.github.com>
Co-authored-by: Hamish Ivey-Law <hamish@ivey-law.name>

* Sanity check number of rounds.

Co-authored-by: Daniel Lubarov <daniel@lubarov.com>
2021-09-01 21:45:52 +10:00
Jakub Nabaglo
1727d2c872
Batch multiplicative inverse optimizations (#210)
* Batch multiplicative inverse optimizations

* Minor style (Daniel PR comment)
2021-08-31 15:08:39 -07:00
Daniel Lubarov
d51bb98dcc
Tweaks to reflect that we're not running clippy 2021-08-31 14:01:50 -07:00