- Nov 21, 2024
-
-
STEVAN Antoine authored
FRI protocol from [`dragoon/fri`](https://gitlab.isae-supaero.fr/dragoon/fri) ## changelog - add binary assets to be used as inputs - add `fri` and `fri_test_utils` as local dependencies until [`dragoon/fri`](https://gitlab.isae-supaero.fr/dragoon/fri) becomes public - add `fri` feature and module (see section below for the public definitions) - fix bug in 32bd6566 - bump Rust in e7a2c244 - add a versatile example - add Nushell pipeline to run benchmarks and plot results - add some tests ## `fri` module API ```rust struct Block<F: PrimeField, H: Hasher> ``` ```rust fn evaluate<F: PrimeField>(bytes: &[u8], k: usize, n: usize) -> Vec<Vec<F>> ``` ```rust fn encode<F: PrimeField>( bytes: &[u8], evaluations: Vec<Vec<F>>, k: usize, ) -> Vec<fec::Shard<F>> ``` ```rust fn prove<const N: usize, F: PrimeField, H: Hasher, P>( evaluations: Vec<Vec<F>>, shards: Vec<fec::Shard<F>>, blowup_factor: usize, remainder_plus_one: usize, nb_queries: usize, ) -> Result<Vec<Block<F, H>>, KomodoError> where P: DenseUVPolynomial<F>, for<'a, 'b> &'a P: Div<&'b P, Output = P>, <H as rs_merkle::Hasher>::Hash: AsRef<[u8]>, ``` ```rust fn verify<const N: usize, F: PrimeField, H: Hasher, P>( block: Block<F, H>, domain_size: usize, nb_queries: usize, ) -> Result<(), KomodoError> where P: DenseUVPolynomial<F>, for<'a, 'b> &'a P: Div<&'b P, Output = P>, <H as rs_merkle::Hasher>::Hash: AsRef<[u8]>, ``` ```rust fn decode<F: PrimeField, H: Hasher>(blocks: Vec<Block<F, H>>, n: usize) -> Vec<u8> ``` ## results ### times      ### sizes    
-
STEVAN Antoine authored
see the successful CI on GitHub: https://github.com/dragoon-rs/komodo/actions/runs/11950087413/job/33310881686
-
- Nov 13, 2024
-
-
STEVAN Antoine authored
this MR adds two new badges to the README - the crate (links to the [Komodo crate](https://crates.io/crates/komodo)) - the documentation (links to the [doc](https://docs.rs/komodo/latest/komodo/))
-
STEVAN Antoine authored
this adds three badges to the README: - the latest release (links to the [release page](https://gitlab.isae-supaero.fr/dragoon/komodo/-/releases)) - the GitLab CI status (links to the [GitLab pipeline dashboard](https://gitlab.isae-supaero.fr/dragoon/komodo/-/pipelines)) - the GitHub CI status (links to the [GitHub workflow runs dashboard](https://github.com/dragoon-rs/komodo/actions))
-
DETCHART Jonathan authored
-
- Nov 06, 2024
-
-
-
DETCHART Jonathan authored
-
DETCHART Jonathan authored
This MR enables by default `kzg` and `aplonk`. By doing that, both modules should be visible in the doc.
-
- Nov 05, 2024
-
-
STEVAN Antoine authored
-
STEVAN Antoine authored
-
STEVAN Antoine authored
-
STEVAN Antoine authored
-
- Sep 23, 2024
-
-
STEVAN Antoine authored
## changelog - _semi\_avid_, _kzg_ and _aplonk_ examples have been added - the `fs` module has been hidden behind an `fs` feature - the `conversions` module has been properly hidden behind the `test` config feature - the documentation has been completed - some error messages have been improved > **Note** > > the documentation of aPlonK has been left as-is for now
-
- Aug 06, 2024
-
-
STEVAN Antoine authored
`algebra`, `field` and `linalg` were doing extremely similar things before... this MR merges them into a single module `algebra` - old `algebra` and `field` are at the root of the new `algebra` - old `linalg` is now `algebra::linalg` all references to these have been fixed in the rest of the codebase and the features have been tuned to work fine.
-
STEVAN Antoine authored
in dragoon/komodo!162 and dragoon/komodo!163, i did only run `cargo ... --all-features` without checking the individual features... this MR adds some `cargo check --features ...` to the `Makefile` and makes sure the imports make sense when compiling a single feature. >
**Important** > > the other notable change here is that `kzg::commit` has been moved to `zk::ark_commit` and is re-exported from `kzg` as `kzg::commit`. -
STEVAN Antoine authored
this adds the aPlonK cryptographic method alongside Semi-AVID and KZG+. ## changelog - new feature `aplonk`: - the `algebra` module is compiled when either `kzg` or `aplonk` features are enabled - `algebra::scalar_product_polynomial` compiles only with `kzg` - the other `algebra::*` functions compile with `aplonk` - `u32_to_u8_vec` has been moved to new `conversions` module which compiles when either `kzg` or `aplonk` features are enabled - new `aplonk` module which compiles only when the `aplonk` feature is enabled - public structures - `Block` - `Commitment` - `SetupParams` - `VerifierKey` - public functions - `setup` - `commit` - `prove` - `verify` - internals - `ipa::Params` - `ipa::Proof` - `ipa::prove` - `ipa::verify` - `polynomial::compute_g` - `transcript::initialize` - `transcript::reset` - `transcript::hash`
-
STEVAN Antoine authored
this adds the KZG+ cryptographic method alongside Semi-AVID. ## changelog - the Makefile now uses `--all-features` to compile everything - a new module `algebra` has been added, with tests for all functions - `algebra::scalar_product_polynomial` computes a linear combination of polynomials $(P_i)$ - `algebra::powers_of` computes $n$ successive powers of a number $r$ - a new function `zk::trim` has been added from [`gitlab.isae-supaero.fr:a.stevan/poly-commit@19fc0d4a/src/kzg10/mod.rs#L513-L538`](https://gitlab.isae-supaero.fr/a.stevan/poly-commit/-/blob/19fc0d4ad2bcff7df030c952d09649918dba7ddb/src/kzg10/mod.rs#L513-L538) - a new feature `kzg` has been added, with an optional dependency on [`gitlab.isae-supaero.fr:a.stevan/poly-commit@19fc0d4a`](https://gitlab.isae-supaero.fr/a.stevan/poly-commit/-/tree/19fc0d4ad2bcff7df030c952d09649918dba7ddb) - a new module `kzg` has been added and exposes the following publicly - structures - `Block` - functions - `commit` - `prove` - `verify` - `batch_verify` - tests when block are left as-is and when one of them is corrupted
-
- Aug 01, 2024
-
-
STEVAN Antoine authored
## changelog - `src/main.rs` has been moved to a new crate: `bins/saclin` which stands for **S**emi-**A**VID **CLI** in **N**ushell - dependencies of `komodo` have been fixed - Nushell and Rust tests have been split in the Makefile: by default, only Rust tests will run locally and Nushell tests and examples can be run manually if desired. The CI will still run everything. - the README has been updated - test images have been moved to `assets/` - the majority of the old `./nu-utils/` module have been moved to internals of `./benchmarks/` and imports have been fixed - `cargo.nu` has been moved to `./bins/` and a new `./bins/README.md` mentions it - `./bins/saclin/` has been created and should be a self-contained Rust crate + Nushell module
-
STEVAN Antoine authored
this is a refactor to prepare the addition of other cryptographic methods. ## changelog - moves Semi-AVID code from `lib.rs` to `semi_avid.rs`
-
- Jul 31, 2024
-
-
STEVAN Antoine authored
- 1c9077f6 add documentation to the errors - c388cbbb better FEC doc - 8d58278d doc of `zk.nb_elements_in_setup`
-
- Jul 12, 2024
-
-
STEVAN Antoine authored
this MR is two-fold - it restructures the two main Nushell modules so that they are easier to read and use - it improves the "run" and "plot" modules for the benchmarks ## changelog - `.nushell/` is now renamed to `nu-utils/` - `benchmarks/` is now a valid Nushell module which exports a bunch of modules - `benchmarks linalg`: measure and plot linear algebra operations - `benchmarks setup`: measure and plot trusted setup building - `benchmarks commit`: measure and plot crafting commitments - `benchmarks recoding`: measure and plot the recoding of shards - `benchmarks fec`: measure and plot FEC operations, such as encoding and recoding, and allow combining these results with the pure recoding ones - the submodules of `benchmarks` typically have a `run` and a `plot` command, whith the exception of `benchmarks fec` which has a `run` module and multiple "plot" commands in `benchmarks fec plot` - the "run" commands will create a random temp file by default and ask for confirmation otherwise if the output file already exists, unless `--force` is used - snippetds in `benchmarks/README.md` have been updated
-
STEVAN Antoine authored
## results     
-
- Jul 05, 2024
-
-
STEVAN Antoine authored
see the changelogs of - [Nushell `0.94.0`](https://www.nushell.sh/blog/2024-05-28-nushell_0_94_0.html) - [Nushell `0.94.1`](https://www.nushell.sh/blog/2024-05-30-nushell_0_94_1.html) - [Nushell `0.94.2`](https://www.nushell.sh/blog/2024-06-03-nushell_0_94_2.html) i also removed the `bytes encode` and `bytes decode` commands from `.nushell/binary.nu` because... well they did not work anymore and they were not used anywhere
-
STEVAN Antoine authored
## results >
**Note** > > using the improved plots from dragoon/komodo!153    -
STEVAN Antoine authored
this adds a new custom field to the `benchmarks::fields` new module and fixes the "linalg" commands to run the benchmarks ## results >
**Note** > > using the data from !156    -
STEVAN Antoine authored
## results  
-
STEVAN Antoine authored
adds a `.env.nu` file to load Nushell modules automatically thanks to the `nuenv` hook from the `nu-hooks` package.
-
STEVAN Antoine authored
- show the log of the degree for high values - don't show the "time" Y label because the units are in the times values - don't rotate the X tick labels ## results  
-
- Jun 07, 2024
-
-
STEVAN Antoine authored
-
STEVAN Antoine authored
see [`dragoon/nc-diversity`](https://gitlab.isae-supaero.fr/dragoon/nc-diversity)
-
STEVAN Antoine authored
-
STEVAN Antoine authored
this will - recode for $\#steps \in [10, 20, 100]$ - at $t = 0$, $k$ random shards among the $n$ encoded will be selected at random - at $t \geq 1$, all $k$ shards will be used to recode $k$ brand new shards - make sure the last set of $k$ shards recoded $\#steps$ together can decode the data ## example with $(k, n) = (3, 5)$ and $\#steps = 3$ - $(s_i)_{1 \leq i \leq k}$ are the $k$ source shards - $(e_j)_{1 \leq j \leq n}$ are the $n$ encoded shards - $(m_i)_{1 \leq i \leq k}$ are the $k$ randomly selected shards - $(n_i)_{1 \leq i \leq k}$ are the shards after step $1$ - $(o_i)_{1 \leq i \leq k}$ are the shards after step $2$ - $(p_i)_{1 \leq i \leq k}$ are the shards after step $3$ - the $(p_i)_{1 \leq i \leq k}$ will be used for decoding ```mermaid graph TD; s1 --> e1; s1 --> e2; s1 --> e3; s1 --> e4; s1 --> e5; s2 --> e1; s2 --> e2; s2 --> e3; s2 --> e4; s2 --> e5; s3 --> e1; s3 --> e2; s3 --> e3; s3 --> e4; s3 --> e5; e1 --> m1; e3 --> m2; e4 --> m3; m1 --> n1; m1 --> n2; m1 --> n3; m2 --> n1; m2 --> n2; m2 --> n3; m3 --> n1; m3 --> n2; m3 --> n3; n1 --> o1; n1 --> o2; n1 --> o3; n2 --> o1; n2 --> o2; n2 --> o3; n3 --> o1; n3 --> o2; n3 --> o3; o1 --> p1; o1 --> p2; o1 --> p3; o2 --> p1; o2 --> p2; o2 --> p3; o3 --> p1; o3 --> p2; o3 --> p3; ```
-
STEVAN Antoine authored
- pass `n` to `try_all_decoding_combinations` and don't try to decode when shards have been recoded ($\#shards > n$) and there are no recoded shards in the $k$ combination under review ($\max(is) < n$) - pass `recoding_steps` and `should_not_be_decodable` as arguments to `end_to_end_with_recoding_template` - fix $n = 5$ => this leads to tests that run in less than 10sec again - add $(k, n) = (8, 10)$ => tests still run in less than 13sec - split recoding scenarii into "_simple_" and "_chain_" - show indices in a "_pretty_" format, i.e. showing indices greater than $n$ as `(n)`, `(n + 1)`, ...
-
- Jun 06, 2024
-
-
STEVAN Antoine authored
- `komodo::linalg::Matrix::random` is tested - `komodo::linalg::Matrix::inverse` is tested on more matrix sizes, from $1$ to $20$ random matrices - `komodo::field` tests have been double-checked - pure "recoding" tests from `komodo::fec` have been double-checked - `end_to_end` and `end_to_end_with_recoding` now runs for $k \in [3, 5]$ and $\rho \in [\frac{1}{2}, \frac{1}{3}]$ with $n = \lfloor \frac{k}{\rho} \rfloor$ - all "_$k$ among $n + t$_" combinations are tested with `try_all_decoding_combinations`, possibly with some removals in case recoding is involved with `is_inside` >
**Important** > on my machine, `make test` goes from less than 8sec on latest `main` to around 40sec with this MR -
STEVAN Antoine authored
they have been moved to [dragoon/binaries](https://gitlab.isae-supaero.fr/dragoon/binaries).
-
- Jun 05, 2024
-
-
STEVAN Antoine authored
this is the trivial case where it is always possible to decode the original data, so there is no need to have it here.
-
- Jun 03, 2024
-
-
STEVAN Antoine authored
this MR - moves the Nushell modules from `bins/inbreeding/` to `bins/inbreeding/src/.nushell/` - creates a `NUSHELL` constant in `consts.nu` to allow the following more robust construct ```bash use consts.nu use $consts.NUSHELL ... ``` - updates the README
-
STEVAN Antoine authored
-
STEVAN Antoine authored
this simply makes "parsing" in the inbreeding modules more robust and centralized.
-
STEVAN Antoine authored
-