https://github.com/lucabonamino/crypto-vdf
Cryptocurrency and Cryptographic blockchain Verifiadle Delay Functions project
https://github.com/lucabonamino/crypto-vdf
cli cryptocurrency cryptography pietrzark-vdf python verifiable-delay-functions wesolowski-vdf
Last synced: 6 months ago
JSON representation
Cryptocurrency and Cryptographic blockchain Verifiadle Delay Functions project
- Host: GitHub
- URL: https://github.com/lucabonamino/crypto-vdf
- Owner: LucaBonamino
- License: other
- Created: 2023-11-18T16:14:28.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-08-29T02:55:55.000Z (10 months ago)
- Last Synced: 2025-08-29T06:44:16.851Z (10 months ago)
- Topics: cli, cryptocurrency, cryptography, pietrzark-vdf, python, verifiable-delay-functions, wesolowski-vdf
- Language: Python
- Homepage:
- Size: 905 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# crypto-VDF
Implementation of two time-lock based-Verifiable Delay Functions.
The two VDFs are
- Pietrzark's VDF: https://eprint.iacr.org/2018/627.pdf
- Wesoloski's VDF: https://eprint.iacr.org/2018/623
In the case Wesoloski's VDF, our disign and implementation of the optimization of the proof, slightly diverged from the original one. Our solution is more efficient compared to the paper's one when restricting to binary values b_is (binar repreentation of the proof - kappa = 1), but it is not more efficinet in general.
## Organisation of the repo
### Organisation of the package
- report/VDF-Luca_Boghos_Mathias.pdf - project report
- clis - directory to handle the Typer CLI
- custom_error - directory containing custom exception classes to facilitate the error handling
- data_transfer_objects - directory containing 'contracts' between functions (input and output pydantic models)
- utils - directory containing some utilities function such has prime number generators, quadratic residues generators and square-and-multiply function
-
verifiable_delay_functions - directory containing the actual VDFs source code- vdf.py - file containing the VDF abstract class
- pietrzak.py - file containing the Pietrzak VDF (VDF1)
- wesolowski.py - file containing the Wesolowski VDF (VDF2)
- entry_point.py - entrypoint file for the Typer CLI
### Files outside of the source directory
Ourside of the source folder, the following files can be found
- Makefile
- requirements.txt - dependencies file for the project
- requirements-tests.txt - dependencies file for the tests (dependencies for the project + potential additional dependencies)
- setup.py - installation file for the package
- setup.cfg - file containing additional information for the setup of the project (such as the CLI entry point) and potential settings for linting and test coverage
## Setup
Install the package using
make setup
## How to run the VFDs
### With CLI
To run the VDFs from the CLI run
cryptoVDF --help
and see the options.
For example, suppose you want to run the Pietrzak eval function, use
cryptoVDF pietrzak eval
### Without CLI
Without CLI, the source code can be run in a classic manner
python src/crypto_VDF/verifiable_delay_functions/pietrzak.py
## How to run unittests
To run the unit tests, run
make tests
## Examples
### Compute and Verify
Delay of 2^(10)
cryptoVDF pietrzak generate-and-verify 359 --delay 1024 --modulus 437 --verbose
Delay of 2^(20)
cryptoVDF pietrzak generate-and-verify 359 --delay 1048576 --modulus 437 --verbose
# Full VDF
Delay of 2^(20)
cryptoVDF pietrzak full-vdf --delay 1048576 --security-parameter 128
cryptoVDF wesolowski full-vdf --delay 1048576 --security-parameter 128
cryptoVDF wesolowski full-vdf --delay 1048576 --security-parameter 128 --trapdoor
# Plots
cryptoVDF wesolowski plots --max-delay-exp 10 --iterations 20 --show
cryptoVDF pietrzak plots --max-delay-exp 10 --iterations 20 --show
cryptoVDF pietrzak plots --max-delay-exp 8 --iterations 2 --security-parameter 4 --show --verbose
cryptoVDF pietrzak plots --max-delay-exp 10 --iterations 400 --security-parameter 4 --show --verbose
cryptoVDF pietrzak plots --max-delay-exp 10 --iterations 10 --security-parameter 128 --show --verbose
cryptoVDF wesolowski plots --max-delay-exp 10 --iterations 10 --security-parameter 128 --show --verbose
cryptoVDF pietrzak plots --max-delay-exp 10 --iterations 10 --security-parameter 128 --show --verbose
# Demo
## Full-VDF
### Completeness
cryptoVDF pietrzak full-vdf --delay 1048576 --security-parameter 128
cryptoVDF wesolowski full-vdf --delay 1048576 --security-parameter 128
cryptoVDF wesolowski full-vdf --delay 1048576 --security-parameter 128 --trapdoor
### Soundness
### VDF1
cryptoVDF pietrzak eval --security-parameter 128 --delay 4
cryptoVDF pietrzak verify --x input --y output --proof proof --modulus modulus --security-parameter security-parameter
Example: The following should evaluate to True
cryptoVDF pietrzak verify --x 60165111687309026253618363786070190189 --y 38920676524930194932948449234450122897 --proof 26733557083776090708288610604071675446,54679161191322144951368137116431681903 --modulus 202791651255554990394641179601075112913 --security-parameter 128
#### VDF2
cryptoVDF wesolowski eval --security-parameter 128 --delay 4
cryptoVDF wesolowski verify --x input --y output --proof proof --delay delay --modulus modulus
Example: The following will return True
cryptoVDF wesolowski verify --x 95974600194182310684653862122690543205 --y 856966856996350542601758883331119 --proof 95974600194182310684653862122690543205 --delay 4 --modulus 100167473050021300389050029515619897043
## Plots
cryptoVDF pietrzak plots --max-delay-exp 10 --iterations 200 --security-parameter 4 --show
cryptoVDF wesolowski plots --max-delay-exp 10 --iterations 200 --security-parameter 4 --show