# 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