VLSPQC (VLSI-Lab Post-Quantum Cryptography) is a collection of clean, hardware-oriented C implementations of the main post-quantum algorithms that have either passed or are still ongoing in the NIST standardization process.
The repository is designed to provide runnable code on FPGA platforms while remaining compliant with the Known Answer Test (KAT) format defined in the original NIST submissions.
| Folder | Description |
|---|---|
original/ |
Original, unmodified reference implementations of PQC algorithms |
profiling/ |
Instrumented implementations for function call profiling and performance analysis. See profiling/pqc_profiling_analysis.md for comprehensive profiling results |
masked/ |
Masked implementations for side-channel attack resistance (includes ASCON variants) |
other/ |
Auxiliary tests and experiments used during hardware exploration analysis |
This repository currently supports:
-
ML-KEM Kyber
This repository contains the official reference implementation of the Kyber key encapsulation mechanism. Kyber has been selected for standardization in round 3 of the NIST PQC standardization project. -
ML-DSA Dilithium
This repository contains the official reference implementation of the Dilithium signature scheme. Dilithium is standardized as FIPS 204. -
HQC HQC
- HQC-2024 : previous version of HQC (23/03/2024)
- HQC-2025 : last version of HQC (22/08/2025)
- HQC-2025-v5 : last version of HQC (22/08/2025) - additional modification to Karatsuba multiplication, for hardware optimization.
This repository provides the official implementation of HQC, a code-based Key Encapsulation Mechanism (KEM) whose security is based on the hardness of solving the Quasi-Cylic Syndrome Decoding (QCSD) problem. HQC is one of the selected algorithms from the NIST's Post-Quantum Cryptography Standardization Project.
-
Falcon Falcon
This repository contains the software that accompanies the FN-DSA submission to NIST's Post-Quantum Cryptography project. -
SPHINCS+
This repository contains the software that accompanies the SPHINCS+ submission to NIST's Post-Quantum Cryptography project. -
CROSS
Each algorithm comes with a self-contained KAT test, adapted from the official reference implementation submitted to NIST.
Each test provides:
- Key generation (
keygen) - Encapsulation / Signing (
encaps/sign) - Decapsulation / Verification (
decaps/verify)
This makes the implementations straightforward to validate and benchmark, while ensuring compliance with the standard reference behavior.
VLSPQC has been developed within the VLSI-Lab as a foundation for:
- Hardware/software co-design of PQC algorithms.
- FPGA-based prototyping and benchmarking.
- Integration into VLSI-oriented PQC accelerators.
- Ensuring reproducibility against NIST’s official KATs.
Use the interactive test launcher to run KAT tests or profiling:
./profiling/run_test.shThis will guide you through selecting:
- Test category:
common(original implementations) orprofiled(instrumented versions) - Algorithm family: ML-KEM, ML-DSA, HQC, FALCON, SLH-DSA, CROSS, etc.
- Specific variant: parameter set selection
For command-line usage, see profiling/README.md.
Each algorithm resides in its own directory with a corresponding Makefile:
cd original/ML-KEM/ml-kem-512
make clean && make
./ml-kem-512The profiling/ folder contains instrumented implementations for performance analysis. Function call profiling results are documented in:
📄 profiling/pqc_profiling_analysis.md
This analysis covers:
- Function call frequency across KeyGen, Encaps/Sign, and Decaps/Verify operations
- Bottleneck identification for each algorithm
- Cross-algorithm performance comparisons
This repository follows the licensing terms of the respective reference implementations used as the starting point. Please check individual algorithm directories for specific license details.
- Alessandra Dolmeta - alessandra.dolmeta@polito.it
- Valeria Piscopo - valeria.piscopo@polito.it