# Ferveo Workbook ## Stage 1 - v0.1.0 basics & validation - [x] Implement simple threshold decryption variant - [x] Implement share recovery & refreshing (in review) - [ ] Cross-examine with product research & requirements - It should happen in pararell with this stage, because we need to finalize the API, and we need to know what we're doing in order to do that - So we need to figure out what are the input/outputs/constraints to those 4 ways to set-up the DKG ceremony that Arj mentioned - "Bundles of parameters" - https://github.com/nucypher/tdec/issues/101 - https://github.com/nucypher/tdec/issues/74 - https://github.com/nucypher/ferveo/issues/3 - [x] Integrate existing PVSS (Publicly Verifiable SS) from `ferveo` crate with simple threshold decryption from `tpke` (in review) - [x] Remove share weighing and switch to one-share-per-validator scheme (in review) - [x] Make sure all validity checks are implemented - https://github.com/nucypher/ferveo/issues/31 - https://github.com/nucypher/ferveo/pull/38 - [x] Add benchmarks - Run and show benchmarks on GH - https://github.com/nucypher/ferveo/issues/24 - Range of `share_num` to bench: `[4, ..., 64]` - [x] Benchmark crypto primitives in isolation (like pairings, etc.); or just fetch from somewhere else like arkworks - [x] Implement an aggregator-light subvariant of simple threshold decryption https://github.com/nucypher/ferveo/issues/30 - [x] Benchmark it against simple variant - https://github.com/nucypher/ferveo/pull/32 - [x] Other tasks related to `ferveo` validation - [x] https://github.com/nucypher/tdec/issues/82 - [x] https://github.com/nucypher/tdec/issues/76 - [x] Review `hash_to_curve.rs` - Never even read this file :man-shrugging: - `hash_to_field_bls12381` is not being used - Also review other crates/files, check for unused code etc. - [x] Dependency on block number in DKG state - https://github.com/nucypher/ferveo/issues/55 - [x] Remove all the remaining referenaces to n-shares per validator setup from `tpke` and `ferveo` crates - https://github.com/nucypher/ferveo/pull/27 - [ ] Write and showcase protocol description ## Stage 2 testing, second round of features - [x] Benchmark the size of PVSS transcript (for on chain use, etc.), for num shares of the size 2..64 - Make use of the older benchmarks https://github.com/nucypher/ferveo/pull/14 - [ ] How was on-chain verification suppsoed to be performed in Ferveo? - How do - [x] Refactor `tpke` methods - [x] Refactor APIs across `tpke` and `ferveo` crates - [x] Remove "left-over" code, ensure overall code quality; add code coverage; make sure linter makes sense; - [x] Test (at least) happy paths across the codebase - Consider property based testing - [ ] Check and solve all TODOs added to the codebase - [ ] Check upstream `ferveo` repo for any issues and PRs that may be relevant to us - [x] What is a viable number for a share number? Do we have to use 2^n shares? Can we move away from Radix2Domain and use n=10? Simple variant ## Stage 3 stabilizing API, release - [x] Blinded keys, https://github.com/nucypher/ferveo/pull/20/files#r1064551595 - https://github.com/nucypher/ferveo/issues/58 - [x] Finalize TypeScript and Python APIs - https://github.com/nucypher/tdec/issues/83 - [x] Add error handling - https://github.com/nucypher/ferveo/issues/12 - [x] Switch serialization to `serde`, if possible - https://github.com/nucypher/ferveo/issues/15 ## Stage X optional or dropped tasks, enhancements, etc. - [ ] Research KZG commitment scheme for VSS and refreshing/recovery - https://github.com/nucypher/ferveo/issues/28 - [ ] Research L2s and onn-chain BLS - https://github.com/nucypher/ferveo/issues/7 - [ ] Implement KZG commitment scheme - [ ] On-chain verification - https://github.com/nucypher/ferveo/issues/7 - [ ] Elliptic curve addition in Solidity - https://github.com/nucypher/numerology