fullcodec-plonk 0.2.0

A pure-Rust implementation of the PLONK ZK-Proof algorithm
Documentation
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## Unreleased

### Added

- Add support for rendering LaTeX in the docs [#630]https://github.com/dusk-network/plonk/pull/630

## [0.9.0] - 10-11-21

### Added

- Add back benchmarks to the crate. [#555]https://github.com/dusk-network/plonk/issues/555
- Add `ProverKey::num_multiset` [#581]https://github.com/dusk-network/plonk/issues/581
- Add alloc feature for lookup Vec structs [#582]https://github.com/dusk-network/plonk/issues/582
- Add test coverage for polynomial evaluations [#586]https://github.com/dusk-network/plonk/issues/586
- Add `Witness` by removing `AllocatedScalar`. [#588]https://github.com/dusk-network/plonk/issues/588
- Add missing dummy constraints in test [#592]https://github.com/dusk-network/plonk/issues/592
- Add codeconv config [#594]https://github.com/dusk-network/plonk/issues/594
- Add `Constraint` for circuit description. [#608]https://github.com/dusk-network/plonk/issues/608
- Add public unsafe `evaluate_witness()` to the composer [#612]https://github.com/dusk-network/plonk/issues/612

### Changed

- Change `StandardComposer` to `TurboComposer`. [#288]https://github.com/dusk-network/plonk/issues/288
- Change to use `From<JubJubScalar>` for BlsScalar [#294]https://github.com/dusk-network/plonk/issues/294
- Change unit tests as integration tests when possible [#500]https://github.com/dusk-network/plonk/issues/500
- Change to arrays some tuples in permutation module [#562]https://github.com/dusk-network/plonk/issues/562
- Change `poly_gate` to init lookup wire with zero [#578]https://github.com/dusk-network/plonk/issues/578
- Change `TurboComposer` to consistent API. [#587]https://github.com/dusk-network/plonk/issues/587
- Change `plonkup_gate` to use public inputs. [#584]https://github.com/dusk-network/plonk/issues/584
- Change coverage to use less compile flags. [#605]https://github.com/dusk-network/plonk/issues/605
- Change `Constraint` to accept witness args. [#624]https://github.com/dusk-network/plonk/issues/624

### Fixed

- Fix the document references and typos [#533]https://github.com/dusk-network/plonk/pull/533
- Fix if condition to match [#545]https://github.com/dusk-network/plonk/pull/545
- Fix `Prover::preprocess` circuit size for plookup [#580]https://github.com/dusk-network/plonk/pull/580
- Fix ignored tests by reincluding them [#593]https://github.com/dusk-network/plonk/issues/593
- Fix benches and make CI fail if they don't compile [#610]https://github.com/dusk-network/plonk/issues/610
- Fix several small nits and unnecessary operations [#611]https://github.com/dusk-network/plonk/issues/611
- Fix clippy reports [#622]https://github.com/dusk-network/plonk/pull/622

### Removed

- Remove old perm-computation fns from perm module [#515]https://github.com/dusk-network/plonk/issues/515
- Remove unused `plonkup` module. [#583]https://github.com/dusk-network/plonk/issues/583
- Remove the re-export of jubjub and bls libs [#558]https://github.com/dusk-network/plonk/issues/558
- Remove `Plonkup3Arity` [#589]https://github.com/dusk-network/plonk/issues/589
- Remove windows from CI. [#616]https://github.com/dusk-network/plonk/issues/616

## [0.8.2] - 17-09-21

### Added

- Add `From` extended point to `PublicInputValue` [#573]https://github.com/dusk-network/plonk/issues/574

## [0.8.1] - 07-06-21

### Added

- Add `zero_var` to composer [#526]https://github.com/dusk-network/plonk/issues/526
- Add `add_affine_to_circuit_description`to composer [#534]https://github.com/dusk-network/plonk/issues/534

### Removed

- Remove `external_doc` and `nightly` feature [#536]https://github.com/dusk-network/plonk/issues/536

## [0.8.0] - 03-05-21

### Added

- Add `alloc` feature to the crate [#345]https://github.com/dusk-network/plonk/issues/345
- Add `rayon` behind `std` feature to boost proving performance [#512]https://github.com/dusk-network/plonk/issues/512
- Add `rayon` behind `std` feature to boost verifying performance [#514]https://github.com/dusk-network/plonk/issues/514
- Add alternative getters for `OpeningKey` & `CommitKey` in `PublicParameters` [#510]https://github.com/dusk-network/plonk/issues/510

### Changed

- Change `constraint_system/ecc` module API improving usability and consistency [#456]https://github.com/dusk-network/plonk/issues/456
- Change the crate to be `no_std` [#350]https://github.com/dusk-network/plonk/issues/350
- Replace `Commitment::from_projective` for `From` trait impl  [#433] https://github.com/dusk-network/plonk/issues/433
- Update `canonical` from `0.5` to `0.6` [#494]https://github.com/dusk-network/plonk/issues/494

### Removed

- Remove trimming step from `Circuit::Verify_proof` [#510]https://github.com/dusk-network/plonk/issues/510

## [0.7.0] - 06-04-21

### Added

- Implement `VerifierData` structure. [#466]https://github.com/dusk-network/plonk/issues/466

### Fixed

- Fix circuit debuggger compilation issues. [#488]https://github.com/dusk-network/plonk/issues/488
- Fix import paths for lib components. [#489]https://github.com/dusk-network/plonk/issues/489

## [0.6.1] - 12-03-21

### Changed

- Change `PublicParameters::trim` visibility to `pub`. [#460]https://github.com/dusk-network/plonk/issues/460
- Change `StandardComposer::construct_dense_pi_vec` visibility to `pub`.[#461]https://github.com/dusk-network/plonk/issues/461

## [0.6.0] - 11-03-21

### Added

- Implement `dusk_bytes::Serializable` for all possible structures that need serde. [#352]https://github.com/dusk-network/plonk/issues/352
- Introduced a new type that unifies the Public Inputs `PublicInputValue`. [#416]https://github.com/dusk-network/plonk/issues/416
- Impl `padded_circuit_size` for `VerifierKey` [#351]https://github.com/dusk-network/plonk/issues/351
- Impl a generic method that can verify Proofs of any `Circuit`. [#396]https://github.com/dusk-network/plonk/issues/396

### Removed

- Remove `Canon` impl for `Proof`. [#450]https://github.com/dusk-network/plonk/issues/450
- Remove serde support completely from the repo. [#353]https://github.com/dusk-network/plonk/issues/353
- Removed previous implementations attached to `PublicInputValues`. [#416]https://github.com/dusk-network/plonk/issues/416
- Deprecated `anyhow` and `thiserror`. [#343]https://github.com/dusk-network/plonk/issues/343
- Remove `serialisation` module and use single serialization fn's. [#347]https://github.com/dusk-network/plonk/issues/347
- Remove uncessary `match` branch for `var_c` [#414]https://github.com/dusk-network/plonk/issues/414
- Remove legacy fns and move to test modules the only-for-testing ones. [#434]https://github.com/dusk-network/plonk/issues/434

### Changed

- Constrained as much as possible the visibility of fns, structs and it's fields [#438]https://github.com/dusk-network/plonk/issues/438]
- Store the sparse repr of the PI and positions in a `BTreeMap` [#427]https://github.com/dusk-network/plonk/issues/427
- Transcript Init and trim size are associated constants of the Circuit trait [#351]https://github.com/dusk-network/plonk/issues/351
- Replace `collections::HashMap` by `hashbrown::HashMap`. [#424]https://github.com/dusk-network/plonk/issues/424
- `Circuit` trait now only requires `padded_circuit_size` for trimming. [#351]https://github.com/dusk-network/plonk/issues/351
- Remove `verify_proof` & `build_pi` from `Circuit`. [#396]https://github.com/dusk-network/plonk/issues/396
- Update API naming conventions to be standard across the crate. [#354]https://github.com/dusk-network/plonk/issues/354
- Updated the native errors to all originate from the same enum. [#343]https://github.com/dusk-network/plonk/issues/343

## [0.5.1] - 02-02-21

### Changed

- Implement `Clone` for `PublicParameters` [#383]https://github.com/dusk-network/plonk/issues/383

## [0.5.0] - 27-01-21

### Changed

- Upgrade canonical to v0.5 (#371)
- Upgrade dusk-bls12_381 to v0.6
- Upgrade dusk-jubjub to v0.8

## [0.4.0] - 26-01-21

### Fixed

- Heavy data structures from unchecked [#332]https://github.com/dusk-network/plonk/issues/332

### Changed

- Refactored to/from_bytes criteria for some structs (#333)
- API breaking - Implement to/from unchecked bytes for public parameters (#332)

## [0.3.6] - 17-12-20

### Added

- To/From bytes impl for `PublicInput`.

### Changed

- Changed `compute_permutation_poly` to simpler version.

## [0.3.5] - 25-11-20

### Changed

- Changed `Proof` & `ProofEvaluations` byte conversion fn signatures.

### Added

- Implemented `Canon` for `Proof`.

## [0.3.4] - 02-11-20

### Changed

- dusk-jubjub update to `v0.5.0` with API renaming
- dusk-bls12_381 update to `v0.3.0` with API renaming

## [0.3.3] - 02-11-20

### Added

- `canon` feature to manage `Canon` derivations usage in ecc libs.

### Changed

- dusk-jubjub update to `v0.4.0`
- dusk-bls12_381 update to `v0.2.0`

## [0.3.2] - 29-10-20

### Changed

- dusk-bls12_381 update to `v0.1.5`
- dusk-jubjub update to `v0.3.10`
- Fixes #311 - big_mul and big_mul_gate documentation nit.

## [0.3.1] - 05-10-20

### Added

- Method to change the `trim_params_size` for the `Circuit` trait.

## [0.3.0] - 05-10-20

### Changed

- `Circuit` trait API & usability improvements (#313)

## [0.2.11] - 29-09-20

### Changed

- Now `Circuit` inputs are set in the circuit structure as `Option<T>`.
- Make `PublicInput::value()` fn public.
- Make pi_builder return `Result<T>`
- Refactored examples for the `Circuit` trait impl
  according to the new changes.

### Removed

- Removed `CircuitInputs` from the crate.

## [0.2.10] - 23-09-20

### Added

- Added `CircuitBuilder` trait and a example for it.

## [0.2.9] - 11-09-20

### Added

- Added `ProverKey` & `Verifierkey` to the public API as exported types.

### Changed

- Use `dusk-bls12_381 v0.1.4`.
- Use `dusk-jubjub v0.3.8`.

## [0.2.8] - 25-08-20

### Added

- Add a `variable_base_scalar_mul` method using a variable base curve add gate.

### Changed

- `ecc::scalar_mul` now named fixed_base_scalar_mul

## [0.2.7] - 13-08-20

### Added

- `Anyhow` & `thiserror` for error handling support.
- Serialisation methods for the crate public structures &
  `serde` support.
- Add a `variable_base_scalar_mul` method using a variable base curve add gate.

### Removed

- `failure` for error support since has been deprecated.

### Changed

- `add_witness_to_circuit_description` requires now just to send
  a `Scalar` and returns a constant & constrained witness `Variable`.
- Update `add_witness_to_circuit_description` fn sig (#282, #284)
- dusk-jubjub version updated to 0.3.6
- `ecc::scalar_mul` now named fixed_base_scalar_mul

## [0.2.6] - 03-08-20

### Changed

- Make public inputs vector publicly accessible.

## [0.2.5] - 31-07-20

### Changed

- ECC Point from `ecc:scalar_mul` should have its attributes exposed.

## [0.2.4] - 29-07-20

### Changed

- Changed `dusk-jubjub` version to `v0.3.5` to fix Fr random gen.

## [0.2.3] - 28-07-20

### Changed

- Changed `dusk-jubjub` version to `v0.3.4` to update dhke generation.

## [0.2.2] - 25-07-20

### Added

- Method to create constrained witness values. @CPerezz

### Changed

- Visibility of the `Proof::verify()` fn to `pub(crate)`. @CPerezz
- Changed `dusk-jubjub` version to `v0.3.3` since `v0.3.2` was yanked.

## [0.2.1] - 24-07-20 [yanked]

### Added

- Method to create constrained witness values. @CPerezz

### Changed

- Visibility of the `Proof::verify()` fn to `pub(crate)`. @CPerezz

## [0.2.0] - 20-07-20

### Added

- Prover and Verifier abstraction @kevaundray
- Error handling and custom errors @CPerezz
- Add prelude file @CPerezz
- Add identity separation challenge to each identity. @kevaundray
- Decouple Prover and Verifier Key @kevaundray
- Remove Preprocessed circuit @kevaundray
- Implement ECC gate @kevaundray
- Add math-related docs @Bounce23
- Add identity separation challenge to each identity @kevaundray

### Changed

- Widget splitting to modularize the codebase @kevaundray

### Fixed

- Bug in "front-end" assertions in logic_constraint gates @CPerezz
- Broken links in the docs @CPerezz

### Removed

- Serde support for the time being.

## [0.1.0] - 25-04-20

### Added

- PLONK algorithm implementation.
- Example folders.
- Doc notes with kateX.
- KZG10 polynomial commitment scheme implementation.
- fft module with Polynomial ops implemented.
- Proof system module.