* This commit makes adding an arbitrary number of variables and inputs possible and removes the
implementation leaking to the interface for
num_inps + 1 <= num_vars, num_vars: a power of 2, num_cons: a power of 2, but not 1.
1. When creating a new R1CS Instance throught the public interface,
it is required # constraints and # of vars be a power of 2. I remove
that requirement by padding with dummy constraints and vars until the nearest
power of 2.
2. The sumcheck protocol in src/sumcheck.rs does not work for 1 constraint, even
though 1 is a power of 2. I have to pad to a minimum of two constraints.
3. Added a test in src/r1csproof.rs called test_padded_constraints.
* Move test to src/lib.rs
* Remove padding metadata
* remove unused use
* Simplify padding to power of 2
* run cargo fmt
* Fix indexing bug
* Rayon is optional, depending on 'multicore' feature
* Update rust toolchain
* cargo fmt
* cleaner to track num_vars_padded and num_cons_padded
* cleanup
* further cleanup
* Cleanup & comments
* small fixes
* adjust code for padding constraints
* fix a bug with pad call
* add comment about num_nz_entries
* extend padding to NIZK methods
extend padding to NIZK methods
Co-authored-by: Lef Ioannidis <elefthei@seas.upenn.edu>
Co-authored-by: Srinath Setty <srinath@microsoft.com>
This:
- introduces a small [thiserror](https://github.com/dtolnay/thiserror)-powered enum to improve ProofVerifyError's messages,
- refactors point decompression errors into a variant of that enum, thereby suppressing the panics which occur when decompresison fails.
- folds other panics into the Error cases of their enclosing `Result` return