---
# System prepended metadata

title: Ferveo Workbook
tags: [nucypher]

---

# 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
