1504 Commits

Author SHA1 Message Date
Daniel Lubarov
1d576f2046 licensing note 2022-01-03 10:00:15 -08:00
Daniel Lubarov
3de8d36c3a
Use single-point opening expressions (#416)
I.e. instead of opening `Z` at `zeta` and `g zeta` by running FRI on a quotient involving an interpolant, we just run FRI on two separate opening expressions, one for `zeta` and one for `g zeta`.

A few motivations for this:
- I think this will make it slightly easier to generalize our FRI code to work with STARKs. I.e. if we have an object representing the structure of polynomial openings in an IOP, that object will be slightly simpler.
- It's less code. We could potentially remove some more code, e.g. the generality of `compute_quotient` is no longer needed, but I left it for now.
- It saves 3 gates!
2022-01-03 08:34:44 -08:00
Daniel Lubarov
6991257da5
Simpler Keccak pseudo-permutation (#415)
* Simpler Keccak pseudo-permutation

After rejecting a value, I think it's a little simpler to continue the hash chain vs retrying with an incremented nonce.

* PR feedback

* fix byte order
2022-01-02 21:36:41 -08:00
Daniel Lubarov
23f0e49c87
Separate some circuit logic from FRI code (#414)
My goal is to make the FRI code independent of circuit objects like `CommonCircuitData`, so that it can be reused by STARK code which won't involve those objects.

A few changes here:

- Move `rate_bits` and `cap_height` into `FriConfig`.
- Move `degree_bits` into `FriParameters` (since it's instance size specific).
- Make `FriParams` contain `FriConfig`, so FRI methods can take just the former and access fields in both.
- Replace `CommonCircuitConfig` with `FriParams` in FRI prover methods.

The FRI verifier methods still involve circuit objects, as they have PLONK logic in `fri_combine_initial`. Will think about how to deal with that after this.
2022-01-02 11:26:26 -08:00
wborgeaud
a452da523b
Merge pull request #407 from mir-protocol/challenger_outer_hash
Use the outer hash in the challenger
2022-01-02 10:24:29 +01:00
wborgeaud
7b03ebe1b8 PR feedback 2022-01-02 10:16:35 +01:00
Daniel Lubarov
0a5a224900 import 2022-01-01 11:05:46 -08:00
Daniel Lubarov
cf6713e737 Remove accidental redundant struct 2022-01-01 09:48:20 -08:00
Jakub Nabaglo
8d093a8440
Decrease CI scratch disk space (#412)
* Decrease CI scratch disk space

* Daniel PR review
2021-12-30 18:22:35 -08:00
Jakub Nabaglo
ea43053532
Square trait (#409)
* `Squarable` trait

* Minor style

* Further minor style (Squarable -> Square to match Rust convention)
2021-12-30 12:11:02 -08:00
Jakub Nabaglo
5a379f15e7
Rename PackedField constants ZERO -> ZEROS, ONE -> ONES (#408) 2021-12-29 16:56:38 -08:00
wborgeaud
77a2fc6100 Comment for KeccakPermutation 2021-12-29 16:58:31 +01:00
wborgeaud
df2b6e76b7 Move permutations to their specific files 2021-12-29 16:54:27 +01:00
wborgeaud
a0a42e4bef Move hashes to their specific files 2021-12-29 16:51:46 +01:00
wborgeaud
314a5845b7 Use outer hash in Challenger 2021-12-29 16:41:43 +01:00
Daniel Lubarov
c126641c5d
Split into crates (#406)
* Split into crates

I kept other changes to a minimum, so 95% of this is just moving things. One complication that came up is that since `PrimeField` is now outside the plonky2 crate, these two impls now conflict:
```
impl<F: PrimeField> From<HashOut<F>> for Vec<u8> { ... }
impl<F: PrimeField> From<HashOut<F>> for Vec<F> { ... }
```
with this note:
```
note: upstream crates may add a new impl of trait `plonky2_field::field_types::PrimeField` for type `u8` in future versions
```
I worked around this by adding a `GenericHashOut` trait with methods like `to_bytes()` instead of overloading `From`/`Into`. Personally I prefer the explicitness anyway.

* Move out permutation network stuff also

* Fix imports

* Fix import

* Also move out insertion

* Comment

* fmt

* PR feedback
2021-12-28 11:51:13 -08:00
Jakub Nabaglo
107ba3ab05
Fix build on 32-bit Intel (#405) 2021-12-21 12:00:33 -08:00
Daniel Lubarov
04dce92a3a
Print timing for a regular Poseidon recursive proof (#403)
* Print timing for a regular Poseidon recursive proof

Rather than the Keccak-256 proof. I kept it but hid the timing since it's less important to us. Alternatively we could test Keccak-256 only in the size-optimized test, since that's basically testing a bridge proof. Let me know if you have a preference.

* Remove Keccak proof per PR discussion
2021-12-20 18:52:55 -08:00
Jakub Nabaglo
d4a0a8661e
Packed evaluation for most gates (#395)
* Most gates support packed evaluation

* ComparisonGate

* Minor: outdated todo marker

* Revert superfluous change

* Post-merge fixes

* Daniel comments

* Minor: Markdown in comments
2021-12-20 15:08:07 -08:00
Jakub Nabaglo
bbbb57caa6
Simplify AVX2 Goldilocks (#399)
* Simplify AVX2 Goldilocks

* Fixes

* Lints

* Docs

* Minor doc

* Minor: typo
2021-12-20 13:41:42 -08:00
wborgeaud
2fc1a6156a
Merge pull request #404 from mir-protocol/gmimc_config
GMiMC config
2021-12-20 19:23:58 +01:00
wborgeaud
514cca7ebb PR feedback 2021-12-20 19:13:12 +01:00
wborgeaud
fd03a187ce Minor 2021-12-20 16:46:31 +01:00
wborgeaud
2e4bea59ee Multi-hash test 2021-12-20 16:16:05 +01:00
wborgeaud
156fd45b83 Add GMiMC config 2021-12-20 16:07:14 +01:00
wborgeaud
30cf4cd0a8
Merge pull request #398 from mir-protocol/injective_hash_conversion
Use 7 bytes to represent a field element to avoid collisions in hash conversion
2021-12-20 09:22:53 +01:00
wborgeaud
0538511c9d Comment for why 7 bytes 2021-12-20 09:22:23 +01:00
Jakub Nabaglo
e9fafa5131 Faster Goldilocks mul by forcing a branch 2021-12-18 15:28:47 -08:00
Jakub Nabaglo
c4549c4cc5
Silence Clippy on main (#402)
* Silence Clippy on main

* Fix a `unnecessary_to_owned`
2021-12-18 14:30:35 -08:00
wborgeaud
d594b8fc2d Convert chunks of 7 bytes instead of 8 2021-12-17 08:46:07 +01:00
wborgeaud
7d574c8620
Merge pull request #341 from mir-protocol/generic_configuration
Generic configuration trait
2021-12-17 08:34:10 +01:00
Jakub Nabaglo
433f358455
Fix build on AVX2 (#397) 2021-12-16 15:51:38 -08:00
Jakub Nabaglo
81c6f6c7bf Merge remote-tracking branch 'origin/main' into generic_configuration 2021-12-16 13:28:49 -08:00
Jakub Nabaglo
eb7615f7cc Change gate evaluation memory layout (#390) 2021-12-16 12:37:33 -08:00
wborgeaud
23a902e1e0 Fix nits 2021-12-16 15:58:38 +01:00
wborgeaud
7a2afb5119 Clippy 2021-12-16 15:30:40 +01:00
wborgeaud
288a0b7cf8 Fix merge conflicts 2021-12-16 15:20:45 +01:00
wborgeaud
bdbc8b6931 Merge branch 'main' into generic_configuration
# Conflicts:
#	src/field/extension_field/mod.rs
#	src/fri/recursive_verifier.rs
#	src/gadgets/arithmetic.rs
#	src/gadgets/arithmetic_extension.rs
#	src/gadgets/hash.rs
#	src/gadgets/interpolation.rs
#	src/gadgets/random_access.rs
#	src/gadgets/sorting.rs
#	src/gates/arithmetic_u32.rs
#	src/gates/gate_tree.rs
#	src/gates/interpolation.rs
#	src/gates/poseidon.rs
#	src/gates/poseidon_mds.rs
#	src/gates/random_access.rs
#	src/hash/hashing.rs
#	src/hash/merkle_proofs.rs
#	src/hash/poseidon.rs
#	src/iop/challenger.rs
#	src/iop/generator.rs
#	src/iop/witness.rs
#	src/plonk/circuit_data.rs
#	src/plonk/proof.rs
#	src/plonk/prover.rs
#	src/plonk/recursive_verifier.rs
#	src/util/partial_products.rs
#	src/util/reducing.rs
2021-12-16 14:54:38 +01:00
Jakub Nabaglo
357eea8df5
Fix build on main (#396) 2021-12-15 21:59:16 -08:00
wborgeaud
68e3befc08
Merge pull request #391 from mir-protocol/prime_field
Remove `PrimeField` type from the `Field` trait
2021-12-14 18:32:38 +01:00
wborgeaud
9211bcfed5 Move characteristic to its own fn 2021-12-14 17:12:14 +01:00
wborgeaud
6cb4f56af5
Merge pull request #392 from mir-protocol/remove_polynomial_file
Remove `polynomial.rs`
2021-12-13 20:15:07 +01:00
wborgeaud
a446aa056e
Merge pull request #393 from mir-protocol/remove_bits_fn
Replace `bits()` function with `BITS` const
2021-12-13 20:14:50 +01:00
wborgeaud
6863eea74e New clippy lints 2021-12-13 16:51:36 +01:00
wborgeaud
920d5995c7 Replace bits() fn with BITS const 2021-12-13 16:46:49 +01:00
wborgeaud
073fe7a6d9 New clippy lints 2021-12-13 16:40:00 +01:00
wborgeaud
c1698bb99d Remove polynomial.rs (+clippy lints) 2021-12-13 16:39:07 +01:00
wborgeaud
1d215d5d59 Remove dbg 2021-12-13 16:23:39 +01:00
wborgeaud
fb168b5d93 Replace characteristic with option 2021-12-13 16:20:39 +01:00
wborgeaud
e6c3f35431 working 2021-12-13 14:35:05 +01:00