This repository contains the latest official reference & AVX implementation of the SNOVA signature scheme in C language.
Please refer to this document for the main differences between the previously submitted code to NIST and the current version.
SL | Name | V | O | L | sk size (esk) | sk size (ssk) | pk size | sign size |
---|---|---|---|---|---|---|---|---|
1 | SNOVA_37_17_2 | 37 | 17 | 2 | 90608(+48) | 48 | 9826(+16) | 108(+16) |
1 | SNOVA_25_8_3 | 25 | 8 | 3 | 37962(+48) | 48 | 2304(+16) | 148.5(+16) |
1 | SNOVA_24_5_4 | 24 | 5 | 4 | 34112(+48) | 48 | 1000(+16) | 232(+16) |
3 | SNOVA_56_25_2 | 56 | 25 | 2 | 299632(+48) | 48 | 31250(+16) | 162(+16) |
3 | SNOVA_49_11_3 | 49 | 11 | 3 | 174798(+48) | 48 | 5989.5(+16) | 270(+16) |
3 | SNOVA_37_8_4 | 37 | 8 | 4 | 128384(+48) | 48 | 4096(+16) | 360(+16) |
5 | SNOVA_75_33_2 | 75 | 33 | 2 | 702932(+48) | 48 | 71874(+16) | 216(+16) |
5 | SNOVA_66_15_3 | 66 | 15 | 3 | 432297(+48) | 48 | 15187.5(+16) | 364.5(+16) |
5 | SNOVA_60_10_4 | 60 | 10 | 4 | 389312(+48) | 48 | 8000(+16) | 560(+16) |
These implementations include multiple test programs and an easy-to-compile Makefile.
None. This repository contains the symmetric primitive libraries as source code. See the respective files for credits and copyright notices.
The steps to compile and run the SNOVA signature scheme's test program on Linux are as follows:
make clean
make test
make clean
make test_api
make clean
make PQCgenKAT
make clean
make test_speed
make clean
make test_speed TEST_SPEED_N=4096
Tips. TEST_SPEED_N specifies the number of test iterations.
Only need to modify the SNOVA_V, SNOVA_O, SNOVA_L, SK_IS_SEED in the Makefile file.
Example: (makefile line 37)
SNOVA_V ?= 24
SNOVA_O ?= 5
SNOVA_L ?= 4
SK_IS_SEED ?= 0 # 0: sk = ssk; 1: sk = esk
Tip: The following parameters can all be input during MAKE execution, such as
make test_speed SNOVA_V=24 SNOVA_O=5 SNOVA_L=4 SK_IS_SEED=1 TEST_SPEED_N=4096
SL 1:
SNOVA_V | SNOVA_O | SNOVA_L |
---|---|---|
37 | 17 | 2 |
25 | 8 | 3 |
24 | 5 | 4 |
SL 3:
SNOVA_V | SNOVA_O | SNOVA_L |
---|---|---|
56 | 25 | 2 |
49 | 11 | 3 |
37 | 8 | 4 |
SL 5:
SNOVA_V | SNOVA_O | SNOVA_L |
---|---|---|
75 | 33 | 2 |
66 | 15 | 3 |
60 | 10 | 4 |
make test_speed SNOVA_V=60 SNOVA_O=10 SNOVA_L=4 TEST_SPEED_N=512
make PQCgenKAT SNOVA_V=60 SNOVA_O=10 SNOVA_L=4 SK_IS_SEED=1
make test_api SNOVA_V=60 SNOVA_O=10 SNOVA_L=4 SK_IS_SEED=0
All optimized code can be found in this folder "snova_plasma", You can refer to line 6 in "snova.c" to see how to switch optimization methods.
To configure optimization settings, you only need to adjust the OPTIMISATION parameter in the makefile or use the "OPTIMISATION=" command. A detailed description can also be found within the makefile.
If no configuration is provided, the most optimal method will be used automatically.
OPTIMISATION = 0 # Using Reference
OPTIMISATION = 1 # Using General Optimization
OPTIMISATION = 2 # Using AVX2 Optimization
make test_api SNOVA_V=24 SNOVA_O=5 SNOVA_L=4 SK_IS_SEED=1 OPTIMISATION=0
make test_api SNOVA_V=24 SNOVA_O=5 SNOVA_L=4 SK_IS_SEED=1 OPTIMISATION=1
Example: (Using AVX2 Optimization)
make test_api SNOVA_V=24 SNOVA_O=5 SNOVA_L=4 SK_IS_SEED=1 OPTIMISATION=2
Thank you to our team members from SNOVA:
- Lih-Chung Wang
- Chun-Yen Chou
- Jintai Ding
- Yen-Liang Kuan
- Jan Adriaan Leegwater
- Ming-Siou Li
- Bo-Shu Tseng
- Po-En Tseng
- Chia-Chun Wang
All commits in this project are the result of team collaboration. The contributions made by the pqclab-zero account represent collective efforts of the team, not individual contributions.