├── .gitignore ├── bench ├── src │ ├── jasmin │ │ ├── 768 │ │ │ ├── ref │ │ │ │ ├── jkem.jazz │ │ │ │ ├── Makefile │ │ │ │ └── api.h │ │ │ └── avx2 │ │ │ │ ├── jkem.jazz │ │ │ │ ├── Makefile │ │ │ │ └── api.h │ │ ├── 1024 │ │ │ ├── avx2 │ │ │ │ ├── jkem.jazz │ │ │ │ ├── Makefile │ │ │ │ └── api.h │ │ │ └── ref │ │ │ │ ├── jkem.jazz │ │ │ │ ├── Makefile │ │ │ │ └── api.h │ │ └── .gitkeep │ ├── .gitignore │ ├── randombytes │ │ ├── randombytes1.h │ │ ├── jasmin_syscall.h │ │ ├── randombytes1.c │ │ ├── Makefile │ │ └── jasmin_syscall.c │ └── bindings │ │ ├── mlkem-native-768 │ │ └── api.h │ │ └── mlkem-native-1024 │ │ └── api.h ├── results │ ├── cannonlake-i710700k │ │ ├── supercop │ │ │ ├── raw │ │ │ │ └── .gitkeep │ │ │ └── macros.tex │ │ ├── bench_crystals_avx2.out │ │ ├── bench_jasmin_avx2.out │ │ ├── bench_libjade_avx2.out │ │ ├── bench_pqclean_avx2.out │ │ ├── bench_jasmin_avx2v.out │ │ ├── bench_crystals_ref.out │ │ ├── bench_jasmin_ref.out │ │ ├── bench_libjade_ref.out │ │ ├── bench_pqclean_clean.out │ │ └── macros.tex │ ├── alderlake-i71260p │ │ ├── bench_jasmin_avx2.out │ │ ├── bench_libjade_avx2.out │ │ ├── bench_pqclean_avx2.out │ │ ├── bench_crystals_avx2.out │ │ ├── bench_crystals_ref.out │ │ ├── bench_jasmin_avx2v.out │ │ ├── bench_jasmin_ref.out │ │ ├── bench_libjade_ref.out │ │ ├── bench_pqclean_clean.out │ │ ├── macros.tex │ │ └── supercop │ │ │ └── macros.tex │ ├── haswell-i74770k │ │ ├── bench_crystals_avx2.out │ │ ├── bench_jasmin_avx2.out │ │ ├── bench_libjade_avx2.out │ │ ├── bench_pqclean_avx2.out │ │ ├── bench_jasmin_avx2v.out │ │ ├── bench_jasmin_ref.out │ │ ├── bench_libjade_ref.out │ │ ├── bench_crystals_ref.out │ │ ├── bench_pqclean_clean.out │ │ ├── macros.tex │ │ └── supercop │ │ │ └── macros.tex │ └── skylake-i76500u │ │ ├── bench_crystals_avx2.out │ │ ├── bench_jasmin_avx2.out │ │ ├── bench_libjade_avx2.out │ │ ├── bench_pqclean_avx2.out │ │ ├── bench_jasmin_ref.out │ │ ├── bench_libjade_ref.out │ │ ├── bench_crystals_ref.out │ │ ├── bench_jasmin_avx2v.out │ │ ├── bench_pqclean_clean.out │ │ ├── macros.tex │ │ └── supercop │ │ └── macros.tex ├── .gitignore ├── supercop-patch │ └── crypto_kem │ │ └── kyber768 │ │ ├── jasmin_avx2 │ │ ├── goal-constindex │ │ ├── goal-constbranch │ │ ├── jasmin_syscall.c │ │ └── api.h │ │ ├── jasmin_ref │ │ ├── goal-constbranch │ │ ├── goal-constindex │ │ ├── jasmin_syscall.c │ │ └── api.h │ │ ├── libjade_ref │ │ ├── goal-constindex │ │ ├── goal-constbranch │ │ ├── jasmin_syscall.c │ │ └── api.h │ │ ├── jasmin_avx2v │ │ ├── goal-constbranch │ │ ├── goal-constindex │ │ ├── jasmin_syscall.c │ │ └── api.h │ │ ├── libjade_avx2 │ │ ├── goal-constbranch │ │ ├── goal-constindex │ │ ├── jasmin_syscall.c │ │ └── api.h │ │ ├── libjade_ravx2 │ │ ├── goal-constbranch │ │ ├── goal-constindex │ │ ├── api.h │ │ └── jasmin_syscall.c │ │ └── libjade_rref │ │ ├── goal-constbranch │ │ ├── goal-constindex │ │ ├── api.h │ │ └── jasmin_syscall.c ├── report │ ├── .gitignore │ └── Makefile ├── test │ ├── notrandombytes.h │ ├── notrandombytes1.h │ ├── print.h │ ├── namespace.h │ ├── try-anything.h │ ├── jade_kem.h │ ├── notrandombytes1.c │ └── print.c ├── table │ ├── Makefile │ └── table.tex ├── memory │ ├── config.h │ ├── namespace.h │ ├── jade_kem.h │ └── memory.c ├── common │ ├── alignedcalloc.c │ ├── namespace.h │ ├── config.h │ ├── median.c │ └── cpucycles.c ├── supercop-run.sh ├── benchmacros.artifact.sh ├── supercop-update.sh └── benchmacros.sh ├── code ├── jasmin │ ├── 768 │ │ ├── avx2 │ │ │ ├── extraction │ │ │ │ ├── BArray1.ec │ │ │ │ ├── BArray2.ec │ │ │ │ ├── BArray4.ec │ │ │ │ ├── BArray8.ec │ │ │ │ ├── Array1.ec │ │ │ │ ├── Array2.ec │ │ │ │ ├── Array4.ec │ │ │ │ ├── Array5.ec │ │ │ │ ├── Array6.ec │ │ │ │ ├── Array7.ec │ │ │ │ ├── Array8.ec │ │ │ │ ├── BArray128.ec │ │ │ │ ├── BArray16.ec │ │ │ │ ├── BArray160.ec │ │ │ │ ├── BArray192.ec │ │ │ │ ├── BArray200.ec │ │ │ │ ├── BArray224.ec │ │ │ │ ├── BArray256.ec │ │ │ │ ├── BArray32.ec │ │ │ │ ├── BArray33.ec │ │ │ │ ├── BArray384.ec │ │ │ │ ├── BArray512.ec │ │ │ │ ├── BArray536.ec │ │ │ │ ├── BArray64.ec │ │ │ │ ├── BArray800.ec │ │ │ │ ├── BArray960.ec │ │ │ │ ├── Array128.ec │ │ │ │ ├── Array136.ec │ │ │ │ ├── Array144.ec │ │ │ │ ├── Array148.ec │ │ │ │ ├── Array16.ec │ │ │ │ ├── Array224.ec │ │ │ │ ├── Array24.ec │ │ │ │ ├── Array25.ec │ │ │ │ ├── Array256.ec │ │ │ │ ├── Array300.ec │ │ │ │ ├── Array32.ec │ │ │ │ ├── Array33.ec │ │ │ │ ├── Array384.ec │ │ │ │ ├── Array400.ec │ │ │ │ ├── Array536.ec │ │ │ │ ├── Array64.ec │ │ │ │ ├── Array768.ec │ │ │ │ ├── Array800.ec │ │ │ │ ├── Array960.ec │ │ │ │ ├── BArray1088.ec │ │ │ │ ├── BArray1120.ec │ │ │ │ ├── BArray1152.ec │ │ │ │ ├── BArray1184.ec │ │ │ │ ├── BArray1410.ec │ │ │ │ ├── BArray1536.ec │ │ │ │ ├── BArray1568.ec │ │ │ │ ├── BArray1600.ec │ │ │ │ ├── BArray2048.ec │ │ │ │ ├── BArray2144.ec │ │ │ │ ├── BArray2400.ec │ │ │ │ ├── BArray3168.ec │ │ │ │ ├── BArray4608.ec │ │ │ │ ├── BArray8192.ec │ │ │ │ ├── WArray1.ec │ │ │ │ ├── WArray2.ec │ │ │ │ ├── WArray4.ec │ │ │ │ ├── WArray8.ec │ │ │ │ ├── Array1024.ec │ │ │ │ ├── Array1088.ec │ │ │ │ ├── Array1120.ec │ │ │ │ ├── Array1152.ec │ │ │ │ ├── Array1184.ec │ │ │ │ ├── Array2048.ec │ │ │ │ ├── Array2144.ec │ │ │ │ ├── Array2304.ec │ │ │ │ ├── Array2400.ec │ │ │ │ ├── Array4608.ec │ │ │ │ ├── WArray128.ec │ │ │ │ ├── WArray16.ec │ │ │ │ ├── WArray160.ec │ │ │ │ ├── WArray192.ec │ │ │ │ ├── WArray200.ec │ │ │ │ ├── WArray224.ec │ │ │ │ ├── WArray256.ec │ │ │ │ ├── WArray32.ec │ │ │ │ ├── WArray33.ec │ │ │ │ ├── WArray384.ec │ │ │ │ ├── WArray512.ec │ │ │ │ ├── WArray536.ec │ │ │ │ ├── WArray64.ec │ │ │ │ ├── WArray800.ec │ │ │ │ ├── WArray960.ec │ │ │ │ ├── WArray1088.ec │ │ │ │ ├── WArray1120.ec │ │ │ │ ├── WArray1152.ec │ │ │ │ ├── WArray1184.ec │ │ │ │ ├── WArray1536.ec │ │ │ │ ├── WArray2048.ec │ │ │ │ ├── WArray2144.ec │ │ │ │ ├── WArray2400.ec │ │ │ │ ├── WArray4608.ec │ │ │ │ ├── SBArray4_1.ec │ │ │ │ ├── SBArray8_2.ec │ │ │ │ ├── SBArray64_32.ec │ │ │ │ ├── SBArray1120_32.ec │ │ │ │ ├── SBArray128_128.ec │ │ │ │ ├── SBArray1600_32.ec │ │ │ │ ├── SBArray2400_32.ec │ │ │ │ ├── SBArray3168_32.ec │ │ │ │ ├── SBArray536_200.ec │ │ │ │ ├── SBArray1088_128.ec │ │ │ │ ├── SBArray1088_960.ec │ │ │ │ ├── SBArray1152_384.ec │ │ │ │ ├── SBArray1536_384.ec │ │ │ │ ├── SBArray1536_512.ec │ │ │ │ ├── SBArray1568_160.ec │ │ │ │ ├── SBArray2048_512.ec │ │ │ │ ├── SBArray2144_536.ec │ │ │ │ ├── SBArray4608_512.ec │ │ │ │ ├── SBArray8192_512.ec │ │ │ │ ├── SBArray1120_1088.ec │ │ │ │ ├── SBArray1184_1152.ec │ │ │ │ ├── SBArray1568_1410.ec │ │ │ │ ├── SBArray1568_1536.ec │ │ │ │ ├── SBArray1600_1568.ec │ │ │ │ ├── SBArray2400_1152.ec │ │ │ │ ├── SBArray2400_1184.ec │ │ │ │ ├── SBArray3168_1536.ec │ │ │ │ ├── SBArray3168_1568.ec │ │ │ │ ├── SBArray4608_1536.ec │ │ │ │ ├── SBArray4608_2048.ec │ │ │ │ ├── SBArray8192_2048.ec │ │ │ │ └── Makefile │ │ │ ├── params.jinc │ │ │ ├── test │ │ │ │ └── test.sh │ │ │ ├── gen_matrix_globals.jinc │ │ │ ├── gen_matrix.jinc │ │ │ └── include │ │ │ │ └── api.h │ │ └── ref │ │ │ ├── extraction │ │ │ ├── Array4.ec │ │ │ ├── Array5.ec │ │ │ ├── Array8.ec │ │ │ ├── Array128.ec │ │ │ ├── Array136.ec │ │ │ ├── Array148.ec │ │ │ ├── Array168.ec │ │ │ ├── Array200.ec │ │ │ ├── Array24.ec │ │ │ ├── Array25.ec │ │ │ ├── Array256.ec │ │ │ ├── Array300.ec │ │ │ ├── Array32.ec │ │ │ ├── Array33.ec │ │ │ ├── Array34.ec │ │ │ ├── Array384.ec │ │ │ ├── Array512.ec │ │ │ ├── Array64.ec │ │ │ ├── Array768.ec │ │ │ ├── Array960.ec │ │ │ ├── WArray20.ec │ │ │ ├── WArray32.ec │ │ │ ├── WArray33.ec │ │ │ ├── WArray34.ec │ │ │ ├── WArray40.ec │ │ │ ├── WArray64.ec │ │ │ ├── Array1088.ec │ │ │ ├── Array1152.ec │ │ │ ├── Array1184.ec │ │ │ ├── Array2304.ec │ │ │ ├── Array2400.ec │ │ │ ├── WArray128.ec │ │ │ ├── WArray168.ec │ │ │ ├── WArray192.ec │ │ │ ├── WArray200.ec │ │ │ ├── WArray256.ec │ │ │ ├── WArray384.ec │ │ │ ├── WArray512.ec │ │ │ ├── WArray960.ec │ │ │ ├── WArray1088.ec │ │ │ ├── WArray1152.ec │ │ │ ├── WArray1184.ec │ │ │ ├── WArray1536.ec │ │ │ ├── WArray2400.ec │ │ │ ├── WArray4608.ec │ │ │ └── Makefile │ │ │ ├── params.jinc │ │ │ ├── test │ │ │ └── test.sh │ │ │ ├── include │ │ │ └── api.h │ │ │ ├── poly.jinc │ │ │ └── Makefile │ ├── 1024 │ │ ├── avx2 │ │ │ ├── extraction │ │ │ │ ├── Array1.ec │ │ │ │ ├── Array2.ec │ │ │ │ ├── Array4.ec │ │ │ │ ├── Array5.ec │ │ │ │ ├── Array6.ec │ │ │ │ ├── Array7.ec │ │ │ │ ├── Array8.ec │ │ │ │ ├── BArray1.ec │ │ │ │ ├── BArray128.ec │ │ │ │ ├── BArray16.ec │ │ │ │ ├── BArray160.ec │ │ │ │ ├── BArray192.ec │ │ │ │ ├── BArray2.ec │ │ │ │ ├── BArray200.ec │ │ │ │ ├── BArray224.ec │ │ │ │ ├── BArray256.ec │ │ │ │ ├── BArray32.ec │ │ │ │ ├── BArray33.ec │ │ │ │ ├── BArray384.ec │ │ │ │ ├── BArray4.ec │ │ │ │ ├── BArray512.ec │ │ │ │ ├── BArray536.ec │ │ │ │ ├── BArray64.ec │ │ │ │ ├── BArray8.ec │ │ │ │ ├── BArray800.ec │ │ │ │ ├── Array16.ec │ │ │ │ ├── Array24.ec │ │ │ │ ├── Array25.ec │ │ │ │ ├── Array32.ec │ │ │ │ ├── Array33.ec │ │ │ │ ├── Array64.ec │ │ │ │ ├── BArray1410.ec │ │ │ │ ├── BArray1536.ec │ │ │ │ ├── BArray1568.ec │ │ │ │ ├── BArray1600.ec │ │ │ │ ├── BArray2048.ec │ │ │ │ ├── BArray2144.ec │ │ │ │ ├── BArray3168.ec │ │ │ │ ├── BArray8192.ec │ │ │ │ ├── WArray1.ec │ │ │ │ ├── WArray2.ec │ │ │ │ ├── WArray4.ec │ │ │ │ ├── WArray8.ec │ │ │ │ ├── Array1024.ec │ │ │ │ ├── Array128.ec │ │ │ │ ├── Array1408.ec │ │ │ │ ├── Array1410.ec │ │ │ │ ├── Array1536.ec │ │ │ │ ├── Array1568.ec │ │ │ │ ├── Array160.ec │ │ │ │ ├── Array1600.ec │ │ │ │ ├── Array192.ec │ │ │ │ ├── Array196.ec │ │ │ │ ├── Array2048.ec │ │ │ │ ├── Array2144.ec │ │ │ │ ├── Array224.ec │ │ │ │ ├── Array256.ec │ │ │ │ ├── Array3168.ec │ │ │ │ ├── Array384.ec │ │ │ │ ├── Array396.ec │ │ │ │ ├── Array400.ec │ │ │ │ ├── Array4096.ec │ │ │ │ ├── Array536.ec │ │ │ │ ├── Array800.ec │ │ │ │ ├── Array8192.ec │ │ │ │ ├── WArray128.ec │ │ │ │ ├── WArray16.ec │ │ │ │ ├── WArray160.ec │ │ │ │ ├── WArray192.ec │ │ │ │ ├── WArray200.ec │ │ │ │ ├── WArray224.ec │ │ │ │ ├── WArray256.ec │ │ │ │ ├── WArray32.ec │ │ │ │ ├── WArray33.ec │ │ │ │ ├── WArray384.ec │ │ │ │ ├── WArray512.ec │ │ │ │ ├── WArray536.ec │ │ │ │ ├── WArray64.ec │ │ │ │ ├── WArray800.ec │ │ │ │ ├── WArray1408.ec │ │ │ │ ├── WArray1410.ec │ │ │ │ ├── WArray1536.ec │ │ │ │ ├── WArray1568.ec │ │ │ │ ├── WArray1600.ec │ │ │ │ ├── WArray2048.ec │ │ │ │ ├── WArray2144.ec │ │ │ │ ├── WArray3168.ec │ │ │ │ ├── WArray8192.ec │ │ │ │ ├── SBArray4_1.ec │ │ │ │ ├── SBArray8_2.ec │ │ │ │ ├── SBArray64_32.ec │ │ │ │ ├── SBArray128_128.ec │ │ │ │ ├── SBArray1600_32.ec │ │ │ │ ├── SBArray3168_32.ec │ │ │ │ ├── SBArray536_200.ec │ │ │ │ ├── SBArray1536_384.ec │ │ │ │ ├── SBArray1568_160.ec │ │ │ │ ├── SBArray2048_512.ec │ │ │ │ ├── SBArray2144_536.ec │ │ │ │ ├── SBArray8192_512.ec │ │ │ │ ├── SBArray1568_1410.ec │ │ │ │ ├── SBArray1568_1536.ec │ │ │ │ ├── SBArray1600_1568.ec │ │ │ │ ├── SBArray3168_1536.ec │ │ │ │ ├── SBArray3168_1568.ec │ │ │ │ ├── SBArray8192_2048.ec │ │ │ │ └── Makefile │ │ │ ├── params.jinc │ │ │ ├── test │ │ │ │ └── test.sh │ │ │ ├── gen_matrix_globals.jinc │ │ │ ├── gen_matrix.jinc │ │ │ └── include │ │ │ │ └── api.h │ │ └── ref │ │ │ ├── extraction │ │ │ ├── Array4.ec │ │ │ ├── Array5.ec │ │ │ ├── Array8.ec │ │ │ ├── Array128.ec │ │ │ ├── Array160.ec │ │ │ ├── Array168.ec │ │ │ ├── Array196.ec │ │ │ ├── Array200.ec │ │ │ ├── Array24.ec │ │ │ ├── Array25.ec │ │ │ ├── Array256.ec │ │ │ ├── Array32.ec │ │ │ ├── Array33.ec │ │ │ ├── Array34.ec │ │ │ ├── Array384.ec │ │ │ ├── Array396.ec │ │ │ ├── Array512.ec │ │ │ ├── Array64.ec │ │ │ ├── WArray8.ec │ │ │ ├── Array1024.ec │ │ │ ├── Array1408.ec │ │ │ ├── Array1536.ec │ │ │ ├── Array1568.ec │ │ │ ├── Array3168.ec │ │ │ ├── Array4096.ec │ │ │ ├── WArray128.ec │ │ │ ├── WArray16.ec │ │ │ ├── WArray160.ec │ │ │ ├── WArray168.ec │ │ │ ├── WArray192.ec │ │ │ ├── WArray200.ec │ │ │ ├── WArray256.ec │ │ │ ├── WArray32.ec │ │ │ ├── WArray33.ec │ │ │ ├── WArray34.ec │ │ │ ├── WArray384.ec │ │ │ ├── WArray40.ec │ │ │ ├── WArray512.ec │ │ │ ├── WArray64.ec │ │ │ ├── WArray1408.ec │ │ │ ├── WArray1536.ec │ │ │ ├── WArray1568.ec │ │ │ ├── WArray2048.ec │ │ │ ├── WArray3168.ec │ │ │ ├── WArray8192.ec │ │ │ └── Makefile │ │ │ ├── params.jinc │ │ │ ├── test │ │ │ └── test.sh │ │ │ ├── include │ │ │ └── api.h │ │ │ └── Makefile │ └── common │ │ ├── ref │ │ ├── reduce.jinc │ │ ├── params.jinc │ │ ├── verify.jinc │ │ └── zetas.jinc │ │ └── avx2 │ │ ├── params.jinc │ │ └── verify.jinc └── Makefile.conf ├── proof ├── eclib │ ├── W8extra.ec │ ├── JSafety.ec │ └── Jcheck.ec ├── correctness │ ├── 768 │ │ ├── Makefile │ │ ├── README.md │ │ └── NTT.py │ └── 1024 │ │ └── easycrypt.project ├── safety │ └── 768 │ │ └── avx2 │ │ └── easycrypt.project └── security │ └── FLPRG.eca ├── .gitmodules ├── config └── bitwuzla.nix ├── TODO ├── .github └── workflows │ ├── ct.yml │ ├── all.yml │ └── bench.yml ├── easycrypt.project └── Makefile /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /bench/src/jasmin/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/src/.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | *.a 3 | *.s 4 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/supercop/raw/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | supercop-* 3 | !supercop-patch 4 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_avx2/goal-constindex: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_ref/goal-constbranch: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_ref/goal-constindex: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_ref/goal-constindex: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/report/.gitignore: -------------------------------------------------------------------------------- 1 | report.pdf 2 | macros.tex 3 | *.aux 4 | *.log 5 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_avx2/goal-constbranch: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_avx2v/goal-constbranch: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_avx2v/goal-constindex: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_avx2/goal-constbranch: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_avx2/goal-constindex: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_ravx2/goal-constbranch: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_ravx2/goal-constindex: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_ref/goal-constbranch: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_rref/goal-constbranch: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_rref/goal-constindex: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bench/src/jasmin/768/ref/jkem.jazz: -------------------------------------------------------------------------------- 1 | require "../../../../../code/jasmin/768/ref/jkem.jazz" 2 | -------------------------------------------------------------------------------- /bench/src/jasmin/1024/avx2/jkem.jazz: -------------------------------------------------------------------------------- 1 | require "../../../../../code/jasmin/1024/avx2/jkem.jazz" 2 | -------------------------------------------------------------------------------- /bench/src/jasmin/1024/ref/jkem.jazz: -------------------------------------------------------------------------------- 1 | require "../../../../../code/jasmin/1024/ref/jkem.jazz" 2 | -------------------------------------------------------------------------------- /bench/src/jasmin/768/avx2/jkem.jazz: -------------------------------------------------------------------------------- 1 | require "../../../../../code/jasmin/768/avx2/jkem.jazz" 2 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray1.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray2.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 2. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray4.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 4. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray8.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 8. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array1.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1 with op size <- 1. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array2.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array2 with op size <- 2. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array4.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array4 with op size <- 4. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array5.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array5 with op size <- 5. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array6.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array6 with op size <- 6. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array7.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array7 with op size <- 7. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array8.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array8 with op size <- 8. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray1.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 128. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray16.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 16. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray160.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 160. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 192. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray2.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 2. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray200.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 200. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray224.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 224. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray256.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 256. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 32. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray33.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 33. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 384. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray4.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 4. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 512. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 536. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray64.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 64. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray8.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 8. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray800.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 800. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array4.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array4 with op size <- 4. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array5.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array5 with op size <- 5. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array8.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array8 with op size <- 8. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array1.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1 with op size <- 1. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array2.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array2 with op size <- 2. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array4.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array4 with op size <- 4. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array5.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array5 with op size <- 5. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array6.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array6 with op size <- 6. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array7.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array7 with op size <- 7. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array8.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array8 with op size <- 8. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 128. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray16.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 16. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray160.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 160. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 192. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray200.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 200. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray224.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 224. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray256.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 256. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 32. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray33.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 33. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 384. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 512. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 536. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray64.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 64. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray800.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 800. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray960.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 960. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array4.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array4 with op size <- 4. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array5.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array5 with op size <- 5. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array8.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array8 with op size <- 8. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array16.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array16 with op size <- 16. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array24.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array24 with op size <- 24. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array25.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array25 with op size <- 25. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array32 with op size <- 32. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array33.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array33 with op size <- 33. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array64.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array64 with op size <- 64. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray1410.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1410. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1536. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray1568.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1568. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray1600.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1600. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray2048.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 2048. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray2144.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 2144. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray3168.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 3168. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/BArray8192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 8192. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray1.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1 with op size <- 1. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray2.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray2 with op size <- 2. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray4.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray4 with op size <- 4. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray8.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray8 with op size <- 8. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array128 with op size <- 128. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array160.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array160 with op size <- 160. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array168.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array168 with op size <- 168. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array196.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array196 with op size <- 196. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array200.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array200 with op size <- 200. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array24.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array24 with op size <- 24. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array25.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array25 with op size <- 25. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array256.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array256 with op size <- 256. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array32 with op size <- 32. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array33.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array33 with op size <- 33. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array34.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array34 with op size <- 34. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array384 with op size <- 384. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array396.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array396 with op size <- 396. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array512 with op size <- 512. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array64.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array64 with op size <- 64. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray8.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray8 with op size <- 8. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array128 with op size <- 128. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array136.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array136 with op size <- 136. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array144.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array144 with op size <- 144. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array148.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array148 with op size <- 148. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array16.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array16 with op size <- 16. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array224.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array224 with op size <- 224. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array24.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array24 with op size <- 24. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array25.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array25 with op size <- 25. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array256.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array256 with op size <- 256. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array300.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array300 with op size <- 300. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array32 with op size <- 32. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array33.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array33 with op size <- 33. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array384 with op size <- 384. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array400.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array400 with op size <- 400. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array536 with op size <- 536. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array64.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array64 with op size <- 64. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array768.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array768 with op size <- 768. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array800.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array800 with op size <- 800. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array960.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array960 with op size <- 960. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray1088.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1088. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray1120.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1120. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray1152.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1152. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray1184.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1184. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray1410.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1410. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1536. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray1568.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1568. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray1600.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 1600. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray2048.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 2048. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray2144.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 2144. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray2400.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 2400. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray3168.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 3168. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray4608.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 4608. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/BArray8192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | clone include ByteArray with op size <= 8192. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray1.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1 with op size <- 1. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray2.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray2 with op size <- 2. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray4.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray4 with op size <- 4. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray8.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray8 with op size <- 8. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array128 with op size <- 128. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array136.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array136 with op size <- 136. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array148.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array148 with op size <- 148. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array168.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array168 with op size <- 168. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array200.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array200 with op size <- 200. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array24.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array24 with op size <- 24. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array25.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array25 with op size <- 25. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array256.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array256 with op size <- 256. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array300.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array300 with op size <- 300. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array32 with op size <- 32. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array33.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array33 with op size <- 33. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array34.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array34 with op size <- 34. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array384 with op size <- 384. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array512 with op size <- 512. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array64.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array64 with op size <- 64. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array768.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array768 with op size <- 768. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array960.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array960 with op size <- 960. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray20.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray20 with op size <- 20. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray32 with op size <- 32. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray33.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray33 with op size <- 33. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray34.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray34 with op size <- 34. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray40.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray40 with op size <- 40. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray64.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray64 with op size <- 64. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array1024.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1024 with op size <- 1024. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array128 with op size <- 128. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array1408.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1408 with op size <- 1408. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array1410.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1410 with op size <- 1410. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1536 with op size <- 1536. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array1568.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1568 with op size <- 1568. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array160.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array160 with op size <- 160. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array1600.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1600 with op size <- 1600. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array192 with op size <- 192. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array196.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array196 with op size <- 196. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array2048.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array2048 with op size <- 2048. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array2144.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array2144 with op size <- 2144. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array224.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array224 with op size <- 224. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array256.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array256 with op size <- 256. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array3168.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array3168 with op size <- 3168. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array384 with op size <- 384. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array396.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array396 with op size <- 396. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array400.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array400 with op size <- 400. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array4096.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array4096 with op size <- 4096. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array536 with op size <- 536. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array800.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array800 with op size <- 800. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Array8192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array8192 with op size <- 8192. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray128 with op size <- 128. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray16.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray16 with op size <- 16. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray160.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray160 with op size <- 160. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray192 with op size <- 192. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray200.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray200 with op size <- 200. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray224.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray224 with op size <- 224. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray256.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray256 with op size <- 256. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray32 with op size <- 32. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray33.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray33 with op size <- 33. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray384 with op size <- 384. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray512 with op size <- 512. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray536 with op size <- 536. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray64.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray64 with op size <- 64. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray800.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray800 with op size <- 800. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array1024.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1024 with op size <- 1024. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array1408.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1408 with op size <- 1408. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1536 with op size <- 1536. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array1568.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1568 with op size <- 1568. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array3168.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array3168 with op size <- 3168. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Array4096.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array4096 with op size <- 4096. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray128 with op size <- 128. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray16.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray16 with op size <- 16. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray160.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray160 with op size <- 160. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray168.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray168 with op size <- 168. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray192 with op size <- 192. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray200.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray200 with op size <- 200. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray256.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray256 with op size <- 256. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray32 with op size <- 32. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray33.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray33 with op size <- 33. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray34.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray34 with op size <- 34. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray384 with op size <- 384. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray40.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray40 with op size <- 40. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray512 with op size <- 512. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray64.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray64 with op size <- 64. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array1024.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1024 with op size <- 1024. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array1088.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1088 with op size <- 1088. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array1120.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1120 with op size <- 1120. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array1152.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1152 with op size <- 1152. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array1184.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1184 with op size <- 1184. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array2048.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array2048 with op size <- 2048. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array2144.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array2144 with op size <- 2144. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array2304.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array2304 with op size <- 2304. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array2400.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array2400 with op size <- 2400. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Array4608.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array4608 with op size <- 4608. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray128 with op size <- 128. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray16.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray16 with op size <- 16. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray160.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray160 with op size <- 160. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray192 with op size <- 192. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray200.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray200 with op size <- 200. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray224.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray224 with op size <- 224. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray256.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray256 with op size <- 256. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray32 with op size <- 32. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray33.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray33 with op size <- 33. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray384 with op size <- 384. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray512 with op size <- 512. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray536 with op size <- 536. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray64.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray64 with op size <- 64. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray800.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray800 with op size <- 800. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray960.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray960 with op size <- 960. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array1088.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1088 with op size <- 1088. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array1152.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1152 with op size <- 1152. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array1184.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array1184 with op size <- 1184. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array2304.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array2304 with op size <- 2304. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Array2400.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JArray. 2 | 3 | clone export PolyArray as Array2400 with op size <- 2400. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray128 with op size <- 128. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray168.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray168 with op size <- 168. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray192 with op size <- 192. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray200.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray200 with op size <- 200. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray256.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray256 with op size <- 256. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray384 with op size <- 384. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray512 with op size <- 512. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray960.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray960 with op size <- 960. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray1408.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1408 with op size <- 1408. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray1410.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1410 with op size <- 1410. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1536 with op size <- 1536. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray1568.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1568 with op size <- 1568. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray1600.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1600 with op size <- 1600. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray2048.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray2048 with op size <- 2048. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray2144.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray2144 with op size <- 2144. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray3168.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray3168 with op size <- 3168. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/WArray8192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray8192 with op size <- 8192. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray1408.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1408 with op size <- 1408. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1536 with op size <- 1536. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray1568.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1568 with op size <- 1568. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray2048.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray2048 with op size <- 2048. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray3168.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray3168 with op size <- 3168. 4 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/WArray8192.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray8192 with op size <- 8192. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray1088.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1088 with op size <- 1088. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray1120.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1120 with op size <- 1120. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray1152.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1152 with op size <- 1152. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray1184.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1184 with op size <- 1184. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1536 with op size <- 1536. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray2048.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray2048 with op size <- 2048. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray2144.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray2144 with op size <- 2144. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray2400.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray2400 with op size <- 2400. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/WArray4608.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray4608 with op size <- 4608. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray1088.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1088 with op size <- 1088. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray1152.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1152 with op size <- 1152. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray1184.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1184 with op size <- 1184. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray1536 with op size <- 1536. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray2400.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray2400 with op size <- 2400. 4 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/WArray4608.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JWord_array. 2 | 3 | clone export WArray as WArray4608 with op size <- 4608. 4 | -------------------------------------------------------------------------------- /bench/src/randombytes/randombytes1.h: -------------------------------------------------------------------------------- 1 | #ifndef RANDOMBYTES_H 2 | #define RANDOMBYTES_H 3 | 4 | #include 5 | 6 | void randombytes(uint8_t* x, uint64_t xlen); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /bench/test/notrandombytes.h: -------------------------------------------------------------------------------- 1 | #ifndef NOTRANDOMBYTES_H 2 | #define NOTRANDOMBYTES_H 3 | #include 4 | 5 | void notrandombytes(unsigned char *x, uint64_t xlen); 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/params.jinc: -------------------------------------------------------------------------------- 1 | param int MLKEM_K = 4; 2 | param int MLKEM_POLYCOMPRESSEDBYTES = 160; /* 256*5/8 */ 3 | param int MLKEM_POLYVECCOMPRESSEDBYTES = (MLKEM_K * 352); /* 256*11/8 */ 4 | require "../../common/ref/params.jinc" 5 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/params.jinc: -------------------------------------------------------------------------------- 1 | param int MLKEM_K = 3; 2 | param int MLKEM_POLYCOMPRESSEDBYTES = 128; /* 256*4/8 */ 3 | param int MLKEM_POLYVECCOMPRESSEDBYTES = (MLKEM_K * 320); /* 256*10/8 */ 4 | require "../../common/ref/params.jinc" 5 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/params.jinc: -------------------------------------------------------------------------------- 1 | param int MLKEM_K = 4; 2 | param int MLKEM_POLYCOMPRESSEDBYTES = 160; /* 256*5/8 */ 3 | param int MLKEM_POLYVECCOMPRESSEDBYTES = (MLKEM_K * 352); /* 256*11/8 */ 4 | 5 | require "../../common/avx2/params.jinc" 6 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/params.jinc: -------------------------------------------------------------------------------- 1 | param int MLKEM_K = 3; 2 | param int MLKEM_POLYCOMPRESSEDBYTES = 128; /* 256*4/8 */ 3 | param int MLKEM_POLYVECCOMPRESSEDBYTES = (MLKEM_K * 320); /* 256*10/8 */ 4 | 5 | require "../../common/avx2/params.jinc" 6 | -------------------------------------------------------------------------------- /bench/table/Makefile: -------------------------------------------------------------------------------- 1 | table.pdf: table.tex macros.tex 2 | pdflatex table.tex 3 | 4 | macros.tex: 5 | $(MAKE) -C ../ -f Makefile.artifact 6 | 7 | clean: 8 | rm -f *.aux *.log 9 | 10 | distclean: clean 11 | rm -f table.pdf macros.tex 12 | -------------------------------------------------------------------------------- /bench/test/notrandombytes1.h: -------------------------------------------------------------------------------- 1 | #ifndef NOTRANDOMBYTES1_H 2 | #define NOTRANDOMBYTES1_H 3 | #include 4 | 5 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* x, uint64_t xlen); 6 | void randombytes(uint8_t* x, uint64_t xlen); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray4_1.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1 BArray4. 4 | 5 | clone SubByteArray as SBArray4_1 with theory Asmall <= BArray1, 6 | theory Abig <= BArray4. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray8_2.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray2 BArray8. 4 | 5 | clone SubByteArray as SBArray8_2 with theory Asmall <= BArray2, 6 | theory Abig <= BArray8. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray4_1.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1 BArray4. 4 | 5 | clone SubByteArray as SBArray4_1 with theory Asmall <= BArray1, 6 | theory Abig <= BArray4. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray8_2.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray2 BArray8. 4 | 5 | clone SubByteArray as SBArray8_2 with theory Asmall <= BArray2, 6 | theory Abig <= BArray8. 7 | -------------------------------------------------------------------------------- /bench/src/randombytes/jasmin_syscall.h: -------------------------------------------------------------------------------- 1 | #ifndef JASMIN_SYSCALL_H 2 | #define JASMIN_SYSCALL_H 3 | 4 | #include 5 | 6 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* x, uint64_t xlen) 7 | __asm("__jasmin_syscall_randombytes__"); 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_avx2/jasmin_syscall.c: -------------------------------------------------------------------------------- 1 | #include "randombytes.h" 2 | 3 | #include 4 | 5 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* _x, uint64_t xlen) 6 | { 7 | randombytes(_x, xlen); 8 | return _x; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_ref/jasmin_syscall.c: -------------------------------------------------------------------------------- 1 | #include "randombytes.h" 2 | 3 | #include 4 | 5 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* _x, uint64_t xlen) 6 | { 7 | randombytes(_x, xlen); 8 | return _x; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_ref/jasmin_syscall.c: -------------------------------------------------------------------------------- 1 | #include "randombytes.h" 2 | 3 | #include 4 | 5 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* _x, uint64_t xlen) 6 | { 7 | randombytes(_x, xlen); 8 | return _x; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_avx2v/jasmin_syscall.c: -------------------------------------------------------------------------------- 1 | #include "randombytes.h" 2 | 3 | #include 4 | 5 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* _x, uint64_t xlen) 6 | { 7 | randombytes(_x, xlen); 8 | return _x; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_avx2/jasmin_syscall.c: -------------------------------------------------------------------------------- 1 | #include "randombytes.h" 2 | 3 | #include 4 | 5 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* _x, uint64_t xlen) 6 | { 7 | randombytes(_x, xlen); 8 | return _x; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray64_32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray32 BArray64. 4 | 5 | clone SubByteArray as SBArray64_32 with theory Asmall <= BArray32, 6 | theory Abig <= BArray64. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray64_32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray32 BArray64. 4 | 5 | clone SubByteArray as SBArray64_32 with theory Asmall <= BArray32, 6 | theory Abig <= BArray64. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray128_128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray128 BArray128. 4 | 5 | clone SubByteArray as SBArray128_128 with theory Asmall <= BArray128, 6 | theory Abig <= BArray128. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray1600_32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray32 BArray1600. 4 | 5 | clone SubByteArray as SBArray1600_32 with theory Asmall <= BArray32, 6 | theory Abig <= BArray1600. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray3168_32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray32 BArray3168. 4 | 5 | clone SubByteArray as SBArray3168_32 with theory Asmall <= BArray32, 6 | theory Abig <= BArray3168. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray536_200.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray200 BArray536. 4 | 5 | clone SubByteArray as SBArray536_200 with theory Asmall <= BArray200, 6 | theory Abig <= BArray536. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1120_32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray32 BArray1120. 4 | 5 | clone SubByteArray as SBArray1120_32 with theory Asmall <= BArray32, 6 | theory Abig <= BArray1120. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray128_128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray128 BArray128. 4 | 5 | clone SubByteArray as SBArray128_128 with theory Asmall <= BArray128, 6 | theory Abig <= BArray128. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1600_32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray32 BArray1600. 4 | 5 | clone SubByteArray as SBArray1600_32 with theory Asmall <= BArray32, 6 | theory Abig <= BArray1600. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray2400_32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray32 BArray2400. 4 | 5 | clone SubByteArray as SBArray2400_32 with theory Asmall <= BArray32, 6 | theory Abig <= BArray2400. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray3168_32.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray32 BArray3168. 4 | 5 | clone SubByteArray as SBArray3168_32 with theory Asmall <= BArray32, 6 | theory Abig <= BArray3168. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray536_200.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray200 BArray536. 4 | 5 | clone SubByteArray as SBArray536_200 with theory Asmall <= BArray200, 6 | theory Abig <= BArray536. 7 | -------------------------------------------------------------------------------- /bench/src/randombytes/randombytes1.c: -------------------------------------------------------------------------------- 1 | #include "randombytes1.h" 2 | #include "jasmin_syscall.h" 3 | 4 | #include 5 | #include 6 | 7 | void randombytes(uint8_t* x, uint64_t xlen) 8 | { 9 | x = __jasmin_syscall_randombytes__(x, xlen); 10 | return; 11 | } 12 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray1536_384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray384 BArray1536. 4 | 5 | clone SubByteArray as SBArray1536_384 with theory Asmall <= BArray384, 6 | theory Abig <= BArray1536. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray1568_160.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray160 BArray1568. 4 | 5 | clone SubByteArray as SBArray1568_160 with theory Asmall <= BArray160, 6 | theory Abig <= BArray1568. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray2048_512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray512 BArray2048. 4 | 5 | clone SubByteArray as SBArray2048_512 with theory Asmall <= BArray512, 6 | theory Abig <= BArray2048. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray2144_536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray536 BArray2144. 4 | 5 | clone SubByteArray as SBArray2144_536 with theory Asmall <= BArray536, 6 | theory Abig <= BArray2144. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray8192_512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray512 BArray8192. 4 | 5 | clone SubByteArray as SBArray8192_512 with theory Asmall <= BArray512, 6 | theory Abig <= BArray8192. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1088_128.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray128 BArray1088. 4 | 5 | clone SubByteArray as SBArray1088_128 with theory Asmall <= BArray128, 6 | theory Abig <= BArray1088. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1088_960.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray960 BArray1088. 4 | 5 | clone SubByteArray as SBArray1088_960 with theory Asmall <= BArray960, 6 | theory Abig <= BArray1088. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1152_384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray384 BArray1152. 4 | 5 | clone SubByteArray as SBArray1152_384 with theory Asmall <= BArray384, 6 | theory Abig <= BArray1152. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1536_384.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray384 BArray1536. 4 | 5 | clone SubByteArray as SBArray1536_384 with theory Asmall <= BArray384, 6 | theory Abig <= BArray1536. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1536_512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray512 BArray1536. 4 | 5 | clone SubByteArray as SBArray1536_512 with theory Asmall <= BArray512, 6 | theory Abig <= BArray1536. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1568_160.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray160 BArray1568. 4 | 5 | clone SubByteArray as SBArray1568_160 with theory Asmall <= BArray160, 6 | theory Abig <= BArray1568. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray2048_512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray512 BArray2048. 4 | 5 | clone SubByteArray as SBArray2048_512 with theory Asmall <= BArray512, 6 | theory Abig <= BArray2048. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray2144_536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray536 BArray2144. 4 | 5 | clone SubByteArray as SBArray2144_536 with theory Asmall <= BArray536, 6 | theory Abig <= BArray2144. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray4608_512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray512 BArray4608. 4 | 5 | clone SubByteArray as SBArray4608_512 with theory Asmall <= BArray512, 6 | theory Abig <= BArray4608. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray8192_512.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray512 BArray8192. 4 | 5 | clone SubByteArray as SBArray8192_512 with theory Asmall <= BArray512, 6 | theory Abig <= BArray8192. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray1568_1410.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1410 BArray1568. 4 | 5 | clone SubByteArray as SBArray1568_1410 with theory Asmall <= BArray1410, 6 | theory Abig <= BArray1568. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray1568_1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1536 BArray1568. 4 | 5 | clone SubByteArray as SBArray1568_1536 with theory Asmall <= BArray1536, 6 | theory Abig <= BArray1568. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray1600_1568.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1568 BArray1600. 4 | 5 | clone SubByteArray as SBArray1600_1568 with theory Asmall <= BArray1568, 6 | theory Abig <= BArray1600. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray3168_1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1536 BArray3168. 4 | 5 | clone SubByteArray as SBArray3168_1536 with theory Asmall <= BArray1536, 6 | theory Abig <= BArray3168. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray3168_1568.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1568 BArray3168. 4 | 5 | clone SubByteArray as SBArray3168_1568 with theory Asmall <= BArray1568, 6 | theory Abig <= BArray3168. 7 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/SBArray8192_2048.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray2048 BArray8192. 4 | 5 | clone SubByteArray as SBArray8192_2048 with theory Asmall <= BArray2048, 6 | theory Abig <= BArray8192. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1120_1088.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1088 BArray1120. 4 | 5 | clone SubByteArray as SBArray1120_1088 with theory Asmall <= BArray1088, 6 | theory Abig <= BArray1120. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1184_1152.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1152 BArray1184. 4 | 5 | clone SubByteArray as SBArray1184_1152 with theory Asmall <= BArray1152, 6 | theory Abig <= BArray1184. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1568_1410.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1410 BArray1568. 4 | 5 | clone SubByteArray as SBArray1568_1410 with theory Asmall <= BArray1410, 6 | theory Abig <= BArray1568. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1568_1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1536 BArray1568. 4 | 5 | clone SubByteArray as SBArray1568_1536 with theory Asmall <= BArray1536, 6 | theory Abig <= BArray1568. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray1600_1568.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1568 BArray1600. 4 | 5 | clone SubByteArray as SBArray1600_1568 with theory Asmall <= BArray1568, 6 | theory Abig <= BArray1600. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray2400_1152.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1152 BArray2400. 4 | 5 | clone SubByteArray as SBArray2400_1152 with theory Asmall <= BArray1152, 6 | theory Abig <= BArray2400. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray2400_1184.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1184 BArray2400. 4 | 5 | clone SubByteArray as SBArray2400_1184 with theory Asmall <= BArray1184, 6 | theory Abig <= BArray2400. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray3168_1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1536 BArray3168. 4 | 5 | clone SubByteArray as SBArray3168_1536 with theory Asmall <= BArray1536, 6 | theory Abig <= BArray3168. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray3168_1568.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1568 BArray3168. 4 | 5 | clone SubByteArray as SBArray3168_1568 with theory Asmall <= BArray1568, 6 | theory Abig <= BArray3168. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray4608_1536.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray1536 BArray4608. 4 | 5 | clone SubByteArray as SBArray4608_1536 with theory Asmall <= BArray1536, 6 | theory Abig <= BArray4608. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray4608_2048.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray2048 BArray4608. 4 | 5 | clone SubByteArray as SBArray4608_2048 with theory Asmall <= BArray2048, 6 | theory Abig <= BArray4608. 7 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/SBArray8192_2048.ec: -------------------------------------------------------------------------------- 1 | from Jasmin require import JByte_array. 2 | 3 | require import BArray2048 BArray8192. 4 | 5 | clone SubByteArray as SBArray8192_2048 with theory Asmall <= BArray2048, 6 | theory Abig <= BArray8192. 7 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/bench_jasmin_avx2.out: -------------------------------------------------------------------------------- 1 | 53109,68431,56180 2 | 53128,68445,56188 3 | 53139,68465,56199 4 | 53142,68469,56205 5 | 53145,68471,56208 6 | 53158,68478,56211 7 | 53160,68482,56213 8 | 53172,68492,56217 9 | 53176,68498,56223 10 | 53192,68504,56227 11 | 53196,68525,56239 12 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/bench_libjade_avx2.out: -------------------------------------------------------------------------------- 1 | 59190,78837,62251 2 | 59192,78863,62268 3 | 59201,78864,62272 4 | 59209,78865,62274 5 | 59211,78867,62288 6 | 59213,78868,62290 7 | 59221,78881,62290 8 | 59221,78910,62293 9 | 59239,78916,62298 10 | 59261,78921,62317 11 | 59300,78922,62341 12 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/bench_pqclean_avx2.out: -------------------------------------------------------------------------------- 1 | 52094,64656,53765 2 | 52096,64671,53768 3 | 52110,64673,53787 4 | 52114,64679,53788 5 | 52114,64693,53796 6 | 52128,64695,53808 7 | 52142,64703,53808 8 | 52160,64705,53820 9 | 52168,64720,53826 10 | 52169,64720,53830 11 | 52174,64728,53868 12 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/bench_crystals_avx2.out: -------------------------------------------------------------------------------- 1 | 47056,62876,47764 2 | 47264,62880,47772 3 | 47272,62888,47772 4 | 47272,62888,47772 5 | 47276,62892,47776 6 | 47280,62900,47784 7 | 47292,62900,47788 8 | 47296,62900,47788 9 | 47304,62904,47792 10 | 47308,62904,47796 11 | 47316,62904,47808 12 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/bench_jasmin_avx2.out: -------------------------------------------------------------------------------- 1 | 48584,63972,51420 2 | 48788,63976,51424 3 | 48796,63984,51436 4 | 48796,63984,51440 5 | 48800,63984,51444 6 | 48800,63988,51444 7 | 48804,63992,51444 8 | 48804,64000,51448 9 | 48804,64016,51448 10 | 48824,64028,51452 11 | 48832,64036,51464 12 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/bench_libjade_avx2.out: -------------------------------------------------------------------------------- 1 | 48164,60500,49412 2 | 48276,60512,49420 3 | 48280,60512,49436 4 | 48284,60528,49436 5 | 48284,60528,49440 6 | 48284,60528,49440 7 | 48296,60532,49444 8 | 48296,60536,49444 9 | 48300,60540,49448 10 | 48300,60548,49460 11 | 48316,60552,49480 12 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/bench_pqclean_avx2.out: -------------------------------------------------------------------------------- 1 | 47232,63380,48032 2 | 47428,63388,48036 3 | 47444,63388,48036 4 | 47444,63392,48048 5 | 47456,63396,48048 6 | 47456,63400,48052 7 | 47456,63404,48052 8 | 47456,63416,48056 9 | 47464,63420,48060 10 | 47472,63424,48072 11 | 47480,63424,48076 12 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/bench_crystals_avx2.out: -------------------------------------------------------------------------------- 1 | 49520,59942,45824 2 | 49534,60000,45834 3 | 49564,60006,45844 4 | 49568,60008,45844 5 | 49572,60014,45846 6 | 49572,60018,45854 7 | 49608,60018,45858 8 | 49614,60018,45866 9 | 49620,60024,45872 10 | 49622,60026,45874 11 | 49636,60026,45876 12 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/bench_jasmin_avx2.out: -------------------------------------------------------------------------------- 1 | 49982,65106,50320 2 | 49988,65120,50322 3 | 49992,65122,50328 4 | 49996,65124,50330 5 | 50004,65126,50338 6 | 50004,65132,50340 7 | 50006,65134,50342 8 | 50008,65136,50350 9 | 50024,65140,50350 10 | 50024,65142,50356 11 | 50030,65146,50362 12 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/bench_libjade_avx2.out: -------------------------------------------------------------------------------- 1 | 49896,59048,46916 2 | 49896,59060,46920 3 | 49910,59060,46922 4 | 49912,59066,46924 5 | 49914,59068,46930 6 | 49916,59072,46934 7 | 49918,59074,46936 8 | 49918,59076,46936 9 | 49922,59078,46944 10 | 49926,59088,46944 11 | 49944,59130,47010 12 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/bench_pqclean_avx2.out: -------------------------------------------------------------------------------- 1 | 49458,60210,46258 2 | 49458,60222,46266 3 | 49462,60230,46266 4 | 49466,60244,46274 5 | 49468,60248,46274 6 | 49476,60258,46274 7 | 49482,60266,46278 8 | 49484,60268,46284 9 | 49488,60282,46284 10 | 49490,60288,46288 11 | 49492,60290,46288 12 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/bench_crystals_avx2.out: -------------------------------------------------------------------------------- 1 | 50408,64866,52445 2 | 50430,64868,52470 3 | 50444,64872,52477 4 | 50449,64880,52477 5 | 50456,64884,52492 6 | 50458,64890,52494 7 | 50477,64903,52505 8 | 50485,64905,52514 9 | 50487,64922,52524 10 | 50487,64933,52543 11 | 50503,64957,52544 12 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/bench_crystals_avx2.out: -------------------------------------------------------------------------------- 1 | 41632,55944,43832 2 | 41672,55950,43836 3 | 41672,55954,43854 4 | 41674,55954,43896 5 | 41682,55956,43898 6 | 41682,55956,43906 7 | 41686,55958,43906 8 | 41686,55960,43908 9 | 41688,55964,43930 10 | 41690,55972,43942 11 | 41698,55980,44084 12 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/bench_jasmin_avx2.out: -------------------------------------------------------------------------------- 1 | 45026,59484,48158 2 | 45032,59490,48166 3 | 45036,59492,48168 4 | 45036,59494,48168 5 | 45038,59496,48170 6 | 45046,59496,48172 7 | 45046,59496,48174 8 | 45046,59496,48174 9 | 45048,59500,48176 10 | 45048,59502,48176 11 | 45050,59504,48182 12 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/bench_libjade_avx2.out: -------------------------------------------------------------------------------- 1 | 42262,54034,45076 2 | 42264,54036,45082 3 | 42272,54036,45084 4 | 42274,54036,45086 5 | 42274,54038,45086 6 | 42278,54044,45088 7 | 42280,54046,45092 8 | 42280,54046,45094 9 | 42282,54048,45098 10 | 42282,54048,45102 11 | 42282,54062,45112 12 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/bench_pqclean_avx2.out: -------------------------------------------------------------------------------- 1 | 41790,55250,44240 2 | 41816,55250,44242 3 | 41816,55258,44250 4 | 41818,55264,44254 5 | 41818,55266,44260 6 | 41820,55266,44266 7 | 41824,55268,44268 8 | 41828,55270,44270 9 | 41834,55270,44272 10 | 41836,55272,44274 11 | 41844,55276,44298 12 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/bench_jasmin_avx2v.out: -------------------------------------------------------------------------------- 1 | 96168,111500,98296 2 | 96276,111504,98300 3 | 96292,111508,98312 4 | 96292,111520,98320 5 | 96296,111532,98328 6 | 96296,111536,98328 7 | 96304,111544,98332 8 | 96308,111556,98336 9 | 96324,111576,98344 10 | 96336,111588,98352 11 | 96336,111588,98360 12 | -------------------------------------------------------------------------------- /proof/eclib/W8extra.ec: -------------------------------------------------------------------------------- 1 | require import AllCore List IntDiv CoreMap IntDiv. 2 | from Jasmin require import JModel JMemory. 3 | import W8. 4 | 5 | lemma wordP_red (w1 w2 :W8.t) : (forall i, i \in iotared 0 8 => w1.[i] = w2.[i]) => w1 = w2. 6 | proof. 7 | rewrite wordP => H i Hi. move :(H i). simplify. smt(). qed. 8 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/bench_jasmin_avx2v.out: -------------------------------------------------------------------------------- 1 | 93220,107432,96526 2 | 93234,107448,96532 3 | 93236,107454,96542 4 | 93242,107458,96550 5 | 93244,107472,96556 6 | 93244,107474,96564 7 | 93246,107488,96584 8 | 93288,107516,96606 9 | 93296,107520,96608 10 | 93308,107528,96620 11 | 93318,107530,96630 12 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/bench_jasmin_ref.out: -------------------------------------------------------------------------------- 1 | 394600,471640,534352 2 | 394612,471644,534396 3 | 394612,471644,534400 4 | 394620,471672,534408 5 | 394628,471676,534412 6 | 394636,471680,534420 7 | 394640,471680,534432 8 | 394644,471696,534436 9 | 394652,471696,534444 10 | 394652,471728,534472 11 | 394668,471744,534492 12 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/bench_libjade_ref.out: -------------------------------------------------------------------------------- 1 | 293032,341800,428016 2 | 293056,341828,428016 3 | 293060,341832,428028 4 | 293064,341832,428040 5 | 293064,341836,428040 6 | 293072,341840,428048 7 | 293088,341840,428056 8 | 293092,341844,428056 9 | 293092,341868,428060 10 | 293112,341872,428072 11 | 293116,341884,428076 12 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/bench_jasmin_ref.out: -------------------------------------------------------------------------------- 1 | 411644,488834,562354 2 | 411652,488856,562400 3 | 411656,488866,562414 4 | 411668,488890,562416 5 | 411670,488894,562424 6 | 411676,488904,562426 7 | 411682,488910,562430 8 | 411686,488920,562438 9 | 411692,488932,562446 10 | 411706,488932,562474 11 | 411710,488986,562512 12 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/bench_libjade_ref.out: -------------------------------------------------------------------------------- 1 | 315550,361108,450350 2 | 315570,361116,450406 3 | 315580,361124,450406 4 | 315588,361126,450440 5 | 315592,361146,450446 6 | 315608,361146,450454 7 | 315624,361150,450458 8 | 315626,361168,450468 9 | 315634,361168,450490 10 | 315634,361182,450508 11 | 315660,361214,450534 12 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/bench_crystals_ref.out: -------------------------------------------------------------------------------- 1 | 200021,257920,293302 2 | 200056,258140,293559 3 | 200060,258146,293618 4 | 200062,258171,293812 5 | 200089,258216,293857 6 | 200101,258231,293897 7 | 200110,258235,293915 8 | 200123,258373,293932 9 | 200231,258414,294360 10 | 200318,258454,294490 11 | 200377,258472,294615 12 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/bench_jasmin_avx2v.out: -------------------------------------------------------------------------------- 1 | 109574,126705,114201 2 | 109600,126710,114225 3 | 109647,126746,114241 4 | 109677,126760,114245 5 | 109679,126785,114290 6 | 109687,126811,114333 7 | 109692,126815,114335 8 | 109695,126822,114341 9 | 109697,126850,114405 10 | 109755,126900,114411 11 | 109835,126945,114418 12 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/bench_jasmin_ref.out: -------------------------------------------------------------------------------- 1 | 515338,611453,695675 2 | 515346,612058,697050 3 | 515356,612497,698415 4 | 515409,612631,722912 5 | 515419,612804,723105 6 | 515436,612810,723220 7 | 515539,612903,723805 8 | 515594,612909,723961 9 | 515595,613072,725159 10 | 515611,613102,725193 11 | 515683,613243,725236 12 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/bench_libjade_ref.out: -------------------------------------------------------------------------------- 1 | 408811,471451,605587 2 | 408834,471506,605597 3 | 408848,471551,605617 4 | 408850,471577,605633 5 | 408887,471579,605690 6 | 408899,471707,605761 7 | 408923,471731,605786 8 | 408949,471743,605788 9 | 408974,471851,605838 10 | 409024,471910,605869 11 | 409074,471991,605881 12 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/bench_pqclean_clean.out: -------------------------------------------------------------------------------- 1 | 192309,250459,284633 2 | 192744,251003,284660 3 | 192853,251199,284688 4 | 192857,251278,284858 5 | 192916,251410,284978 6 | 192997,251525,285035 7 | 193011,251550,285043 8 | 193138,251785,285110 9 | 193330,251910,285141 10 | 193420,252445,285587 11 | 194116,253496,285819 12 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/bench_crystals_ref.out: -------------------------------------------------------------------------------- 1 | 184368,235680,272282 2 | 184370,235692,272284 3 | 184370,235696,272284 4 | 184374,235708,272294 5 | 184374,235708,272294 6 | 184374,235714,272296 7 | 184376,235716,272310 8 | 184384,235732,272316 9 | 184386,235742,272320 10 | 184388,235748,272322 11 | 184406,235750,272348 12 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/bench_jasmin_ref.out: -------------------------------------------------------------------------------- 1 | 384922,458618,525634 2 | 384934,458620,525842 3 | 384938,458628,525880 4 | 384940,458630,526448 5 | 384948,458638,526808 6 | 384948,458640,527266 7 | 384956,458652,527710 8 | 384956,458656,527852 9 | 384956,458660,527870 10 | 384960,458664,528024 11 | 384966,458682,528060 12 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/bench_libjade_ref.out: -------------------------------------------------------------------------------- 1 | 289304,336712,425848 2 | 289336,336720,425940 3 | 289344,336722,425954 4 | 289348,336722,425966 5 | 289354,336726,425966 6 | 289372,336728,425978 7 | 289374,336730,425992 8 | 289450,336734,426004 9 | 289468,336736,426016 10 | 289478,336738,426060 11 | 289504,336774,426062 12 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/bench_crystals_ref.out: -------------------------------------------------------------------------------- 1 | 187128,242384,278132 2 | 187148,242392,278140 3 | 187156,242412,278144 4 | 187160,242420,278148 5 | 187168,242420,278152 6 | 187172,242424,278160 7 | 187172,242432,278168 8 | 187188,242436,278168 9 | 187192,242436,278176 10 | 187204,242464,278184 11 | 187208,242500,278192 12 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/bench_pqclean_clean.out: -------------------------------------------------------------------------------- 1 | 181628,229972,263268 2 | 181652,229976,263276 3 | 181652,229984,263284 4 | 181668,229992,263292 5 | 181668,230008,263300 6 | 181680,230008,263312 7 | 181692,230044,263328 8 | 181708,230048,263332 9 | 181716,230072,263344 10 | 181720,230080,263360 11 | 181724,230088,263388 12 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/bench_crystals_ref.out: -------------------------------------------------------------------------------- 1 | 200256,251266,287678 2 | 200282,251368,287686 3 | 200284,251370,287702 4 | 200288,251378,287714 5 | 200300,251382,287720 6 | 200302,251384,287724 7 | 200314,251386,287730 8 | 200314,251396,287732 9 | 200318,251416,287736 10 | 200324,251426,287742 11 | 200338,251436,287746 12 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/bench_jasmin_avx2v.out: -------------------------------------------------------------------------------- 1 | 106448,119160,105270 2 | 106450,119242,105302 3 | 106476,119258,105304 4 | 106522,119278,105310 5 | 106560,119286,105334 6 | 106578,119308,105336 7 | 106588,119336,105344 8 | 106590,119404,105424 9 | 106616,119404,105468 10 | 106618,119412,105470 11 | 106658,119422,105484 12 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/bench_pqclean_clean.out: -------------------------------------------------------------------------------- 1 | 194526,243148,277360 2 | 194560,243160,277380 3 | 194586,243164,277386 4 | 194592,243170,277390 5 | 194596,243170,277392 6 | 194602,243174,277402 7 | 194608,243180,277402 8 | 194616,243192,277410 9 | 194624,243198,277422 10 | 194630,243200,277424 11 | 194660,243212,277460 12 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/bench_pqclean_clean.out: -------------------------------------------------------------------------------- 1 | 172330,223940,256722 2 | 172338,223952,256728 3 | 172358,223954,256730 4 | 172376,223956,256748 5 | 172382,223958,256756 6 | 172388,223960,256756 7 | 172390,223962,256758 8 | 172392,223962,256804 9 | 172396,223962,256834 10 | 172402,223972,256848 11 | 172424,223974,256848 12 | -------------------------------------------------------------------------------- /bench/src/randombytes/Makefile: -------------------------------------------------------------------------------- 1 | CC ?= clang-14 2 | CFLAGS ?= -mavx2 -O3 -fomit-frame-pointer -fwrapv -fPIC -fPIE 3 | 4 | default: librandombytes1.a 5 | 6 | librandombytes1.a: jasmin_syscall.o randombytes1.o 7 | ar -rc $@ $^ && ranlib $@ 8 | 9 | %.o: %.c %.h 10 | $(CC) $(CFLAGS) -o $@ -c $< 11 | 12 | clean: 13 | rm -fr *.a *.o 14 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/test/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | OS=$(uname -s) 3 | 4 | if [ $OS == "Darwin" ]; then 5 | for i in `find . -perm +0111 -name "test_*"`; do 6 | echo $i 7 | ./$i 8 | done 9 | else 10 | for i in `find . -executable -name "test_*"`; do 11 | echo $i 12 | ./$i 13 | done 14 | fi 15 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/test/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | OS=$(uname -s) 3 | 4 | if [ $OS == "Darwin" ]; then 5 | for i in `find . -perm +0111 -name "test_*"`; do 6 | echo $i 7 | ./$i 8 | done 9 | else 10 | for i in `find . -executable -name "test_*"`; do 11 | echo $i 12 | ./$i 13 | done 14 | fi 15 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/test/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | OS=$(uname -s) 3 | 4 | if [ $OS == "Darwin" ]; then 5 | for i in `find . -perm +0111 -name "test_*"`; do 6 | echo $i 7 | ./$i 8 | done 9 | else 10 | for i in `find . -executable -name "test_*"`; do 11 | echo $i 12 | ./$i 13 | done 14 | fi 15 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/test/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | OS=$(uname -s) 3 | 4 | if [ $OS == "Darwin" ]; then 5 | for i in `find . -perm +0111 -name "test_*"`; do 6 | echo $i 7 | ./$i 8 | done 9 | else 10 | for i in `find . -executable -name "test_*"`; do 11 | echo $i 12 | ./$i 13 | done 14 | fi 15 | -------------------------------------------------------------------------------- /bench/memory/config.h: -------------------------------------------------------------------------------- 1 | #ifndef CONFIG_H 2 | #define CONFIG_H 3 | 4 | // 5 | 6 | #ifndef MININBYTES 7 | #define MININBYTES 0 8 | #endif 9 | 10 | #ifndef MAXINBYTES 11 | #define MAXINBYTES 4196 12 | #endif 13 | 14 | #ifndef MINOUTBYTES 15 | #define MINOUTBYTES 0 16 | #endif 17 | 18 | #ifndef MAXOUTBYTES 19 | #define MAXOUTBYTES 128 20 | #endif 21 | 22 | // 23 | 24 | #endif -------------------------------------------------------------------------------- /bench/src/jasmin/1024/ref/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: libkyber1024_ref.a clean distclean 2 | 3 | JASMINC ?= ../../../../../jasmin/compiler/jasminc 4 | 5 | all: libkyber1024_ref.a 6 | 7 | libkyber1024_ref.a: jkem.s 8 | $(CC) $(CFLAGS) -c jkem.s 9 | $(AR) -r $@ jkem.o 10 | 11 | jkem.s: jkem.jazz 12 | $(JASMINC) -nowarning -lea $< -o $@ 13 | 14 | clean: 15 | rm -f *.o *.a 16 | 17 | distclean: clean 18 | rm -f *.s 19 | -------------------------------------------------------------------------------- /bench/src/jasmin/1024/avx2/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: libkyber1024_avx2.a clean distclean 2 | 3 | JASMINC ?= ../../../../../jasmin/compiler/jasminc 4 | 5 | all: libkyber1024_avx2.a 6 | 7 | libkyber1024_avx2.a: jkem.s 8 | $(CC) $(CFLAGS) -c jkem.s 9 | $(AR) -r $@ jkem.o 10 | 11 | jkem.s: jkem.jazz 12 | $(JASMINC) -nowarning -lea $< -o $@ 13 | 14 | clean: 15 | rm -f *.o *.a 16 | 17 | distclean: clean 18 | rm -f *.s 19 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/gen_matrix_globals.jinc: -------------------------------------------------------------------------------- 1 | require "../../common/avx2/gen_matrix_globals.jinc" 2 | 3 | u8[32] gen_matrix_indexes = 4 | { 5 | 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x01, // (0,0) (0,1) (0,2) (1,0) 6 | 0x01, 0x01, 0x02, 0x01, 0x00, 0x02, 0x01, 0x02, // (1,1) (1,2) (2,0) (2,1) 7 | 8 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x00, // (0,0) (0,1) (0,2) (1,0) 9 | 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x01 // (1,1) (1,2) (2,0) (2,1) 10 | }; 11 | -------------------------------------------------------------------------------- /bench/src/jasmin/768/ref/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: libkyber768_ref.a clean distclean 2 | 3 | JASMINC ?= ../../../../../jasmin/compiler/jasminc 4 | CC ?= clang-14 5 | CFLAGS ?= -O3 -fomit-frame-pointer -fwrapv -fPIC -fPIE -mavx2 -march=native 6 | 7 | 8 | all: libkyber768_ref.a 9 | 10 | libkyber768_ref.a: jkem.s 11 | $(CC) $(CFLAGS) -c jkem.s 12 | $(AR) -r $@ jkem.o 13 | 14 | jkem.s: jkem.jazz 15 | $(JASMINC) -nowarning -lea $< -o $@ 16 | 17 | clean: 18 | rm -f *.o *.a 19 | 20 | distclean: clean 21 | rm -f *.s 22 | -------------------------------------------------------------------------------- /bench/src/jasmin/768/avx2/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: libkyber768_avx2.a clean distclean 2 | 3 | JASMINC ?= ../../../../../jasmin/compiler/jasminc 4 | 5 | all: libkyber768_avx2.a 6 | 7 | CC ?= clang-14 8 | CFLAGS ?= -O3 -fomit-frame-pointer -fwrapv -fPIC -fPIE -mavx2 -march=native 9 | 10 | libkyber768_avx2.a: jkem.s 11 | $(CC) $(CFLAGS) -c jkem.s 12 | $(AR) -r $@ jkem.o 13 | 14 | jkem.s: jkem.jazz 15 | $(JASMINC) -nowarning -lea $< -o $@ 16 | 17 | clean: 18 | rm -f *.o *.a 19 | 20 | distclean: clean 21 | rm -f *.s 22 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_ref/api.h: -------------------------------------------------------------------------------- 1 | #define CRYPTO_SECRETKEYBYTES 2400 2 | #define CRYPTO_PUBLICKEYBYTES 1184 3 | #define CRYPTO_CIPHERTEXTBYTES 1088 4 | #define CRYPTO_BYTES 32 5 | 6 | #define crypto_kem_kyber768_jasmin_ref_constbranchindex_keypair jade_kem_kyber_kyber768_amd64_ref_keypair 7 | #define crypto_kem_kyber768_jasmin_ref_constbranchindex_enc jade_kem_kyber_kyber768_amd64_ref_enc 8 | #define crypto_kem_kyber768_jasmin_ref_constbranchindex_dec jade_kem_kyber_kyber768_amd64_ref_dec 9 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_ref/api.h: -------------------------------------------------------------------------------- 1 | #define CRYPTO_SECRETKEYBYTES 2400 2 | #define CRYPTO_PUBLICKEYBYTES 1184 3 | #define CRYPTO_CIPHERTEXTBYTES 1088 4 | #define CRYPTO_BYTES 32 5 | 6 | #define crypto_kem_kyber768_libjade_ref_constbranchindex_keypair jade_kem_kyber_kyber768_amd64_ref_keypair 7 | #define crypto_kem_kyber768_libjade_ref_constbranchindex_enc jade_kem_kyber_kyber768_amd64_ref_enc 8 | #define crypto_kem_kyber768_libjade_ref_constbranchindex_dec jade_kem_kyber_kyber768_amd64_ref_dec 9 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_avx2/api.h: -------------------------------------------------------------------------------- 1 | #define CRYPTO_SECRETKEYBYTES 2400 2 | #define CRYPTO_PUBLICKEYBYTES 1184 3 | #define CRYPTO_CIPHERTEXTBYTES 1088 4 | #define CRYPTO_BYTES 32 5 | 6 | #define crypto_kem_kyber768_jasmin_avx2_constbranchindex_keypair jade_kem_kyber_kyber768_amd64_avx2_keypair 7 | #define crypto_kem_kyber768_jasmin_avx2_constbranchindex_enc jade_kem_kyber_kyber768_amd64_avx2_enc 8 | #define crypto_kem_kyber768_jasmin_avx2_constbranchindex_dec jade_kem_kyber_kyber768_amd64_avx2_dec 9 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_rref/api.h: -------------------------------------------------------------------------------- 1 | #define CRYPTO_SECRETKEYBYTES 2400 2 | #define CRYPTO_PUBLICKEYBYTES 1184 3 | #define CRYPTO_CIPHERTEXTBYTES 1088 4 | #define CRYPTO_BYTES 32 5 | 6 | #define crypto_kem_kyber768_libjade_rref_constbranchindex_keypair jade_kem_kyber_kyber768_amd64_ref_keypair 7 | #define crypto_kem_kyber768_libjade_rref_constbranchindex_enc jade_kem_kyber_kyber768_amd64_ref_enc 8 | #define crypto_kem_kyber768_libjade_rref_constbranchindex_dec jade_kem_kyber_kyber768_amd64_ref_dec 9 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/jasmin_avx2v/api.h: -------------------------------------------------------------------------------- 1 | #define CRYPTO_SECRETKEYBYTES 2400 2 | #define CRYPTO_PUBLICKEYBYTES 1184 3 | #define CRYPTO_CIPHERTEXTBYTES 1088 4 | #define CRYPTO_BYTES 32 5 | 6 | #define crypto_kem_kyber768_jasmin_avx2v_constbranchindex_keypair jade_kem_kyber_kyber768_amd64_avx2v_keypair 7 | #define crypto_kem_kyber768_jasmin_avx2v_constbranchindex_enc jade_kem_kyber_kyber768_amd64_avx2v_enc 8 | #define crypto_kem_kyber768_jasmin_avx2v_constbranchindex_dec jade_kem_kyber_kyber768_amd64_avx2v_dec 9 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_avx2/api.h: -------------------------------------------------------------------------------- 1 | #define CRYPTO_SECRETKEYBYTES 2400 2 | #define CRYPTO_PUBLICKEYBYTES 1184 3 | #define CRYPTO_CIPHERTEXTBYTES 1088 4 | #define CRYPTO_BYTES 32 5 | 6 | #define crypto_kem_kyber768_libjade_avx2_constbranchindex_keypair jade_kem_kyber_kyber768_amd64_avx2_keypair 7 | #define crypto_kem_kyber768_libjade_avx2_constbranchindex_enc jade_kem_kyber_kyber768_amd64_avx2_enc 8 | #define crypto_kem_kyber768_libjade_avx2_constbranchindex_dec jade_kem_kyber_kyber768_amd64_avx2_dec 9 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_ravx2/api.h: -------------------------------------------------------------------------------- 1 | #define CRYPTO_SECRETKEYBYTES 2400 2 | #define CRYPTO_PUBLICKEYBYTES 1184 3 | #define CRYPTO_CIPHERTEXTBYTES 1088 4 | #define CRYPTO_BYTES 32 5 | 6 | #define crypto_kem_kyber768_libjade_ravx2_constbranchindex_keypair jade_kem_kyber_kyber768_amd64_avx2_keypair 7 | #define crypto_kem_kyber768_libjade_ravx2_constbranchindex_enc jade_kem_kyber_kyber768_amd64_avx2_enc 8 | #define crypto_kem_kyber768_libjade_ravx2_constbranchindex_dec jade_kem_kyber_kyber768_amd64_avx2_dec 9 | -------------------------------------------------------------------------------- /bench/test/print.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_COMMON_PRINT_H 2 | #define TEST_COMMON_PRINT_H 3 | 4 | #include 5 | 6 | void print_info(const char *algname, const char *arch, const char *impl); 7 | void print_u8(const uint8_t *a, size_t l); 8 | void print_u8s(const uint8_t *a, size_t l); 9 | void print_str_u8(const char *str, const uint8_t *a, size_t l); 10 | void print_str_c_u8(const char *str, uint64_t c, const uint8_t *a, size_t l); 11 | void print_str_c_c_u8(const char *str, uint64_t c1, uint64_t c2, const uint8_t *a, size_t l); 12 | 13 | #endif 14 | 15 | -------------------------------------------------------------------------------- /bench/common/alignedcalloc.c: -------------------------------------------------------------------------------- 1 | #ifndef ALIGNEDCALLOC_C 2 | #define ALIGNEDCALLOC_C 3 | 4 | #include 5 | #include 6 | //include 7 | 8 | static size_t alignedcalloc_step(size_t len) 9 | { 10 | size_t step; 11 | step = len + (63 & (-len)); 12 | return step; 13 | } 14 | 15 | static uint8_t *alignedcalloc(uint8_t** _x, size_t len) 16 | { 17 | uint8_t* x = (uint8_t*) calloc(1, len + 128); 18 | if (!x) exit(-1); //error(-1, -1, "out of memory"); 19 | if(_x){ *_x = x; } 20 | x += 63 & (-(unsigned long) x); 21 | return x; 22 | } 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /code/Makefile.conf: -------------------------------------------------------------------------------- 1 | # -*- Makefile -*- 2 | 3 | # -------------------------------------------------------------------- 4 | current_dir := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) 5 | 6 | # -------------------------------------------------------------------- 7 | JASMIN ?= $(current_dir)/../jasmin/compiler/ 8 | JASMINC ?= $(JASMIN)/jasminc -I Keccak=$(current_dir)/../formosa-keccak/src/amd64 9 | JASMINCT?= $(JASMIN)/jasmin-ct -I Keccak=$(current_dir)/../formosa-keccak/src/amd64 10 | JASMIN2EC ?= JASMINPATH="Keccak=$(current_dir)/../formosa-keccak/src/amd64" $(JASMIN)/jasmin2ec 11 | 12 | 13 | -------------------------------------------------------------------------------- /proof/eclib/JSafety.ec: -------------------------------------------------------------------------------- 1 | 2 | require import AllCore IntDiv CoreMap List Distr StdBigop. 3 | import Bigbool. 4 | 5 | 6 | lemma BBAnd_big_foldr ['a] (F : 'a -> bool) (r : 'a list) : 7 | foldr (fun x0 acc => x0 /\ acc) true (map F r) = 8 | BBAnd.big predT F r. 9 | proof. 10 | by rewrite /BBAnd.big filter_predT. 11 | qed. 12 | 13 | lemma and_iota (F : int -> bool) i l : 14 | foldr (fun x0 acc => x0 /\ acc) true (map F (iota_ i l)) <=> 15 | forall k, i <= k < i + l => F k. 16 | proof. 17 | rewrite BBAnd_big_foldr BBAnd.bigP filter_predT List.allP. 18 | smt( mem_iota). 19 | qed. -------------------------------------------------------------------------------- /bench/memory/namespace.h: -------------------------------------------------------------------------------- 1 | 2 | // https://stackoverflow.com/a/1489985/1711232 3 | #define PASTER(x, y) x##_##y 4 | #define EVALUATOR(x, y) PASTER(x, y) 5 | #define NAMESPACE(fun) EVALUATOR(JADE_NAMESPACE, fun) 6 | #define NAMESPACE_LC(fun) EVALUATOR(JADE_NAMESPACE_LC, fun) 7 | 8 | // https://stackoverflow.com/a/55243651/248065 9 | #define MY_TRUTHY_VALUE_X 1 10 | #define CAT(x,y) CAT_(x,y) 11 | #define CAT_(x,y) x##y 12 | #define HAS_NAMESPACE(x) CAT(CAT(MY_TRUTHY_VALUE_,CAT(JADE_NAMESPACE,CAT(_,x))),X) 13 | 14 | #if !HAS_NAMESPACE(API_H) 15 | #error "namespace not properly defined for header guard" 16 | #endif 17 | -------------------------------------------------------------------------------- /bench/test/namespace.h: -------------------------------------------------------------------------------- 1 | 2 | // https://stackoverflow.com/a/1489985/1711232 3 | #define PASTER(x, y) x##_##y 4 | #define EVALUATOR(x, y) PASTER(x, y) 5 | #define NAMESPACE(fun) EVALUATOR(JADE_NAMESPACE, fun) 6 | #define NAMESPACE_LC(fun) EVALUATOR(JADE_NAMESPACE_LC, fun) 7 | 8 | // https://stackoverflow.com/a/55243651/248065 9 | #define MY_TRUTHY_VALUE_X 1 10 | #define CAT(x,y) CAT_(x,y) 11 | #define CAT_(x,y) x##y 12 | #define HAS_NAMESPACE(x) CAT(CAT(MY_TRUTHY_VALUE_,CAT(JADE_NAMESPACE,CAT(_,x))),X) 13 | 14 | #if !HAS_NAMESPACE(API_H) 15 | #error "namespace not properly defined for header guard" 16 | #endif 17 | -------------------------------------------------------------------------------- /bench/test/try-anything.h: -------------------------------------------------------------------------------- 1 | #ifndef TRY_ANYTHING 2 | #define TRY_ANYTHING 3 | 4 | uint8_t* alignedcalloc(void**, uint64_t); 5 | unsigned long long myrandom(void); 6 | void double_canary(uint8_t*, uint8_t*, uint64_t); 7 | void input_prepare(uint8_t*, uint8_t*, uint64_t); 8 | void output_prepare(uint8_t*, uint8_t*, uint64_t); 9 | void output_compare(const uint8_t*, const uint8_t*, uint64_t, const char*); 10 | void input_compare(const uint8_t*, const uint8_t*, uint64_t, const char *); 11 | void fail(const char *); 12 | void checksum(uint8_t*, uint8_t*, uint64_t); 13 | int try_anything_main(void); 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "jasmin"] 2 | path = jasmin 3 | url = https://github.com/jasmin-lang/jasmin.git 4 | branch = main 5 | [submodule "crypto-specs"] 6 | path = crypto-specs 7 | url = git@github.com:formosa-crypto/crypto-specs.git 8 | branch = bdep 9 | [submodule "formosa-keccak"] 10 | path = formosa-keccak 11 | url = git@github.com:formosa-crypto/formosa-keccak.git 12 | branch = bdep 13 | [submodule "code/kyber"] 14 | path = code/kyber 15 | url = https://github.com/pq-crystals/kyber.git 16 | [submodule "bench/src/mlkem-native"] 17 | path = bench/src/mlkem-native 18 | url = https://github.com/pq-code-package/mlkem-native.git 19 | -------------------------------------------------------------------------------- /bench/memory/jade_kem.h: -------------------------------------------------------------------------------- 1 | #ifndef JADE_KEM_API_H 2 | #define JADE_KEM_API_H 3 | 4 | #include "namespace.h" 5 | 6 | #define JADE_KEM_SECRETKEYBYTES NAMESPACE(SECRETKEYBYTES) 7 | #define JADE_KEM_PUBLICKEYBYTES NAMESPACE(PUBLICKEYBYTES) 8 | #define JADE_KEM_CIPHERTEXTBYTES NAMESPACE(CIPHERTEXTBYTES) 9 | #define JADE_KEM_BYTES NAMESPACE(BYTES) 10 | 11 | #define jade_kem_keypair NAMESPACE_LC(keypair) 12 | #define jade_kem_enc NAMESPACE_LC(enc) 13 | #define jade_kem_dec NAMESPACE_LC(dec) 14 | 15 | #define JADE_KEM_ALGNAME NAMESPACE(ALGNAME) 16 | #define JADE_KEM_ARCH NAMESPACE(ARCH) 17 | #define JADE_KEM_IMPL NAMESPACE(IMPL) 18 | 19 | #endif 20 | 21 | -------------------------------------------------------------------------------- /bench/test/jade_kem.h: -------------------------------------------------------------------------------- 1 | #ifndef JADE_KEM_API_H 2 | #define JADE_KEM_API_H 3 | 4 | #include "namespace.h" 5 | 6 | #define JADE_KEM_SECRETKEYBYTES NAMESPACE(SECRETKEYBYTES) 7 | #define JADE_KEM_PUBLICKEYBYTES NAMESPACE(PUBLICKEYBYTES) 8 | #define JADE_KEM_CIPHERTEXTBYTES NAMESPACE(CIPHERTEXTBYTES) 9 | #define JADE_KEM_BYTES NAMESPACE(BYTES) 10 | 11 | #define jade_kem_keypair NAMESPACE_LC(keypair) 12 | #define jade_kem_enc NAMESPACE_LC(enc) 13 | #define jade_kem_dec NAMESPACE_LC(dec) 14 | 15 | #define JADE_KEM_ALGNAME NAMESPACE(ALGNAME) 16 | #define JADE_KEM_ARCH NAMESPACE(ARCH) 17 | #define JADE_KEM_IMPL NAMESPACE(IMPL) 18 | 19 | #endif 20 | 21 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/extraction/Makefile: -------------------------------------------------------------------------------- 1 | # -*- Makefile -*- 2 | 3 | # -------------------------------------------------------------------- 4 | -include ../../../../Makefile.conf 5 | 6 | # -------------------------------------------------------------------- 7 | .PHONY: all ec clean 8 | 9 | # -------------------------------------------------------------------- 10 | all: ec 11 | 12 | 13 | ec: 14 | $(JASMIN2EC) ../jkem.jazz --array-model=old -o jkem768.ec \ 15 | -f jade_kem_mlkem_mlkem768_amd64_ref_keypair_derand \ 16 | -f jade_kem_mlkem_mlkem768_amd64_ref_enc_derand \ 17 | -f jade_kem_mlkem_mlkem768_amd64_ref_dec 18 | 19 | clean: 20 | rm -f *.ec 21 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/extraction/Makefile: -------------------------------------------------------------------------------- 1 | # -*- Makefile -*- 2 | 3 | # -------------------------------------------------------------------- 4 | -include ../../../../Makefile.conf 5 | 6 | # -------------------------------------------------------------------- 7 | .PHONY: all ec clean 8 | 9 | # -------------------------------------------------------------------- 10 | all: ec 11 | 12 | 13 | ec: 14 | $(JASMIN2EC) ../jkem.jazz --array-model=old -o jkem1024.ec \ 15 | -f jade_kem_mlkem_mlkem1024_amd64_ref_keypair_derand \ 16 | -f jade_kem_mlkem_mlkem1024_amd64_ref_enc_derand \ 17 | -f jade_kem_mlkem_mlkem1024_amd64_ref_dec 18 | 19 | clean: 20 | rm -f *.ec 21 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/extraction/Makefile: -------------------------------------------------------------------------------- 1 | # -*- Makefile -*- 2 | 3 | # -------------------------------------------------------------------- 4 | -include ../../../../Makefile.conf 5 | 6 | # -------------------------------------------------------------------- 7 | .PHONY: all ec clean 8 | 9 | # -------------------------------------------------------------------- 10 | all: ec 11 | 12 | 13 | ec: 14 | $(JASMIN2EC) ../jkem.jazz --array-model=old -o jkem768_avx2.ec \ 15 | -f jade_kem_mlkem_mlkem768_amd64_avx2_keypair_derand \ 16 | -f jade_kem_mlkem_mlkem768_amd64_avx2_enc_derand \ 17 | -f jade_kem_mlkem_mlkem768_amd64_avx2_dec 18 | 19 | clean: 20 | rm -f *.ec 21 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/extraction/Makefile: -------------------------------------------------------------------------------- 1 | # -*- Makefile -*- 2 | 3 | # -------------------------------------------------------------------- 4 | -include ../../../../Makefile.conf 5 | 6 | # -------------------------------------------------------------------- 7 | .PHONY: all ec clean 8 | 9 | # -------------------------------------------------------------------- 10 | all: ec 11 | 12 | 13 | ec: 14 | $(JASMIN2EC) ../jkem.jazz --array-model=old -o jkem1024_avx2.ec \ 15 | -f jade_kem_mlkem_mlkem1024_amd64_avx2_keypair_derand \ 16 | -f jade_kem_mlkem_mlkem1024_amd64_avx2_enc_derand \ 17 | -f jade_kem_mlkem_mlkem1024_amd64_avx2_dec 18 | 19 | clean: 20 | rm -f *.ec 21 | -------------------------------------------------------------------------------- /bench/common/namespace.h: -------------------------------------------------------------------------------- 1 | 2 | // https://stackoverflow.com/a/1489985/1711232 3 | #define PASTER(x, y) x##_##y 4 | #define EVALUATOR(x, y) PASTER(x, y) 5 | #define NAMESPACE(fun) EVALUATOR(JADE_NAMESPACE, fun) 6 | #define NAMESPACE_LC(fun) EVALUATOR(JADE_NAMESPACE_LC, fun) 7 | 8 | // https://stackoverflow.com/a/55243651/248065 9 | #define MY_TRUTHY_VALUE_X 1 10 | #define CAT(x,y) CAT_(x,y) 11 | #define CAT_(x,y) x##y 12 | #define HAS_NAMESPACE(x) CAT(CAT(MY_TRUTHY_VALUE_,CAT(JADE_NAMESPACE,CAT(_,x))),X) 13 | 14 | #if !HAS_NAMESPACE(API_H) 15 | #error "namespace not properly defined for header guard" 16 | #endif 17 | 18 | #define xstr(s,e) str(s)#e 19 | #define str(s) #s 20 | 21 | -------------------------------------------------------------------------------- /config/bitwuzla.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | fetchurl, 4 | buildDunePackage, 5 | gmp, 6 | zarith, 7 | }: 8 | 9 | let 10 | bitwuzla-c = buildDunePackage rec { 11 | pname = "bitwuzla-c"; 12 | version = "1.0.5"; 13 | 14 | src = fetchurl { 15 | url = "https://github.com/bitwuzla/ocaml-bitwuzla/releases/download/${version}/bitwuzla-${version}.tbz"; 16 | hash = "sha256-vzKQieT7945dTK/zSSJ6C5inXS8XSTHJQproxZScamw="; 17 | }; 18 | 19 | buildInputs = [ gmp ]; 20 | 21 | }; 22 | in 23 | 24 | buildDunePackage rec { 25 | pname = "bitwuzla"; 26 | inherit (bitwuzla-c) version src; 27 | 28 | propagatedBuildInputs = [ 29 | bitwuzla-c 30 | zarith 31 | ]; 32 | } 33 | -------------------------------------------------------------------------------- /bench/common/config.h: -------------------------------------------------------------------------------- 1 | #ifndef CONFIG_H 2 | #define CONFIG_H 3 | 4 | // 5 | 6 | #ifndef RUNS 7 | #define RUNS 11 8 | #endif 9 | 10 | #ifndef LOOPS 11 | #define LOOPS 3 12 | #endif 13 | 14 | #ifndef TIMINGS 15 | #define TIMINGS 10000 16 | #endif 17 | 18 | // 19 | 20 | #ifndef MININBYTES 21 | #define MININBYTES 0 22 | #endif 23 | 24 | #ifndef MAXINBYTES 25 | #define MAXINBYTES 16384 26 | #endif 27 | 28 | #ifndef MINOUTBYTES 29 | #define MINOUTBYTES 32 30 | #endif 31 | 32 | #ifndef MAXOUTBYTES 33 | #define MAXOUTBYTES 128 34 | #endif 35 | 36 | // 37 | 38 | #ifndef INC_INBYTES 39 | #define INC_INBYTES 2 40 | #endif 41 | 42 | #ifndef INC_OUTBYTES 43 | #define INC_OUTBYTES 2 44 | #endif 45 | 46 | 47 | #endif 48 | 49 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | ===== jasmin wish list ===== 2 | 3 | - actual function calls (call/retq), ABI to be discussed 4 | 5 | - fix ">>s" (should be SAR, is SHL) 6 | 7 | - Support global const arrays 8 | 9 | - support const (?) 10 | 11 | - Don't allow duplicate variable declarations (?) 12 | 13 | - support addressing in nested for loops, e.g., 14 | 15 | inline int i j; 16 | for i = 0 to 32 17 | { 18 | for j = 0 to 8 19 | { 20 | a[8*i + j] = x; /* this currently doesn't work */ 21 | } 22 | } 23 | 24 | - Support arrays of stack arrays, e.g., "stack u16[3][256] p" 25 | 26 | then pass p[1] as argument to a function expecting a stack u16[256] 27 | 28 | - Integer templates for functions to support different stack-array sizes as input and output 29 | -------------------------------------------------------------------------------- /.github/workflows/ct.yml: -------------------------------------------------------------------------------- 1 | name: Check Constant-Time Security 2 | permissions: 3 | contents: read 4 | on: 5 | workflow_call: 6 | workflow_dispatch: 7 | 8 | env: 9 | NIXPKGS_ALLOW_UNFREE: 1 10 | 11 | jobs: 12 | checkCT: 13 | name: CT 14 | runs-on: ubuntu-latest 15 | strategy: 16 | fail-fast: false 17 | matrix: 18 | size: [ '768', '1024' ] 19 | dir: [ 'ref', 'avx2' ] 20 | steps: 21 | - uses: actions/checkout@v4 22 | - uses: cachix/install-nix-action@v31 23 | with: 24 | nix_path: nixpkgs=channel:nixos-unstable 25 | - run: nix-shell --arg full false --run "echo Dependencies OK…" 26 | - run: nix-shell --arg full false --run "make -C code/jasmin/${{matrix.size}}/${{matrix.dir}}/ ct" 27 | -------------------------------------------------------------------------------- /bench/common/median.c: -------------------------------------------------------------------------------- 1 | #ifndef MEDIAN_C 2 | #define MEDIAN_C 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | static void median_fr(uint64_t results[OP][LOOPS]) 9 | { 10 | int op, loop; 11 | uint64_t min; 12 | 13 | // get min median of LOOP runs 14 | for (op = 0; op < OP; op++) 15 | { min = results[op][0]; 16 | for (loop = 1; loop < LOOPS; loop++) 17 | { if (min > results[op][loop]) 18 | { min = results[op][loop]; } } 19 | results[op][0] = min; 20 | } 21 | } 22 | 23 | static uint64_t median_runs(uint64_t runs[RUNS]) 24 | { 25 | uint64_t min = runs[0]; 26 | for (int loop = 1; loop < RUNS; loop++) 27 | if (min > runs[loop]) 28 | min = runs[loop]; 29 | return min; 30 | } 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /easycrypt.project: -------------------------------------------------------------------------------- 1 | [general] 2 | timeout = 30 3 | 4 | provers = CVC5@1.2 5 | provers = Z3@4.8 6 | 7 | spec = proof/eclib/specs/avx2.spec 8 | 9 | rdirs = proof 10 | 11 | rdirs = Jasmin:jasmin/eclib 12 | 13 | idirs = Keccak:formosa-keccak/proof/amd64/common 14 | idirs = Keccak:formosa-keccak/proof/amd64/ref 15 | idirs = Keccak:formosa-keccak/proof/amd64/avx2 16 | idirs = JazzEC:formosa-keccak/proof/amd64/extracted 17 | 18 | 19 | idirs = CryptoSpecs:crypto-specs/arrays 20 | idirs = CryptoSpecs:crypto-specs/common 21 | rdirs = CryptoSpecs:crypto-specs/fips202 22 | rdirs = CryptoSpecs:crypto-specs/ml-kem 23 | 24 | idirs = JazzEC:crypto-specs/arrays 25 | idirs = JazzEC:crypto-specs/common 26 | idirs = JazzEC:code/jasmin/768/ref/extraction 27 | idirs = JazzEC:code/jasmin/768/avx2/extraction 28 | -------------------------------------------------------------------------------- /proof/correctness/768/Makefile: -------------------------------------------------------------------------------- 1 | ECSRC := jindcpa.ec 2 | 3 | EXT_DIR := extraction 4 | 5 | TOP_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))/../..)) 6 | 7 | .PHONY: default generate clean test_d 8 | 9 | default: generate 10 | 11 | generate: $(ECSRC) 12 | @true 13 | 14 | clean: 15 | rm -rf $(EXT_DIR) 16 | 17 | jindcca.ec: $(TOP_DIR)code/jasmin/ref/jkem.jazz 18 | @mkdir $(EXT_DIR) 19 | cd $(EXT_DIR) && jasminc -ec crypto_kem_keypair_jazz -ec crypto_kem_enc_jazz -ec crypto_kem_dec_jazz -oec $$(basename $@) $< 20 | 21 | jindcpa.ec: $(TOP_DIR)code/jasmin/ref/jindcpa.jazz 22 | @mkdir $(EXT_DIR) 23 | cd $(EXT_DIR) && jasminc -ec indcpa_keypair_jazz -ec indcpa_enc_jazz -ec indcpa_dec_jazz -oec $$(basename $@) $< 24 | 25 | %.jazz: 26 | cd $$(dirname $@) && $(MAKE) $$(basename $@) 27 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/gen_matrix_globals.jinc: -------------------------------------------------------------------------------- 1 | require "../../common/avx2/gen_matrix_globals.jinc" 2 | 3 | u8[64] gen_matrix_indexes = 4 | { 5 | 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, // (0,0) (0,1) (0,2) (0,3) 6 | 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x03, 0x01, // (1,0) (1,1) (1,2) (1,3) 7 | 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, // (2,0) (2,1) (2,2) (2,3) 8 | 0x00, 0x03, 0x01, 0x03, 0x02, 0x03, 0x03, 0x03, // (3,0) (3,1) (3,2) (3,3) 9 | 10 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, // (0,0) (0,1) (0,2) (0,3) 11 | 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x03, // (1,0) (1,1) (1,2) (1,3) 12 | 0x02, 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, // (2,0) (2,1) (2,2) (2,3) 13 | 0x03, 0x00, 0x03, 0x01, 0x03, 0x02, 0x03, 0x03 // (3,0) (3,1) (3,2) (3,3) 14 | }; 15 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/macros.tex: -------------------------------------------------------------------------------- 1 | \newcommand{\crefgenalcc}{200101} 2 | \newcommand{\crefencalcc}{258231} 3 | \newcommand{\crefdecalcc}{293897} 4 | \newcommand{\cavxgenalcc}{50458} 5 | \newcommand{\cavxencalcc}{64890} 6 | \newcommand{\cavxdecalcc}{52494} 7 | \newcommand{\jrefgenalcc}{515436} 8 | \newcommand{\jrefencalcc}{612810} 9 | \newcommand{\jrefdecalcc}{723220} 10 | \newcommand{\joptgenalcc}{53158} 11 | \newcommand{\joptencalcc}{68478} 12 | \newcommand{\joptdecalcc}{56211} 13 | \newcommand{\javxgenalcc}{109687} 14 | \newcommand{\javxencalcc}{126811} 15 | \newcommand{\javxdecalcc}{114333} 16 | \newcommand{\lrefgenalcc}{408899} 17 | \newcommand{\lrefencalcc}{471707} 18 | \newcommand{\lrefdecalcc}{605761} 19 | \newcommand{\lavxgenalcc}{59213} 20 | \newcommand{\lavxencalcc}{78868} 21 | \newcommand{\lavxdecalcc}{62290} 22 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/macros.tex: -------------------------------------------------------------------------------- 1 | \newcommand{\crefgenclcc}{184374} 2 | \newcommand{\crefencclcc}{235714} 3 | \newcommand{\crefdecclcc}{272296} 4 | \newcommand{\cavxgenclcc}{41682} 5 | \newcommand{\cavxencclcc}{55956} 6 | \newcommand{\cavxdecclcc}{43906} 7 | \newcommand{\jrefgenclcc}{384948} 8 | \newcommand{\jrefencclcc}{458640} 9 | \newcommand{\jrefdecclcc}{527266} 10 | \newcommand{\joptgenclcc}{45046} 11 | \newcommand{\joptencclcc}{59496} 12 | \newcommand{\joptdecclcc}{48172} 13 | \newcommand{\javxgenclcc}{93244} 14 | \newcommand{\javxencclcc}{107474} 15 | \newcommand{\javxdecclcc}{96564} 16 | \newcommand{\lrefgenclcc}{289372} 17 | \newcommand{\lrefencclcc}{336728} 18 | \newcommand{\lrefdecclcc}{425978} 19 | \newcommand{\lavxgenclcc}{42278} 20 | \newcommand{\lavxencclcc}{54044} 21 | \newcommand{\lavxdecclcc}{45088} 22 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/macros.tex: -------------------------------------------------------------------------------- 1 | \newcommand{\crefgenhwcc}{187172} 2 | \newcommand{\crefenchwcc}{242424} 3 | \newcommand{\crefdechwcc}{278160} 4 | \newcommand{\cavxgenhwcc}{47280} 5 | \newcommand{\cavxenchwcc}{62900} 6 | \newcommand{\cavxdechwcc}{47784} 7 | \newcommand{\jrefgenhwcc}{394636} 8 | \newcommand{\jrefenchwcc}{471680} 9 | \newcommand{\jrefdechwcc}{534420} 10 | \newcommand{\joptgenhwcc}{48800} 11 | \newcommand{\joptenchwcc}{63988} 12 | \newcommand{\joptdechwcc}{51444} 13 | \newcommand{\javxgenhwcc}{96296} 14 | \newcommand{\javxenchwcc}{111536} 15 | \newcommand{\javxdechwcc}{98328} 16 | \newcommand{\lrefgenhwcc}{293072} 17 | \newcommand{\lrefenchwcc}{341840} 18 | \newcommand{\lrefdechwcc}{428048} 19 | \newcommand{\lavxgenhwcc}{48284} 20 | \newcommand{\lavxenchwcc}{60528} 21 | \newcommand{\lavxdechwcc}{49440} 22 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/macros.tex: -------------------------------------------------------------------------------- 1 | \newcommand{\crefgenskcc}{200302} 2 | \newcommand{\crefencskcc}{251384} 3 | \newcommand{\crefdecskcc}{287724} 4 | \newcommand{\cavxgenskcc}{49572} 5 | \newcommand{\cavxencskcc}{60018} 6 | \newcommand{\cavxdecskcc}{45854} 7 | \newcommand{\jrefgenskcc}{411676} 8 | \newcommand{\jrefencskcc}{488904} 9 | \newcommand{\jrefdecskcc}{562426} 10 | \newcommand{\joptgenskcc}{50004} 11 | \newcommand{\joptencskcc}{65132} 12 | \newcommand{\joptdecskcc}{50340} 13 | \newcommand{\javxgenskcc}{106578} 14 | \newcommand{\javxencskcc}{119308} 15 | \newcommand{\javxdecskcc}{105336} 16 | \newcommand{\lrefgenskcc}{315608} 17 | \newcommand{\lrefencskcc}{361146} 18 | \newcommand{\lrefdecskcc}{450454} 19 | \newcommand{\lavxgenskcc}{49916} 20 | \newcommand{\lavxencskcc}{59072} 21 | \newcommand{\lavxdecskcc}{46934} 22 | -------------------------------------------------------------------------------- /bench/report/Makefile: -------------------------------------------------------------------------------- 1 | HAKYBER = $(abspath $(dir $(filter %Makefile, $(MAKEFILE_LIST)))../../) 2 | BENCH = $(HAKYBER)/bench 3 | RESULTS = $(BENCH)/results 4 | 5 | MACROS = \ 6 | $(RESULTS)/haswell-i74770k/supercop/macros.tex \ 7 | $(RESULTS)/haswell-i74770k/macros.tex \ 8 | $(RESULTS)/alderlake-i71260p/supercop/macros.tex \ 9 | $(RESULTS)/alderlake-i71260p/macros.tex \ 10 | $(RESULTS)/skylake-i76500u/supercop/macros.tex \ 11 | $(RESULTS)/skylake-i76500u/macros.tex \ 12 | $(RESULTS)/cannonlake-i710700k/supercop/macros.tex \ 13 | $(RESULTS)/cannonlake-i710700k/macros.tex 14 | 15 | report.pdf: report.tex macros.tex 16 | pdflatex $< 17 | pdflatex $< 18 | 19 | macros.tex: $(MACROS) 20 | cat $(MACROS) > $@ 21 | 22 | .PHONY: clean distclean 23 | clean: 24 | rm -f *.aux *.log 25 | 26 | distclean: clean 27 | rm -f report.pdf macros.tex 28 | -------------------------------------------------------------------------------- /code/jasmin/common/ref/reduce.jinc: -------------------------------------------------------------------------------- 1 | require "params.jinc" 2 | 3 | param int QINV = 62209; /* q^(-1) mod 2^16 */ 4 | param int MONT = 2285; /* 2^16 % Q */ 5 | param int BARR = 20159; /* (1U << 26)/MLKEM_Q + 1 */ 6 | 7 | inline fn __fqmul(reg u16 a b) -> reg u16 8 | { 9 | reg u32 ad bd c t u; 10 | reg u16 r; 11 | 12 | ad = (32s) a; 13 | bd = (32s) b; 14 | c = ad * bd; 15 | 16 | u = c * (QINV << 16); // merge multiplication of u (<<16) 17 | u >>s= 16; 18 | 19 | t = u * -MLKEM_Q; // replace sub by add 20 | t += c; 21 | t >>s= 16; 22 | r = t; 23 | 24 | return r; 25 | } 26 | 27 | inline 28 | fn __barrett_reduce(reg u16 a) -> reg u16 29 | { 30 | reg u32 t; 31 | reg u16 r; 32 | t = (32s)a; 33 | t = t * BARR; 34 | t >>s= 26; 35 | t *= MLKEM_Q; 36 | r = a; 37 | r -= t; 38 | return r; 39 | } 40 | -------------------------------------------------------------------------------- /.github/workflows/all.yml: -------------------------------------------------------------------------------- 1 | 2 | name: CI 3 | permissions: 4 | contents: read 5 | on: 6 | workflow_dispatch: 7 | push: 8 | branches: ["bdep_comments_prune_ci", "master"] 9 | pull_request: 10 | branches: ["master"] 11 | 12 | env: 13 | NIXPKGS_ALLOW_UNFREE: 1 14 | 15 | 16 | jobs: 17 | ci: 18 | name: MLKEM implementation 19 | permissions: 20 | contents: read 21 | id-token: write 22 | uses: ./.github/workflows/ci.yml 23 | secrets: inherit 24 | ec: 25 | name: EasyCrypt 26 | permissions: 27 | contents: read 28 | id-token: write 29 | uses: ./.github/workflows/ec.yml 30 | secrets: inherit 31 | bench: 32 | name: Benchmarks 33 | permissions: 34 | contents: read 35 | id-token: write 36 | uses: ./.github/workflows/bench.yml 37 | secrets: inherit 38 | 39 | -------------------------------------------------------------------------------- /code/jasmin/common/ref/params.jinc: -------------------------------------------------------------------------------- 1 | param int MLKEM_Q = 3329; 2 | param int MLKEM_N = 256; 3 | param int MLKEM_VECN = MLKEM_K * MLKEM_N; 4 | 5 | param int MLKEM_SYMBYTES = 32; 6 | param int MLKEM_ETA = 2; 7 | param int MLKEM_POLYBYTES = 384; 8 | param int MLKEM_POLYVECBYTES = (MLKEM_K * MLKEM_POLYBYTES); 9 | param int MLKEM_INDCPA_MSGBYTES = MLKEM_SYMBYTES; 10 | param int MLKEM_INDCPA_CIPHERTEXTBYTES = MLKEM_POLYVECCOMPRESSEDBYTES + MLKEM_POLYCOMPRESSEDBYTES; 11 | param int MLKEM_INDCPA_PUBLICKEYBYTES = MLKEM_POLYVECBYTES + MLKEM_SYMBYTES; 12 | param int MLKEM_INDCPA_SECRETKEYBYTES = MLKEM_POLYVECBYTES; 13 | param int MLKEM_PUBLICKEYBYTES = MLKEM_INDCPA_PUBLICKEYBYTES; 14 | param int MLKEM_SECRETKEYBYTES = MLKEM_INDCPA_SECRETKEYBYTES+MLKEM_INDCPA_PUBLICKEYBYTES+MLKEM_SYMBYTES+MLKEM_SYMBYTES; 15 | param int MLKEM_CIPHERTEXTBYTES = MLKEM_INDCPA_CIPHERTEXTBYTES; 16 | param int MLKEM_SSBYTES = 32; 17 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # -*- Makefile -*- 2 | 3 | # -------------------------------------------------------------------- 4 | ECCONF := config/tests.config 5 | CHECKS ?= mlkem 6 | 7 | # -------------------------------------------------------------------- 8 | .PHONY: default check checkec jasmin assembly clean_eco 9 | 10 | default: check 11 | 12 | check: jasmin checkec 13 | 14 | jasmin: 15 | make -C code/jasmin/768/ref/extraction 16 | make -C code/jasmin/768/avx2/extraction 17 | make -C code/jasmin/1024/ref/extraction 18 | make -C code/jasmin/1024/avx2/extraction 19 | 20 | checkec: 21 | easycrypt runtest -jobs 3 $(ECCONF) $(CHECKS) 22 | 23 | assembly: 24 | $(MAKE) -C code/jasmin/768/avx2/ jkem.s 25 | $(MAKE) -C code/jasmin/768/ref/ jkem.s 26 | $(MAKE) -C code/jasmin/1024/avx2/ jkem.s 27 | $(MAKE) -C code/jasmin/1024/ref/ jkem.s 28 | 29 | clean_eco: 30 | find proof -name '*.eco' -exec rm '{}' ';' 31 | -------------------------------------------------------------------------------- /proof/safety/768/avx2/easycrypt.project: -------------------------------------------------------------------------------- 1 | [general] 2 | timeout = 30 3 | 4 | provers = Alt-Ergo@2.4 5 | provers = CVC5@1.2 6 | provers = Z3@4.8 7 | 8 | rdirs = . 9 | rdirs = ../../../eclib 10 | rdirs = ../../ 11 | rdirs = Jasmin:../../../../jasmin/eclib 12 | idirs = Keccak:../../../../formosa-keccak/proof/amd64/ref 13 | idirs = Keccak:../../../../formosa-keccak/proof/amd64/avx2 14 | idirs = JazzEC:../../../../formosa-keccak/proof/amd64/extracted 15 | idirs = JazzEC:../../../../code/jasmin/768/ref/extraction 16 | idirs = JazzEC:../../../../code/jasmin/768/avx2/extraction 17 | idirs = JazzEC:../../../../code/jasmin/1024/ref/extraction 18 | idirs = JazzEC:../../../../code/jasmin/1024/avx2/extraction 19 | idirs = JazzEC:../../../../crypto-specs/arrays 20 | idirs = CryptoSpecs:../../../../crypto-specs/common 21 | rdirs = CryptoSpecs:../../../../crypto-specs/fips202 22 | rdirs = CryptoSpecs:../../../../crypto-specs/ml-kem 23 | -------------------------------------------------------------------------------- /proof/correctness/1024/easycrypt.project: -------------------------------------------------------------------------------- 1 | [general] 2 | timeout = 30 3 | 4 | provers = CVC5@1.2 5 | provers = Z3@4.8 6 | 7 | spec = ../../eclib/specs/avx2.spec 8 | 9 | rdirs = . 10 | rdirs = ../../eclib 11 | 12 | rdirs = Jasmin:../../../jasmin/eclib 13 | 14 | idirs = Keccak:../../../formosa-keccak/proof/amd64/common 15 | idirs = Keccak:../../../formosa-keccak/proof/amd64/ref 16 | idirs = Keccak:../../../formosa-keccak/proof/amd64/avx2 17 | idirs = JazzEC:../../../formosa-keccak/proof/amd64/extracted 18 | 19 | idirs = CryptoSpecs:../../../crypto-specs/common 20 | idirs = CryptoSpecs:../../../crypto-specs/arrays 21 | rdirs = CryptoSpecs:../../../crypto-specs/fips202 22 | rdirs = CryptoSpecs:../../../crypto-specs/ml-kem 23 | 24 | idirs = JazzEC:../../crypto-specs/arrays 25 | idirs = JazzEC:../../crypto-specs/common 26 | idirs = JazzEC:../../../code/jasmin/1024/ref/extraction 27 | idirs = JazzEC:../../../code/jasmin/1024/avx2/extraction 28 | 29 | -------------------------------------------------------------------------------- /bench/common/cpucycles.c: -------------------------------------------------------------------------------- 1 | #ifndef CPUCYCLES_C 2 | #define CPUCYCLES_C 3 | 4 | static inline uint64_t cpucycles(void) { 5 | uint64_t result; 6 | 7 | __asm__ volatile ("rdtsc; shlq $32,%%rdx; orq %%rdx,%%rax" 8 | : "=a" (result) : : "%rdx"); 9 | 10 | return result; 11 | } 12 | 13 | static int cmp_uint64(const void *a, const void *b) 14 | { 15 | if(*(uint64_t *)a < *(uint64_t *)b){ return -1; } 16 | if(*(uint64_t *)a > *(uint64_t *)b){ return 1; } 17 | return 0; 18 | } 19 | 20 | static uint64_t median(uint64_t *l, size_t llen) 21 | { 22 | qsort(l,llen,sizeof(uint64_t),cmp_uint64); 23 | 24 | if(llen%2) return l[llen/2]; 25 | else return (l[llen/2-1]+l[llen/2])/2; 26 | } 27 | 28 | static uint64_t cpucycles_median(uint64_t *cycles, size_t timings) 29 | { 30 | size_t i; 31 | for (i = 0; i < timings-1; i++) 32 | { cycles[i] = cycles[i+1] - cycles[i]; } 33 | 34 | return median(cycles, timings-1); 35 | } 36 | 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /code/jasmin/common/avx2/params.jinc: -------------------------------------------------------------------------------- 1 | param int MLKEM_Q = 3329; 2 | param int MLKEM_N = 256; 3 | param int MLKEM_VECN = MLKEM_K * MLKEM_N; 4 | 5 | param int MLKEM_SYMBYTES = 32; 6 | param int MLKEM_SSBYTES = 32; 7 | 8 | param int MLKEM_ETA1 = 2; 9 | param int MLKEM_ETA2 = 2; 10 | 11 | param int MLKEM_POLYBYTES = 384; /* 256*12/8 */ 12 | param int MLKEM_POLYVECBYTES = (MLKEM_K * MLKEM_POLYBYTES); 13 | 14 | param int MLKEM_INDCPA_MSGBYTES = MLKEM_SYMBYTES; 15 | param int MLKEM_INDCPA_PUBLICKEYBYTES = MLKEM_POLYVECBYTES + MLKEM_SYMBYTES; 16 | param int MLKEM_INDCPA_SECRETKEYBYTES = MLKEM_POLYVECBYTES; 17 | param int MLKEM_INDCPA_CIPHERTEXTBYTES = MLKEM_POLYVECCOMPRESSEDBYTES + MLKEM_POLYCOMPRESSEDBYTES; 18 | 19 | param int MLKEM_PUBLICKEYBYTES = MLKEM_INDCPA_PUBLICKEYBYTES; 20 | param int MLKEM_SECRETKEYBYTES = MLKEM_INDCPA_SECRETKEYBYTES + MLKEM_INDCPA_PUBLICKEYBYTES + 2*MLKEM_SYMBYTES; 21 | param int MLKEM_CIPHERTEXTBYTES = MLKEM_INDCPA_CIPHERTEXTBYTES; 22 | -------------------------------------------------------------------------------- /bench/src/randombytes/jasmin_syscall.c: -------------------------------------------------------------------------------- 1 | #include "jasmin_syscall.h" 2 | 3 | #include 4 | 5 | #if defined(__linux__) 6 | 7 | #include 8 | #include 9 | 10 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* _x, uint64_t xlen) 11 | { 12 | int i; 13 | uint8_t* x = _x; 14 | 15 | while (xlen > 0) { 16 | if (xlen < 1048576) i = xlen; else i = 1048576; 17 | 18 | i = getrandom(x,i,0); 19 | if (i < 1) { 20 | sleep(1); 21 | continue; 22 | } 23 | x += i; 24 | xlen -= i; 25 | } 26 | 27 | return _x; 28 | } 29 | 30 | #elif defined(__APPLE__) 31 | 32 | #include 33 | 34 | #if !(defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) 35 | #error "macOS version not supported (>= 10.12)" 36 | #endif 37 | 38 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* x, uint64_t xlen){ 39 | arc4random_buf(x, xlen); 40 | return x; 41 | } 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /code/jasmin/common/ref/verify.jinc: -------------------------------------------------------------------------------- 1 | require "params.jinc" 2 | 3 | inline 4 | fn __verify(reg const ptr u8[MLKEM_INDCPA_CIPHERTEXTBYTES] ctp, reg const ptr u8[MLKEM_INDCPA_CIPHERTEXTBYTES] ctpc) -> reg u64 5 | { 6 | reg u64 cnd t64; 7 | reg u8 t1 t2; 8 | inline int i; 9 | 10 | cnd = 0; 11 | 12 | for i = 0 to MLKEM_INDCPA_CIPHERTEXTBYTES 13 | { 14 | t1 = ctpc.[i]; 15 | t2 = ctp[i]; 16 | t1 ^= t2; 17 | t64 = (64u)t1; 18 | cnd |= t64; 19 | } 20 | 21 | cnd = -cnd; 22 | cnd >>= 63; 23 | 24 | return cnd; 25 | } 26 | 27 | inline 28 | fn __cmov(reg mut ptr u8[MLKEM_SYMBYTES] dst, reg ptr u8[MLKEM_SYMBYTES] src, reg u64 cnd) -> reg ptr u8[MLKEM_SYMBYTES] 29 | { 30 | reg u8 t1 t2; 31 | inline int i; 32 | 33 | cnd = -cnd; 34 | 35 | for i = 0 to MLKEM_SYMBYTES 36 | { 37 | t2 = dst[i]; 38 | t1 = src.[i]; 39 | t2 = t2 ^ t1; 40 | t2 = t2 & cnd; 41 | t1 ^= t2; 42 | dst[i] = t1; 43 | } 44 | return dst; 45 | } 46 | -------------------------------------------------------------------------------- /bench/supercop-run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # example: 4 | # ./supercop-run.sh 5 | # or 6 | # ./supercop-run resutls/haswell-i74770k/supercop/raw 7 | # ./supercop-run resutls/skylake-i76500u/supercop/raw 8 | # ./supercop-run resutls/cannonlake-i710700k/supercop/raw 9 | # ./supercop-run resutls/alderlake-i71260p/supercop/raw 10 | 11 | supercop=supercop-20221122-clang-14 12 | target=bin 13 | 14 | if [ "$#" -eq 1 ]; then 15 | target=$1; 16 | fi 17 | 18 | cd $supercop 19 | 20 | for dir in ref avx2 jasmin_ref jasmin_avx2 jasmin_avx2v libjade_ref libjade_avx2; 21 | do 22 | dir=crypto_kem/kyber768/$dir 23 | name=${dir//\//_}; 24 | args=${dir//\// }; 25 | ./do-part $args; 26 | find bench/ -name data -exec cp {} ../$target/$name \; 27 | done 28 | 29 | for dir in libjade_rref libjade_ravx2; 30 | do 31 | dir=crypto_kem/kyber768/$dir 32 | name=${dir//\//_}; 33 | args=${dir//\// }; 34 | ./do-part-try-disabled $args; 35 | find bench/ -name data -exec cp {} ../$target/$name \; 36 | done 37 | 38 | 39 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_ravx2/jasmin_syscall.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* x, uint64_t xlen) 4 | asm("__jasmin_syscall_randombytes__"); 5 | 6 | #if defined(__linux__) 7 | 8 | #include 9 | #include 10 | 11 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* _x, uint64_t xlen) 12 | { 13 | int i; 14 | uint8_t* x = _x; 15 | 16 | while (xlen > 0) { 17 | if (xlen < 1048576) i = xlen; else i = 1048576; 18 | 19 | i = getrandom(x,i,0); 20 | if (i < 1) { 21 | sleep(1); 22 | continue; 23 | } 24 | x += i; 25 | xlen -= i; 26 | } 27 | 28 | return _x; 29 | } 30 | 31 | #elif defined(__APPLE__) 32 | 33 | #include 34 | 35 | #if !(defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) 36 | #error "macOS version not supported (>= 10.12)" 37 | #endif 38 | 39 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* x, uint64_t xlen){ 40 | arc4random_buf(x, xlen); 41 | return x; 42 | } 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /bench/supercop-patch/crypto_kem/kyber768/libjade_rref/jasmin_syscall.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* x, uint64_t xlen) 4 | asm("__jasmin_syscall_randombytes__"); 5 | 6 | #if defined(__linux__) 7 | 8 | #include 9 | #include 10 | 11 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* _x, uint64_t xlen) 12 | { 13 | int i; 14 | uint8_t* x = _x; 15 | 16 | while (xlen > 0) { 17 | if (xlen < 1048576) i = xlen; else i = 1048576; 18 | 19 | i = getrandom(x,i,0); 20 | if (i < 1) { 21 | sleep(1); 22 | continue; 23 | } 24 | x += i; 25 | xlen -= i; 26 | } 27 | 28 | return _x; 29 | } 30 | 31 | #elif defined(__APPLE__) 32 | 33 | #include 34 | 35 | #if !(defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) 36 | #error "macOS version not supported (>= 10.12)" 37 | #endif 38 | 39 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* x, uint64_t xlen){ 40 | arc4random_buf(x, xlen); 41 | return x; 42 | } 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /bench/results/haswell-i74770k/supercop/macros.tex: -------------------------------------------------------------------------------- 1 | \newcommand{\crefgenhwccs}{178400} 2 | \newcommand{\crefenchwccs}{219200} 3 | \newcommand{\crefdechwccs}{253092} 4 | \newcommand{\cavxgenhwccs}{44612} 5 | \newcommand{\cavxenchwccs}{60244} 6 | \newcommand{\cavxdechwccs}{57184} 7 | \newcommand{\jrefgenhwccs}{391128} 8 | \newcommand{\jrefenchwccs}{454268} 9 | \newcommand{\jrefdechwccs}{517804} 10 | \newcommand{\joptgenhwccs}{45844} 11 | \newcommand{\joptenchwccs}{60892} 12 | \newcommand{\joptdechwccs}{50048} 13 | \newcommand{\javxgenhwccs}{93472} 14 | \newcommand{\javxenchwccs}{92960} 15 | \newcommand{\javxdechwccs}{81584} 16 | \newcommand{\lrefgenhwccs}{288924} 17 | \newcommand{\lrefenchwccs}{325740} 18 | \newcommand{\lrefdechwccs}{411848} 19 | \newcommand{\lavxgenhwccs}{44056} 20 | \newcommand{\lavxenchwccs}{57432} 21 | \newcommand{\lavxdechwccs}{47908} 22 | \newcommand{\rrefgenhwccs}{295436} 23 | \newcommand{\rrefenchwccs}{326376} 24 | \newcommand{\rrefdechwccs}{413380} 25 | \newcommand{\ravxgenhwccs}{48156} 26 | \newcommand{\ravxenchwccs}{59724} 27 | \newcommand{\ravxdechwccs}{47920} 28 | -------------------------------------------------------------------------------- /bench/results/skylake-i76500u/supercop/macros.tex: -------------------------------------------------------------------------------- 1 | \newcommand{\crefgenskccs}{191952} 2 | \newcommand{\crefencskccs}{232566} 3 | \newcommand{\crefdecskccs}{271816} 4 | \newcommand{\cavxgenskccs}{41732} 5 | \newcommand{\cavxencskccs}{55404} 6 | \newcommand{\cavxdecskccs}{44492} 7 | \newcommand{\jrefgenskccs}{407152} 8 | \newcommand{\jrefencskccs}{465848} 9 | \newcommand{\jrefdecskccs}{541696} 10 | \newcommand{\joptgenskccs}{45244} 11 | \newcommand{\joptencskccs}{59850} 12 | \newcommand{\joptdecskccs}{48562} 13 | \newcommand{\javxgenskccs}{101820} 14 | \newcommand{\javxencskccs}{96770} 15 | \newcommand{\javxdecskccs}{86280} 16 | \newcommand{\lrefgenskccs}{308320} 17 | \newcommand{\lrefencskccs}{337838} 18 | \newcommand{\lrefdecskccs}{430920} 19 | \newcommand{\lavxgenskccs}{41960} 20 | \newcommand{\lavxencskccs}{54148} 21 | \newcommand{\lavxdecskccs}{45072} 22 | \newcommand{\rrefgenskccs}{314216} 23 | \newcommand{\rrefencskccs}{341896} 24 | \newcommand{\rrefdecskccs}{430948} 25 | \newcommand{\ravxgenskccs}{49548} 26 | \newcommand{\ravxencskccs}{58048} 27 | \newcommand{\ravxdecskccs}{45238} 28 | -------------------------------------------------------------------------------- /bench/results/alderlake-i71260p/supercop/macros.tex: -------------------------------------------------------------------------------- 1 | \newcommand{\crefgenalccs}{196203} 2 | \newcommand{\crefencalccs}{232045} 3 | \newcommand{\crefdecalccs}{268424} 4 | \newcommand{\cavxgenalccs}{48356} 5 | \newcommand{\cavxencalccs}{61592} 6 | \newcommand{\cavxdecalccs}{50450} 7 | \newcommand{\jrefgenalccs}{483605} 8 | \newcommand{\jrefencalccs}{548757} 9 | \newcommand{\jrefdecalccs}{699668} 10 | \newcommand{\joptgenalccs}{51066} 11 | \newcommand{\joptencalccs}{65453} 12 | \newcommand{\joptdecalccs}{54102} 13 | \newcommand{\javxgenalccs}{107309} 14 | \newcommand{\javxencalccs}{100295} 15 | \newcommand{\javxdecalccs}{88735} 16 | \newcommand{\lrefgenalccs}{406567} 17 | \newcommand{\lrefencalccs}{445685} 18 | \newcommand{\lrefdecalccs}{579904} 19 | \newcommand{\lavxgenalccs}{56457} 20 | \newcommand{\lavxencalccs}{75812} 21 | \newcommand{\lavxdecalccs}{60230} 22 | \newcommand{\rrefgenalccs}{411243} 23 | \newcommand{\rrefencalccs}{448120} 24 | \newcommand{\rrefdecalccs}{581130} 25 | \newcommand{\ravxgenalccs}{59211} 26 | \newcommand{\ravxencalccs}{77230} 27 | \newcommand{\ravxdecalccs}{60329} 28 | -------------------------------------------------------------------------------- /bench/results/cannonlake-i710700k/supercop/macros.tex: -------------------------------------------------------------------------------- 1 | \newcommand{\crefgenclccs}{182644} 2 | \newcommand{\crefencclccs}{220154} 3 | \newcommand{\crefdecclccs}{256838} 4 | \newcommand{\cavxgenclccs}{39300} 5 | \newcommand{\cavxencclccs}{53142} 6 | \newcommand{\cavxdecclccs}{42088} 7 | \newcommand{\jrefgenclccs}{383878} 8 | \newcommand{\jrefencclccs}{441668} 9 | \newcommand{\jrefdecclccs}{510612} 10 | \newcommand{\joptgenclccs}{43444} 11 | \newcommand{\joptencclccs}{57582} 12 | \newcommand{\joptdecclccs}{46642} 13 | \newcommand{\javxgenclccs}{92692} 14 | \newcommand{\javxencclccs}{89958} 15 | \newcommand{\javxdecclccs}{78774} 16 | \newcommand{\lrefgenclccs}{287804} 17 | \newcommand{\lrefencclccs}{318978} 18 | \newcommand{\lrefdecclccs}{408620} 19 | \newcommand{\lavxgenclccs}{40426} 20 | \newcommand{\lavxencclccs}{52064} 21 | \newcommand{\lavxdecclccs}{43402} 22 | \newcommand{\rrefgenclccs}{289506} 23 | \newcommand{\rrefencclccs}{320008} 24 | \newcommand{\rrefdecclccs}{407782} 25 | \newcommand{\ravxgenclccs}{42176} 26 | \newcommand{\ravxencclccs}{52950} 27 | \newcommand{\ravxdecclccs}{43514} 28 | -------------------------------------------------------------------------------- /bench/test/notrandombytes1.c: -------------------------------------------------------------------------------- 1 | #include "notrandombytes.h" 2 | #include "notrandombytes1.h" 3 | #include 4 | 5 | //static int initialized = 0; 6 | 7 | 8 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* x, uint64_t xlen) 9 | __asm("__jasmin_syscall_randombytes__"); 10 | uint8_t* __jasmin_syscall_randombytes__(uint8_t* x, uint64_t xlen) 11 | { 12 | // if (!initialized) { 13 | // // This message confirms that the specific notrandombytes implementation is running 14 | // fprintf(stderr, "DRBG INIT (jasmin): Using ChaCha20 Deterministic PRNG. - %d %d\n", sizeof(uint8_t*), sizeof(uint64_t)); 15 | // initialized = 1; 16 | // } 17 | notrandombytes(x,xlen); 18 | return x; 19 | } 20 | 21 | 22 | void randombytes(uint8_t* x, uint64_t xlen) 23 | { 24 | // if (!initialized) { 25 | // // This message confirms that the specific notrandombytes implementation is running 26 | // fprintf(stderr, "DRBG INIT: Using ChaCha20 Deterministic PRNG. - %d %d\n", sizeof(uint8_t*), sizeof(uint64_t)); 27 | // initialized = 1; 28 | // } 29 | notrandombytes(x,xlen); 30 | } 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /.github/workflows/bench.yml: -------------------------------------------------------------------------------- 1 | name: Benchmarks 2 | permissions: 3 | contents: read 4 | on: 5 | workflow_call: 6 | workflow_dispatch: 7 | 8 | env: 9 | NIXPKGS_ALLOW_UNFREE: 1 10 | 11 | jobs: 12 | benchmark: 13 | name: Benchmarks 14 | runs-on: ubuntu-latest 15 | strategy: 16 | fail-fast: false 17 | steps: 18 | - uses: actions/checkout@v4 19 | with: 20 | submodules: recursive 21 | - uses: cachix/install-nix-action@v31 22 | with: 23 | nix_path: nixpkgs=channel:nixos-unstable 24 | - run: nix-shell --arg full false --run "echo Dependencies OK…" 25 | - run: nix-shell --arg full false --run "make -C bench run" 26 | - run: | 27 | echo "## Benchmark Results" >> $GITHUB_STEP_SUMMARY 28 | echo '| **Implementation** | **KeyPair Cycles** | **Enc Cycles** | **Dec Cycles** |' >> $GITHUB_STEP_SUMMARY 29 | echo '| ----- | ----- | ------ | ------ |' >> $GITHUB_STEP_SUMMARY 30 | for f in bench/bin/*.out; do 31 | DATA=$(cat $f) 32 | echo "| **${f}** ${DATA}" >> $GITHUB_STEP_SUMMARY 33 | done -------------------------------------------------------------------------------- /proof/security/FLPRG.eca: -------------------------------------------------------------------------------- 1 | (*** A formalization of a fixed-length stateless prg **) 2 | 3 | type seed. 4 | type output. 5 | 6 | op prg : seed -> output. 7 | 8 | (** PRG-security is expressed w.r.t. arbitrary distributions dseed/dout on 9 | types seed/output (usually the uniform distribution on the full types): 10 | no adversary should be able to distinguish between an 11 | output produced by the PRG and a sample in dout **) 12 | op dseed: seed distr. 13 | op dout : output distr. 14 | 15 | module type RG = { 16 | proc get(sd : seed): output 17 | }. 18 | 19 | module type Distinguisher = { proc distinguish(x : output): bool }. 20 | 21 | module IND(PRG : RG, D:Distinguisher) = { 22 | proc main(): bool = { 23 | var b,sd,x; 24 | 25 | sd <$ dseed; 26 | x <@ PRG.get(sd); 27 | b <@ D.distinguish(x); 28 | return b; 29 | } 30 | }. 31 | 32 | module PRGr:RG = { 33 | proc get(sd : seed): output = { var r; r <- prg sd; return r; } 34 | }. 35 | 36 | module PRGi:RG = { 37 | proc get(sd : seed): output = { var r; r <$ dout; return r; } 38 | }. 39 | 40 | 41 | (** Advantage of a distinguisher against a PRG G: 42 | Adv^PRG_G(&m,D) = `|Pr[IND(PRGr,D) @ &m: res] - Pr[IND(PRGi,D) @ &m: res]| **) 43 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/gen_matrix.jinc: -------------------------------------------------------------------------------- 1 | require "gen_matrix_globals.jinc" 2 | require "../../common/avx2/gen_matrix.jinc" 3 | 4 | fn _gen_matrix_avx2 5 | ( reg mut ptr u16[MLKEM_K * MLKEM_K * MLKEM_N] matrix 6 | , reg const ptr u8[32] rho 7 | , #spill_to_mmx reg u64 transposed 8 | ) -> reg ptr u16[MLKEM_K * MLKEM_K * MLKEM_N] 9 | requires {is_arr_init(rho,0,32) && 0<= transposed && transposed <= 1} 10 | ensures { is_arr_init(result.0,0,MLKEM_K * MLKEM_K * MLKEM_N * 2)} 11 | { 12 | // local variables 13 | inline int i j; 14 | stack u8[BUF_size * 4] buf_s; 15 | reg ptr u8[BUF_size * 4] buf; 16 | reg ptr u16[4*MLKEM_N] polx4; 17 | reg u64 pos_entry; 18 | 19 | () = #spill(transposed); 20 | 21 | buf = buf_s; 22 | 23 | for i = 0 to 4 24 | { 25 | pos_entry = 8*i; 26 | polx4 = matrix[4*i*MLKEM_N:4*MLKEM_N]; 27 | () = #unspill(transposed); 28 | polx4, buf = _gen_matrix_sample_four_polynomials(polx4, buf, rho, pos_entry, transposed); 29 | matrix[i*4*MLKEM_N:4*MLKEM_N] = polx4; 30 | } 31 | 32 | 33 | for i = 0 to MLKEM_K 34 | { for j = 0 to MLKEM_K 35 | { matrix[i*MLKEM_VECN+j*MLKEM_N:MLKEM_N] = _nttunpack(matrix[i*MLKEM_VECN+j*MLKEM_N:MLKEM_N]); 36 | } 37 | } 38 | 39 | return matrix; 40 | } 41 | -------------------------------------------------------------------------------- /bench/benchmacros.artifact.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # example: 4 | # ./benchmacros.sh 5 | 6 | if [ ! "$#" -eq 2 ]; then 7 | ./benchmacros.artifact.sh bin/ cpu > table/macros.tex 8 | exit; 9 | fi 10 | 11 | dir=$1 # results/CPU/ 12 | cpu=$2 # sk hw cl al 13 | 14 | # bench_jasmin_ref.out -> jref_op_cpu_cc 15 | # bench_jasmin_avx2.out -> jopt_op_cpu_cc 16 | # bench_jasmin_avx2v.out -> javx_op_cpu_cc 17 | # bench_pq-crystals_ref.out -> cref_op_cpu_cc 18 | # bench_pq-crystals_avx2.out -> cavx_op_cpu_cc 19 | 20 | get() 21 | { 22 | file=$1; tag=$2; cpu=$3; 23 | 24 | if ! [ -f $file ] 25 | then 26 | line="XXX,XXX,XXX" 27 | else 28 | line=$(sed -n '6,+0p' $file) # change line here if needed 29 | fi 30 | 31 | gen=$(cut -d, -f1 < <(cat <<< "$line")) 32 | enc=$(cut -d, -f2 < <(cat <<< "$line")) 33 | dec=$(cut -d, -f3 < <(cat <<< "$line")) 34 | 35 | echo "\newcommand{\\${tag}gen${cpu}cc}{${gen}}" 36 | echo "\newcommand{\\${tag}enc${cpu}cc}{${enc}}" 37 | echo "\newcommand{\\${tag}dec${cpu}cc}{${dec}}" 38 | } 39 | 40 | for t in pq-crystals_ref,cref pq-crystals_avx2,cavx jasmin_ref,jref jasmin_avx2,jopt jasmin_avx2v,javx; 41 | do IFS=',' 42 | set -- $t 43 | get "${dir}/bench_${1}.out" "${2}" "${cpu}" 44 | done 45 | -------------------------------------------------------------------------------- /bench/memory/memory.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #include "api.h" 7 | #include "namespace.h" 8 | #include "jade_kem.h" 9 | #include "config.h" 10 | 11 | /* 12 | int jade_kem_keypair( 13 | uint8_t *public_key, 14 | uint8_t *secret_key 15 | ); 16 | 17 | int jade_kem_enc( 18 | uint8_t *ciphertext, 19 | uint8_t *shared_secret, 20 | const uint8_t *public_key 21 | ); 22 | 23 | int jade_kem_dec( 24 | uint8_t *shared_secret, 25 | const uint8_t *ciphertext, 26 | const uint8_t *secret_key 27 | ); 28 | 29 | */ 30 | 31 | int main(void) 32 | { 33 | uint8_t *public_key; 34 | uint8_t *secret_key; 35 | uint8_t *ciphertext; 36 | uint8_t *shared_secret; 37 | 38 | public_key = malloc(sizeof(uint8_t) * JADE_KEM_PUBLICKEYBYTES); 39 | secret_key = malloc(sizeof(uint8_t) * JADE_KEM_SECRETKEYBYTES); 40 | ciphertext = malloc(sizeof(uint8_t) * JADE_KEM_CIPHERTEXTBYTES); 41 | shared_secret = malloc(sizeof(uint8_t) * JADE_KEM_BYTES); 42 | 43 | jade_kem_keypair(public_key, secret_key); 44 | jade_kem_enc(ciphertext, shared_secret, public_key); 45 | jade_kem_dec(shared_secret, ciphertext, secret_key); 46 | 47 | 48 | free(public_key); 49 | free(secret_key); 50 | free(ciphertext); 51 | free(shared_secret); 52 | 53 | return 0; 54 | } -------------------------------------------------------------------------------- /bench/src/bindings/mlkem-native-768/api.h: -------------------------------------------------------------------------------- 1 | #ifndef PQCP_MLKEM_NATIVE_MLKEM768_API_H 2 | #define PQCP_MLKEM_NATIVE_MLKEM768_API_H 3 | 4 | #include 5 | 6 | #define PQCP_MLKEM_NATIVE_MLKEM768_SECRETKEYBYTES 2400 7 | #define PQCP_MLKEM_NATIVE_MLKEM768_PUBLICKEYBYTES 1184 8 | #define PQCP_MLKEM_NATIVE_MLKEM768_CIPHERTEXTBYTES 1088 9 | #define PQCP_MLKEM_NATIVE_MLKEM768_BYTES 32 10 | 11 | #define PQCP_MLKEM_NATIVE_MLKEM768_ALGNAME "MLKEM768" 12 | #define PQCP_MLKEM_NATIVE_MLKEM768_ARCH "amd64" 13 | #define PQCP_MLKEM_NATIVE_MLKEM768_IMPL "avx2" 14 | 15 | 16 | int PQCP_MLKEM_NATIVE_MLKEM768_keypair_derand( 17 | uint8_t *public_key, 18 | uint8_t *secret_key, 19 | uint8_t *coins 20 | ); 21 | 22 | int PQCP_MLKEM_NATIVE_MLKEM768_enc_derand( 23 | uint8_t *ciphertext, 24 | uint8_t *shared_secret, 25 | const uint8_t *public_key, 26 | uint8_t *coins 27 | ); 28 | 29 | int PQCP_MLKEM_NATIVE_MLKEM768_keypair( 30 | uint8_t *public_key, 31 | uint8_t *secret_key 32 | ); 33 | 34 | int PQCP_MLKEM_NATIVE_MLKEM768_enc( 35 | uint8_t *ciphertext, 36 | uint8_t *shared_secret, 37 | const uint8_t *public_key 38 | ); 39 | 40 | int PQCP_MLKEM_NATIVE_MLKEM768_dec( 41 | uint8_t *shared_secret, 42 | const uint8_t *ciphertext, 43 | const uint8_t *secret_key 44 | ); 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /bench/src/bindings/mlkem-native-1024/api.h: -------------------------------------------------------------------------------- 1 | #ifndef PQCP_MLKEM_NATIVE_MLKEM1024_API_H 2 | #define PQCP_MLKEM_NATIVE_MLKEM1024_API_H 3 | 4 | #include 5 | 6 | #define PQCP_MLKEM_NATIVE_MLKEM1024_SECRETKEYBYTES 3168 7 | #define PQCP_MLKEM_NATIVE_MLKEM1024_PUBLICKEYBYTES 1568 8 | #define PQCP_MLKEM_NATIVE_MLKEM1024_CIPHERTEXTBYTES 1568 9 | #define PQCP_MLKEM_NATIVE_MLKEM1024_BYTES 32 10 | 11 | #define PQCP_MLKEM_NATIVE_MLKEM1024_ALGNAME "MLKEM1024" 12 | #define PQCP_MLKEM_NATIVE_MLKEM1024_ARCH "amd64" 13 | #define PQCP_MLKEM_NATIVE_MLKEM1024_IMPL "avx2" 14 | 15 | 16 | int PQCP_MLKEM_NATIVE_MLKEM1024_keypair_derand( 17 | uint8_t *public_key, 18 | uint8_t *secret_key, 19 | uint8_t *coins 20 | ); 21 | 22 | int PQCP_MLKEM_NATIVE_MLKEM1024_enc_derand( 23 | uint8_t *ciphertext, 24 | uint8_t *shared_secret, 25 | const uint8_t *public_key, 26 | uint8_t *coins 27 | ); 28 | 29 | int PQCP_MLKEM_NATIVE_MLKEM1024_keypair( 30 | uint8_t *public_key, 31 | uint8_t *secret_key 32 | ); 33 | 34 | int PQCP_MLKEM_NATIVE_MLKEM1024_enc( 35 | uint8_t *ciphertext, 36 | uint8_t *shared_secret, 37 | const uint8_t *public_key 38 | ); 39 | 40 | int PQCP_MLKEM_NATIVE_MLKEM1024_dec( 41 | uint8_t *shared_secret, 42 | const uint8_t *ciphertext, 43 | const uint8_t *secret_key 44 | ); 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /bench/supercop-update.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | supercop=supercop-20221122-clang-14 4 | 5 | compile jasmin files if possible 6 | if [ -x "$(command -v jasminc)" ] 7 | then 8 | for src in src/jasmin/ src/libjade/; 9 | do 10 | (find $src -name Makefile -printf "%h\n" | while read dir; do (make -C $dir distclean && make -C $dir); done) 11 | done 12 | fi 13 | 14 | # clean (but not distclean -- no removal of *.s files) 15 | for src in src/jasmin/ src/libjade/; 16 | do 17 | (find $src -name Makefile -printf "%h\n" | while read dir; do (make -C $dir clean); done) 18 | done 19 | 20 | # copy patch files 21 | (cd supercop-patch && find . -name api.h -printf "%h\n") | \ 22 | while read dir; do rm -fr ${supercop}/${dir} && cp -r -T supercop-patch/${dir} ${supercop}/${dir}; done 23 | 24 | # copy assembly files 25 | cp src/jasmin/ref/jkem.s ${supercop}/crypto_kem/kyber768/jasmin_ref/jkem.s 26 | cp src/jasmin/avx2/jkem.s ${supercop}/crypto_kem/kyber768/jasmin_avx2/jkem.s 27 | cp src/jasmin/avx2v/jkem.s ${supercop}/crypto_kem/kyber768/jasmin_avx2v/jkem.s 28 | cp src/libjade/ref/jkem.s ${supercop}/crypto_kem/kyber768/libjade_ref/jkem.s 29 | cp src/libjade/avx2/jkem.s ${supercop}/crypto_kem/kyber768/libjade_avx2/jkem.s 30 | cp src/libjade/ref/jkem.s ${supercop}/crypto_kem/kyber768/libjade_rref/jkem.s 31 | cp src/libjade/avx2/jkem.s ${supercop}/crypto_kem/kyber768/libjade_ravx2/jkem.s 32 | -------------------------------------------------------------------------------- /bench/src/jasmin/768/ref/api.h: -------------------------------------------------------------------------------- 1 | #ifndef JADE_KEM_MLKEM_MLKEM768_AMD64_REF_API_H 2 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_REF_API_H 3 | 4 | #include 5 | 6 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_REF_SECRETKEYBYTES 2400 7 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_REF_PUBLICKEYBYTES 1184 8 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_REF_CIPHERTEXTBYTES 1088 9 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_REF_BYTES 32 10 | 11 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_REF_ALGNAME "MLKEM768" 12 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_REF_ARCH "amd64" 13 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_REF_IMPL "ref" 14 | 15 | int jade_kem_mlkem_mlkem768_amd64_ref_keypair_derand( 16 | uint8_t *public_key, 17 | uint8_t *secret_key, 18 | uint8_t *coins 19 | ); 20 | 21 | int jade_kem_mlkem_mlkem768_amd64_ref_enc_derand( 22 | uint8_t *ciphertext, 23 | uint8_t *shared_secret, 24 | const uint8_t *public_key, 25 | uint8_t *coins 26 | ); 27 | 28 | int jade_kem_mlkem_mlkem768_amd64_ref_keypair( 29 | uint8_t *public_key, 30 | uint8_t *secret_key 31 | ); 32 | 33 | int jade_kem_mlkem_mlkem768_amd64_ref_enc( 34 | uint8_t *ciphertext, 35 | uint8_t *shared_secret, 36 | const uint8_t *public_key 37 | ); 38 | 39 | int jade_kem_mlkem_mlkem768_amd64_ref_dec( 40 | uint8_t *shared_secret, 41 | const uint8_t *ciphertext, 42 | const uint8_t *secret_key 43 | ); 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /code/jasmin/common/avx2/verify.jinc: -------------------------------------------------------------------------------- 1 | require "params.jinc" 2 | 3 | /* 4 | __verify: compare two ciphertexts encoded as byte arrays of size MLKEM_INDCPA_CIPHERTEXTBYTES 5 | 6 | ensures: 7 | - res = if ct = ctpc then 0 else 1 8 | */ 9 | 10 | inline 11 | fn __verify(reg ptr u8[MLKEM_INDCPA_CIPHERTEXTBYTES] ct, reg ptr u8[MLKEM_INDCPA_CIPHERTEXTBYTES] ctpc) -> reg u64 12 | { 13 | reg u256 f g h; 14 | reg u64 cnd t64; 15 | reg bool zf; 16 | inline int i; 17 | 18 | cnd = 0; 19 | t64 = 1; 20 | h = #set0_256(); 21 | 22 | for i = 0 to MLKEM_INDCPA_CIPHERTEXTBYTES/32 23 | { 24 | f = ctpc.[:u256 32*i]; 25 | g = ct.[:u256 32*i]; 26 | f = #VPXOR_256(f, g); 27 | h = #VPOR_256(h, f); 28 | } 29 | 30 | _, _, _, _, zf = #VPTEST_256(h, h); 31 | 32 | cnd = t64 if !zf; 33 | 34 | return cnd; 35 | } 36 | 37 | 38 | /* 39 | __cmov: conditional move MLKEM_SYMBYTES from src to dst 40 | 41 | ensures: 42 | - _cnd = 0 => dst = src 43 | - _cnd = 1 => dst unchanged 44 | */ 45 | 46 | inline 47 | fn __cmov(reg ptr u8[MLKEM_SYMBYTES] dst, reg ptr u8[MLKEM_SYMBYTES] src, reg u64 cnd) -> reg ptr u8[MLKEM_SYMBYTES] 48 | { 49 | reg u256 f g m; 50 | stack u64 scnd; 51 | 52 | cnd = -cnd; 53 | scnd = cnd; 54 | 55 | m = #VPBROADCAST_4u64(scnd); 56 | 57 | f = src.[:u256 0]; 58 | g = dst.[:u256 0]; 59 | f = #BLENDV_32u8(f, g, m); 60 | dst.[:u256 0] = f; 61 | 62 | return dst; 63 | } 64 | 65 | -------------------------------------------------------------------------------- /bench/src/jasmin/1024/ref/api.h: -------------------------------------------------------------------------------- 1 | #ifndef JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_API_H 2 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_API_H 3 | 4 | #include 5 | 6 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_SECRETKEYBYTES 3168 7 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_PUBLICKEYBYTES 1568 8 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_CIPHERTEXTBYTES 1568 9 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_BYTES 32 10 | 11 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_ALGNAME "MLKEM1024" 12 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_ARCH "amd64" 13 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_IMPL "ref" 14 | 15 | int jade_kem_mlkem_mlkem1024_amd64_ref_keypair_derand( 16 | uint8_t *public_key, 17 | uint8_t *secret_key, 18 | uint8_t *coins 19 | ); 20 | 21 | int jade_kem_mlkem_mlkem1024_amd64_ref_enc_derand( 22 | uint8_t *ciphertext, 23 | uint8_t *shared_secret, 24 | const uint8_t *public_key, 25 | uint8_t *coins 26 | ); 27 | 28 | int jade_kem_mlkem_mlkem1024_amd64_ref_keypair( 29 | uint8_t *public_key, 30 | uint8_t *secret_key 31 | ); 32 | 33 | int jade_kem_mlkem_mlkem1024_amd64_ref_enc( 34 | uint8_t *ciphertext, 35 | uint8_t *shared_secret, 36 | const uint8_t *public_key 37 | ); 38 | 39 | int jade_kem_mlkem_mlkem1024_amd64_ref_dec( 40 | uint8_t *shared_secret, 41 | const uint8_t *ciphertext, 42 | const uint8_t *secret_key 43 | ); 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/include/api.h: -------------------------------------------------------------------------------- 1 | #ifndef JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_API_H 2 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_API_H 3 | 4 | #include 5 | 6 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_SECRETKEYBYTES 3168 7 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_PUBLICKEYBYTES 1568 8 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_CIPHERTEXTBYTES 1568 9 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_BYTES 32 10 | 11 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_ALGNAME "MLKEM1024" 12 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_ARCH "amd64" 13 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_REF_IMPL "ref" 14 | 15 | int jade_kem_mlkem_mlkem1024_amd64_ref_keypair_derand( 16 | uint8_t *public_key, 17 | uint8_t *secret_key, 18 | uint8_t *coins 19 | ); 20 | 21 | int jade_kem_mlkem_mlkem1024_amd64_ref_enc_derand( 22 | uint8_t *ciphertext, 23 | uint8_t *shared_secret, 24 | const uint8_t *public_key, 25 | uint8_t *coins 26 | ); 27 | 28 | int jade_kem_mlkem_mlkem1024_amd64_ref_keypair( 29 | uint8_t *public_key, 30 | uint8_t *secret_key 31 | ); 32 | 33 | int jade_kem_mlkem_mlkem1024_amd64_ref_enc( 34 | uint8_t *ciphertext, 35 | uint8_t *shared_secret, 36 | const uint8_t *public_key 37 | ); 38 | 39 | int jade_kem_mlkem_mlkem1024_amd64_ref_dec( 40 | uint8_t *shared_secret, 41 | const uint8_t *ciphertext, 42 | const uint8_t *secret_key 43 | ); 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /bench/src/jasmin/768/avx2/api.h: -------------------------------------------------------------------------------- 1 | #ifndef JADE_KEM_MLKEM_MLKEM768_AMD64_AVX2_API_H 2 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_AVX2_API_H 3 | 4 | #include 5 | 6 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_AVX2_SECRETKEYBYTES 2400 7 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_AVX2_PUBLICKEYBYTES 1184 8 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_AVX2_CIPHERTEXTBYTES 1088 9 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_AVX2_BYTES 32 10 | 11 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_AVX2_ALGNAME "MLKEM768" 12 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_AVX2_ARCH "amd64" 13 | #define JADE_KEM_MLKEM_MLKEM768_AMD64_AVX2_IMPL "avx2" 14 | 15 | 16 | int jade_kem_mlkem_mlkem768_amd64_avx2_keypair_derand( 17 | uint8_t *public_key, 18 | uint8_t *secret_key, 19 | uint8_t *coins 20 | ); 21 | 22 | int jade_kem_mlkem_mlkem768_amd64_avx2_enc_derand( 23 | uint8_t *ciphertext, 24 | uint8_t *shared_secret, 25 | const uint8_t *public_key, 26 | uint8_t *coins 27 | ); 28 | 29 | int jade_kem_mlkem_mlkem768_amd64_avx2_keypair( 30 | uint8_t *public_key, 31 | uint8_t *secret_key 32 | ); 33 | 34 | int jade_kem_mlkem_mlkem768_amd64_avx2_enc( 35 | uint8_t *ciphertext, 36 | uint8_t *shared_secret, 37 | const uint8_t *public_key 38 | ); 39 | 40 | int jade_kem_mlkem_mlkem768_amd64_avx2_dec( 41 | uint8_t *shared_secret, 42 | const uint8_t *ciphertext, 43 | const uint8_t *secret_key 44 | ); 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /bench/src/jasmin/1024/avx2/api.h: -------------------------------------------------------------------------------- 1 | #ifndef JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_API_H 2 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_API_H 3 | 4 | #include 5 | 6 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_SECRETKEYBYTES 3168 7 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_PUBLICKEYBYTES 1568 8 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_CIPHERTEXTBYTES 1568 9 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_BYTES 32 10 | 11 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_ALGNAME "MLKEM1024" 12 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_ARCH "amd64" 13 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_IMPL "avx2" 14 | 15 | int jade_kem_mlkem_mlkem1024_amd64_avx2_keypair_derand( 16 | uint8_t *public_key, 17 | uint8_t *secret_key, 18 | uint8_t *coins 19 | ); 20 | 21 | int jade_kem_mlkem_mlkem1024_amd64_avx2_enc_derand( 22 | uint8_t *ciphertext, 23 | uint8_t *shared_secret, 24 | const uint8_t *public_key, 25 | uint8_t *coins 26 | ); 27 | 28 | int jade_kem_mlkem_mlkem1024_amd64_avx2_keypair( 29 | uint8_t *public_key, 30 | uint8_t *secret_key 31 | ); 32 | 33 | int jade_kem_mlkem_mlkem1024_amd64_avx2_enc( 34 | uint8_t *ciphertext, 35 | uint8_t *shared_secret, 36 | const uint8_t *public_key 37 | ); 38 | 39 | int jade_kem_mlkem_mlkem1024_amd64_avx2_dec( 40 | uint8_t *shared_secret, 41 | const uint8_t *ciphertext, 42 | const uint8_t *secret_key 43 | ); 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /code/jasmin/1024/avx2/include/api.h: -------------------------------------------------------------------------------- 1 | #ifndef JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_API_H 2 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_API_H 3 | 4 | #include 5 | 6 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_SECRETKEYBYTES 3168 7 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_PUBLICKEYBYTES 1568 8 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_CIPHERTEXTBYTES 1568 9 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_BYTES 32 10 | 11 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_ALGNAME "MLKEM1024" 12 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_ARCH "amd64" 13 | #define JADE_KEM_MLKEM_MLKEM1024_AMD64_AVX2_IMPL "avx2" 14 | 15 | int jade_kem_mlkem_mlkem1024_amd64_avx2_keypair_derand( 16 | uint8_t *public_key, 17 | uint8_t *secret_key, 18 | uint8_t *coins 19 | ); 20 | 21 | int jade_kem_mlkem_mlkem1024_amd64_avx2_enc_derand( 22 | uint8_t *ciphertext, 23 | uint8_t *shared_secret, 24 | const uint8_t *public_key, 25 | uint8_t *coins 26 | ); 27 | 28 | int jade_kem_mlkem_mlkem1024_amd64_avx2_keypair( 29 | uint8_t *public_key, 30 | uint8_t *secret_key 31 | ); 32 | 33 | int jade_kem_mlkem_mlkem1024_amd64_avx2_enc( 34 | uint8_t *ciphertext, 35 | uint8_t *shared_secret, 36 | const uint8_t *public_key 37 | ); 38 | 39 | int jade_kem_mlkem_mlkem1024_amd64_avx2_dec( 40 | uint8_t *shared_secret, 41 | const uint8_t *ciphertext, 42 | const uint8_t *secret_key 43 | ); 44 | 45 | #endif 46 | -------------------------------------------------------------------------------- /proof/eclib/Jcheck.ec: -------------------------------------------------------------------------------- 1 | require import AllCore IntDiv CoreMap List Distr. 2 | 3 | type 'k trace_ = ('k * bool) list. 4 | 5 | op trace ['k 'a] (x:'a * 'k trace_) = x.`2. 6 | 7 | op valid ['k] (t : 'k trace_) = all (fun (p:_ * _) => p.`2) t. 8 | 9 | op validk ['k] (k : 'k) (t : 'k trace_) = 10 | with t = [] => true 11 | with t = p :: t' => if p.`1 = k then p.`2 /\ validk k t' else (p.`2 => validk k t'). 12 | 13 | lemma valid_cat ['k] (t1 t2 : 'k trace_) : valid (t1 ++ t2) <=> valid t1 /\ valid t2. 14 | proof. apply all_cat. qed. 15 | 16 | lemma forall_validk_valid ['k] (t : 'k trace_) : 17 | (forall k, validk k t) => valid t. 18 | proof. 19 | elim: t => //= -[k' b] t hrec /#. 20 | qed. 21 | 22 | lemma validk_cat ['k] (k : 'k) t1 t2 : 23 | validk k t1 => 24 | (valid t1 => validk k t2) => 25 | validk k (t1 ++ t2). 26 | proof. 27 | elim t1 => //= -[k' b] t1 hrec /= /#. 28 | qed. 29 | 30 | type kind = 31 | [ 32 | | Assert 33 | | Assume 34 | ]. 35 | 36 | type trace = kind trace_. 37 | 38 | (* 39 | op validk' (k:kind) (t:trace) = 40 | with t = [] => true 41 | with t = p :: t' => if p.`2 then validk' k t' else !(p.`1 = k). 42 | 43 | lemma equiv_vali k t : 44 | validk k t <=> validkl k t. 45 | proof. 46 | elim: t => //= -[k' b] t hrec /=. 47 | case: b => //. 48 | qed. 49 | *) 50 | 51 | lemma all_validk_valid t : validk Assert t => validk Assume t => valid t. 52 | proof. 53 | by move=> *; apply forall_validk_valid => -[]. 54 | qed. 55 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/include/api.h: -------------------------------------------------------------------------------- 1 | #ifndef JADE_KEM_mlkem_mlkem768_amd64_ref_API_H 2 | #define JADE_KEM_mlkem_mlkem768_amd64_ref_API_H 3 | 4 | #include 5 | 6 | #define JADE_KEM_mlkem_mlkem768_amd64_ref_SECRETKEYBYTES 2400 7 | #define JADE_KEM_mlkem_mlkem768_amd64_ref_PUBLICKEYBYTES 1184 8 | #define JADE_KEM_mlkem_mlkem768_amd64_ref_CIPHERTEXTBYTES 1088 9 | #define JADE_KEM_mlkem_mlkem768_amd64_ref_KEYPAIRCOINBYTES 64 10 | #define JADE_KEM_mlkem_mlkem768_amd64_ref_ENCCOINBYTES 32 11 | #define JADE_KEM_mlkem_mlkem768_amd64_ref_BYTES 32 12 | 13 | #define JADE_KEM_mlkem_mlkem768_amd64_ref_ALGNAME "mlkem768" 14 | #define JADE_KEM_mlkem_mlkem768_amd64_ref_ARCH "amd64" 15 | #define JADE_KEM_mlkem_mlkem768_amd64_ref_IMPL "ref" 16 | 17 | int JADE_KEM_mlkem_mlkem768_amd64_ref_keypair_derand( 18 | uint8_t *public_key, 19 | uint8_t *secret_key, 20 | const uint8_t *coins 21 | ); 22 | 23 | int JADE_KEM_mlkem_mlkem768_amd64_ref_keypair( 24 | uint8_t *public_key, 25 | uint8_t *secret_key 26 | ); 27 | 28 | int JADE_KEM_mlkem_mlkem768_amd64_ref_enc_derand( 29 | uint8_t *ciphertext, 30 | uint8_t *shared_secret, 31 | const uint8_t *public_key, 32 | const uint8_t *coins 33 | ); 34 | 35 | int JADE_KEM_mlkem_mlkem768_amd64_ref_enc( 36 | uint8_t *ciphertext, 37 | uint8_t *shared_secret, 38 | const uint8_t *public_key 39 | ); 40 | 41 | int JADE_KEM_mlkem_mlkem768_amd64_ref_dec( 42 | uint8_t *shared_secret, 43 | const uint8_t *ciphertext, 44 | const uint8_t *secret_key 45 | ); 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/gen_matrix.jinc: -------------------------------------------------------------------------------- 1 | require "gen_matrix_globals.jinc" 2 | require "../../common/avx2/gen_matrix.jinc" 3 | 4 | fn _gen_matrix_avx2 5 | ( reg mut ptr u16[MLKEM_K * MLKEM_K * MLKEM_N] matrix 6 | , reg const ptr u8[32] rho 7 | , #spill_to_mmx reg u64 transposed 8 | ) -> reg ptr u16[MLKEM_K * MLKEM_K * MLKEM_N] 9 | requires {is_arr_init(rho,0,32) && 0<= transposed && transposed <= 1} 10 | ensures { is_arr_init(result.0,0,MLKEM_K * MLKEM_K * MLKEM_N * 2)} 11 | { 12 | // local variables 13 | inline int i j; 14 | stack u8[BUF_size * 4] buf_s; 15 | reg ptr u8[BUF_size * 4] buf; 16 | reg ptr u16[4*MLKEM_N] polx4; 17 | reg ptr u16[MLKEM_N] pol; 18 | reg u64 pos_entry; 19 | reg u16 rc; 20 | 21 | () = #spill(transposed); 22 | 23 | buf = buf_s; 24 | 25 | for i = 0 to 2 26 | { 27 | pos_entry = 8*i; 28 | polx4 = matrix[4*i*MLKEM_N:4*MLKEM_N]; 29 | () = #unspill(transposed); 30 | polx4, buf = _gen_matrix_sample_four_polynomials(polx4, buf, rho, pos_entry, transposed); 31 | matrix[i*4*MLKEM_N:4*MLKEM_N] = polx4; 32 | } 33 | 34 | // sample the last one, (2,2), using single-lane code 35 | pol = matrix[8*MLKEM_N:MLKEM_N]; 36 | rc = 0x0202; 37 | pol, buf[BUF_size * 0 : BUF_size] = __gen_matrix_sample_one_polynomial(pol, buf[BUF_size * 0 : BUF_size], rho, rc); 38 | 39 | matrix[8*MLKEM_N:MLKEM_N] = pol; 40 | 41 | for i = 0 to MLKEM_K 42 | { for j = 0 to MLKEM_K 43 | { matrix[i*MLKEM_VECN+j*MLKEM_N:MLKEM_N] = _nttunpack(matrix[i*MLKEM_VECN+j*MLKEM_N:MLKEM_N]); 44 | } 45 | } 46 | 47 | return matrix; 48 | } 49 | -------------------------------------------------------------------------------- /code/jasmin/768/avx2/include/api.h: -------------------------------------------------------------------------------- 1 | #ifndef JADE_KEM_mlkem_mlkem768_amd64_avx2_API_H 2 | #define JADE_KEM_mlkem_mlkem768_amd64_avx2_API_H 3 | 4 | #include 5 | 6 | #define JADE_KEM_mlkem_mlkem768_amd64_avx2_SECRETKEYBYTES 2400 7 | #define JADE_KEM_mlkem_mlkem768_amd64_avx2_PUBLICKEYBYTES 1184 8 | #define JADE_KEM_mlkem_mlkem768_amd64_avx2_CIPHERTEXTBYTES 1088 9 | #define JADE_KEM_mlkem_mlkem768_amd64_avx2_KEYPAIRCOINBYTES 64 10 | #define JADE_KEM_mlkem_mlkem768_amd64_avx2_ENCCOINBYTES 32 11 | #define JADE_KEM_mlkem_mlkem768_amd64_avx2_BYTES 32 12 | 13 | #define JADE_KEM_mlkem_mlkem768_amd64_avx2_ALGNAME "mlkem768" 14 | #define JADE_KEM_mlkem_mlkem768_amd64_avx2_ARCH "amd64" 15 | #define JADE_KEM_mlkem_mlkem768_amd64_avx2_IMPL "avx2" 16 | 17 | int jade_kem_mlkem_mlkem768_amd64_avx2_keypair_derand( 18 | uint8_t *public_key, 19 | uint8_t *secret_key, 20 | const uint8_t *coins 21 | ); 22 | 23 | int jade_kem_mlkem_mlkem768_amd64_avx2_keypair( 24 | uint8_t *public_key, 25 | uint8_t *secret_key 26 | ); 27 | 28 | int jade_kem_mlkem_mlkem768_amd64_avx2_enc_derand( 29 | uint8_t *ciphertext, 30 | uint8_t *shared_secret, 31 | const uint8_t *public_key, 32 | const uint8_t *coins 33 | ); 34 | 35 | int jade_kem_mlkem_mlkem768_amd64_avx2_enc( 36 | uint8_t *ciphertext, 37 | uint8_t *shared_secret, 38 | const uint8_t *public_key 39 | ); 40 | 41 | int jade_kem_mlkem_mlkem768_amd64_avx2_dec( 42 | uint8_t *shared_secret, 43 | const uint8_t *ciphertext, 44 | const uint8_t *secret_key 45 | ); 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/poly.jinc: -------------------------------------------------------------------------------- 1 | require "params.jinc" 2 | require "../../common/ref/poly.jinc" 3 | 4 | fn _i_poly_compress(reg mut ptr u8[MLKEM_POLYCOMPRESSEDBYTES] rp, reg mut ptr u16[MLKEM_N] a) -> reg ptr u8[MLKEM_POLYCOMPRESSEDBYTES], reg ptr u16[MLKEM_N] 5 | requires {is_arr_init(a,0,2*MLKEM_N)} 6 | ensures {is_arr_init(result.0,0,MLKEM_POLYCOMPRESSEDBYTES) && is_arr_init(result.1,0,2*MLKEM_N)} 7 | { 8 | reg u32 d0, d1; 9 | reg ui64 i; 10 | 11 | a = _poly_csubq(a); 12 | 13 | i = 0; 14 | while(i < 128) 15 | { 16 | d0 = (32u)a[2 * i]; 17 | d1 = (32u)a[2 * i + 1]; 18 | d0 <<= 4; 19 | d0 += 1665; 20 | d0 *= 80635; 21 | d0 >>= 28; 22 | d0 &= 0xf; 23 | d1 <<= 4; 24 | d1 += 1665; 25 | d1 *= 80635; 26 | d1 >>= 28; 27 | d1 &= 0xf; 28 | d1 <<= 4; 29 | d0 |= d1; 30 | rp[i] = d0; 31 | i += 1; 32 | } 33 | return rp, a; 34 | } 35 | 36 | 37 | fn _i_poly_decompress(reg mut ptr u16[MLKEM_N] rp, reg const ptr u8[MLKEM_POLYCOMPRESSEDBYTES] ap) -> reg ptr u16[MLKEM_N] 38 | requires {is_arr_init(ap,0,MLKEM_POLYCOMPRESSEDBYTES)} 39 | ensures {is_arr_init(result.0,0,2*MLKEM_N)} 40 | { 41 | reg u8 t; 42 | reg u16 d0, d1; 43 | reg ui64 i; 44 | 45 | i = 0; 46 | 47 | while (i < 128) { 48 | t = ap[i]; 49 | d0 = (16u)t; 50 | d1 = (16u)t; 51 | d0 &= 0xf; 52 | d1 >>= 4; 53 | d0 *= MLKEM_Q; 54 | d1 *= MLKEM_Q; 55 | d0 += 8; 56 | d1 += 8; 57 | d0 >>= 4; 58 | d1 >>= 4; 59 | rp[2 * i] = d0; 60 | rp[2 * i + 1] = d1; 61 | i += 1; 62 | } 63 | return rp; 64 | } 65 | -------------------------------------------------------------------------------- /proof/correctness/768/README.md: -------------------------------------------------------------------------------- 1 | W16extra.ec: 2 | - Signed W16 arithmetic lemmas. 3 | - No dependencies. 4 | 5 | barrett_mlkem_general.ec: 6 | - Tight bound on Barrett reduction claimed in MLKEM 7 | - No dependencies 8 | 9 | Montgomery.ec: 10 | - General results for (signed) Mongomery representation, including Barrett reduction. 11 | - Depends on barrett_mlkem_general.ec for the tight bound of Barrett reduction. 12 | 13 | Fq.ec: 14 | - Correction of coefficient-wise operations in IndCpaDerand and 15 | connection to semantics over Fq (i.e., congruence relations + ranges). 16 | First connection between implementation and security proof. 17 | Clones ../security/MLKEM and provides concrete parameters for vector 18 | sizes and randomness seed type (byte arrays). Gets the modulus 19 | q value from MLKEM, but then defines all constants required for 20 | implementation-specific optimizations, such a Montgomery 21 | representation, etc. 22 | - Depends on all previous files. 23 | 24 | NTT_Fq.ec: 25 | - Specification of NTT transformation over Fq (i.e. using field 26 | operations). Gives ntt operators that can be linked to algebraic 27 | theory, which will show implementation is doing polynomial 28 | multiplication equivalent to the product scanning method 29 | used in security/MLKEM.ec. 30 | - Depends only on Fq.ec for the definitions of the field. 31 | 32 | MLKEM_Poly.ec: 33 | - Proves all poly computations correct with respect to the 34 | abstract specifications. Uses all previous files. 35 | 36 | MLKEM_PolyVec.ec: 37 | - Proves all poly computations correct with respect to the 38 | abstract specifications. Uses all previous files. 39 | -------------------------------------------------------------------------------- /code/jasmin/768/ref/Makefile: -------------------------------------------------------------------------------- 1 | # -*- Makefile -*- 2 | 3 | -include ../../../Makefile.conf 4 | 5 | CKP := ../../../kyber/ref 6 | CC ?= /usr/bin/gcc 7 | CFLAGS := -Wall -Wextra -g -O3 -fomit-frame-pointer -Wno-implicit-function-declaration 8 | JFLAGS := ${JADDFLAGS} 9 | OS := $(shell uname -s) 10 | 11 | .SECONDARY: jkem.s 12 | 13 | default: test speed 14 | 15 | test: test/test_kem 16 | ./test/test_kem 17 | 18 | 19 | speed: test/speed_kem 20 | 21 | JINC = kem.jinc params.jinc ../../common/ref/params.jinc ../../common/ref/zetas.jinc ../../common/ref/verify.jinc ../../common/ref/reduce.jinc \ 22 | ../../common/ref/polyvec.jinc polyvec.jinc ../../common/ref/poly.jinc poly.jinc ../../common/ref/indcpa.jinc ../../common/ref/gen_matrix.jinc ../../common/ref/mlkem_keccak_ref.jinc 23 | 24 | 25 | SOURCES = $(CKP)/verify.c $(CKP)/randombytes.c $(CKP)/poly.c $(CKP)/polyvec.c \ 26 | $(CKP)/cbd.c $(CKP)/fips202.c $(CKP)/ntt.c $(CKP)/reduce.c \ 27 | $(CKP)/symmetric-shake.c $(CKP)/indcpa.c $(CKP)/kem.c\ 28 | $(JASMIN)/syscall/jasmin_syscall.c 29 | 30 | 31 | test/test_kem: test/test_kem.c $(SOURCES) jkem.s 32 | $(CC) $(CFLAGS) -o $@ $(SOURCES) jkem.s $< 33 | 34 | 35 | test/speed_kem: test/speed_kem.c $(SOURCES) jkem.s 36 | $(CC) $(CFLAGS) -o $@ $(SOURCES) jkem.s $< 37 | 38 | jkem.s: jkem.jazz $(JINC) 39 | $(JASMINC) -o $@ $(JFLAGS) jkem.jazz 40 | 41 | 42 | .PHONY: ct clean 43 | 44 | ct: 45 | $(JASMINCT) jkem.jazz 46 | 47 | sct: 48 | $(JASMINCT) --sct jkem.jazz 49 | 50 | clean: 51 | -rm -f *.s 52 | -rm -f jkem.o 53 | -rm -f test/test_kem 54 | -rm -f test/speed_kem 55 | ifeq ($(OS),Darwin) 56 | -rm -rf test/*.dSYM 57 | endif 58 | -------------------------------------------------------------------------------- /bench/benchmacros.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # example: 4 | # ./benchmacros.sh 5 | # or 6 | # ./benchmacros.sh results/haswell-i74770k/ hw > results/haswell-i74770k/macros.tex 7 | # ... 8 | 9 | if [ ! "$#" -eq 2 ]; then 10 | ./benchmacros.sh results/haswell-i74770k/ hw > results/haswell-i74770k/macros.tex 11 | ./benchmacros.sh results/skylake-i76500u/ sk > results/skylake-i76500u/macros.tex 12 | ./benchmacros.sh results/cannonlake-i710700k/ cl > results/cannonlake-i710700k/macros.tex 13 | ./benchmacros.sh results/alderlake-i71260p/ al > results/alderlake-i71260p/macros.tex 14 | exit; 15 | fi 16 | 17 | dir=$1 # results/CPU/ 18 | cpu=$2 # sk hw cl al 19 | 20 | # bench_crystals_ref.out -> cref_op_cpu_cc 21 | # bench_crystals_avx2.out -> cavx_op_cpu_cc 22 | # bench_jasmin_ref.out -> jref_op_cpu_cc 23 | # bench_jasmin_avx2.out -> jopt_op_cpu_cc 24 | # bench_jasmin_avx2v.out -> javx_op_cpu_cc 25 | 26 | get() 27 | { 28 | file=$1; tag=$2; cpu=$3; 29 | 30 | if ! [ -f $file ] 31 | then 32 | line="XXX,XXX,XXX" 33 | else 34 | line=$(sed -n '6,+0p' $file) # change line here if needed 35 | fi 36 | 37 | gen=$(cut -d, -f1 < <(cat <<< "$line")) 38 | enc=$(cut -d, -f2 < <(cat <<< "$line")) 39 | dec=$(cut -d, -f3 < <(cat <<< "$line")) 40 | 41 | echo "\newcommand{\\${tag}gen${cpu}cc}{${gen}}" 42 | echo "\newcommand{\\${tag}enc${cpu}cc}{${enc}}" 43 | echo "\newcommand{\\${tag}dec${cpu}cc}{${dec}}" 44 | } 45 | 46 | for t in crystals_ref,cref crystals_avx2,cavx jasmin_ref,jref jasmin_avx2,jopt jasmin_avx2v,javx libjade_ref,lref libjade_avx2,lavx; 47 | do IFS=',' 48 | set -- $t 49 | get "${dir}/bench_${1}.out" "${2}" "${cpu}" 50 | done 51 | -------------------------------------------------------------------------------- /code/jasmin/1024/ref/Makefile: -------------------------------------------------------------------------------- 1 | # -*- Makefile -*- 2 | 3 | -include ../../../Makefile.conf 4 | 5 | CKP := ../../../kyber/ref 6 | CC ?= /usr/bin/gcc 7 | CFLAGS := -Wall -Wextra -g -O3 -fomit-frame-pointer -Wno-implicit-function-declaration -D KYBER_K=4 8 | JFLAGS := ${JADDFLAGS} 9 | OS := $(shell uname -s) 10 | 11 | .SECONDARY: jkem.s 12 | 13 | default: test speed 14 | 15 | test: test/test_kem 16 | ./test/test_kem 17 | 18 | speed: test/speed_kem 19 | 20 | JINC = kem.jinc params.jinc ../../common/ref/params.jinc ../../common/ref/zetas.jinc ../../common/ref/verify.jinc ../../common/ref/reduce.jinc \ 21 | ../../common/ref/polyvec.jinc polyvec.jinc ../../common/ref/poly.jinc poly.jinc ../../common/ref/indcpa.jinc ../../common/ref/gen_matrix.jinc ../../common/ref/mlkem_keccak_ref.jinc 22 | 23 | 24 | SOURCES = $(CKP)/verify.c $(CKP)/randombytes.c $(CKP)/poly.c $(CKP)/polyvec.c \ 25 | $(CKP)/cbd.c $(CKP)/fips202.c $(CKP)/ntt.c $(CKP)/reduce.c \ 26 | $(CKP)/symmetric-shake.c $(CKP)/indcpa.c $(CKP)/kem.c\ 27 | $(JASMIN)/syscall/jasmin_syscall.c 28 | 29 | 30 | test/test_kem: test/test_kem.c $(SOURCES) jkem.s 31 | $(CC) $(CFLAGS) -o $@ $(SOURCES) jkem.s $< 32 | 33 | 34 | test/speed_kem: test/speed_kem.c $(JINC) $(SOURCES) jkem.s 35 | $(CC) $(CFLAGS) -o $@ $(SOURCES) jkem.s $< 36 | 37 | jkem.s: jkem.jazz $(JINC) 38 | $(JASMINC) -o $@ $(JFLAGS) jkem.jazz 39 | 40 | 41 | .PHONY: ct clean 42 | 43 | ct: 44 | $(JASMINCT) jkem.jazz 45 | 46 | sct: 47 | $(JASMINCT) --sct jkem.jazz 48 | 49 | clean: 50 | -rm -f *.s 51 | -rm -f jkem.o 52 | -rm -f test/test_kem 53 | -rm -f test/speed_kem 54 | ifeq ($(OS),Darwin) 55 | -rm -rf test/*.dSYM 56 | endif 57 | -------------------------------------------------------------------------------- /bench/table/table.tex: -------------------------------------------------------------------------------- 1 | \documentclass[12pt]{article} 2 | \usepackage[utf8]{inputenc} 3 | \usepackage[T1]{fontenc} 4 | 5 | \input{macros} 6 | 7 | \begin{document} 8 | \begin{table} 9 | \caption{Cycle counts for C, C/assembly, and our jasmin implementations of Kyber-768.} 10 | \label{tab:benchmarks} 11 | \begin{center} 12 | \begin{tabular}{lp{2mm}lp{1mm}lp{1mm}} 13 | \hline 14 | \textbf{Implementation} && \textbf{operation} && \textbf{Unknown} \\ 15 | \hline 16 | C ref && keygen && \crefgencpucc \\ 17 | && encaps && \crefenccpucc \\ 18 | && decaps && \crefdeccpucc \\ 19 | \\ 20 | jasmin ref && keygen && \jrefgencpucc \\ 21 | && encaps && \jrefenccpucc \\ 22 | && decaps && \jrefdeccpucc \\ 23 | \hline 24 | C/asm AVX2 && keygen && \cavxgencpucc \\ 25 | && encaps && \cavxenccpucc \\ 26 | && decaps && \cavxdeccpucc \\ 27 | \\ 28 | jasmin AVX2 && keygen && \javxgencpucc \\ 29 | (fully verified) && encaps && \javxenccpucc \\ 30 | && decaps && \javxdeccpucc \\ 31 | \\ 32 | jasmin AVX2 && keygen && \joptgencpucc \\ 33 | (fully optimized) && encaps && \joptenccpucc \\ 34 | && decaps && \joptdeccpucc \\ 35 | \hline 36 | \end{tabular} 37 | \end{center} 38 | \end{table} 39 | \end{document} 40 | -------------------------------------------------------------------------------- /bench/test/print.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "print.h" 5 | 6 | void print_info(const char *algname, const char *arch, const char *impl) 7 | { 8 | printf("// {\"%s\" : { architecture : \"%s\", implementation : \"%s\"} }", 9 | algname, arch, impl); 10 | printf("\n"); 11 | } 12 | 13 | void print_u8(const uint8_t *a, size_t l) 14 | { 15 | size_t i; 16 | 17 | if(l == 0) 18 | { return; } 19 | 20 | printf("{\n "); 21 | for(i=0; i<(l-1); i++) 22 | { printf("0x%02" PRIx8 ", ", a[i]); 23 | if((i+1)%16 == 0) 24 | { printf("\n "); } 25 | } 26 | 27 | printf("0x%02" PRIx8 "\n};\n", a[i]); 28 | return; 29 | } 30 | 31 | void print_u8s(const uint8_t *a, size_t l) 32 | { 33 | size_t i; 34 | 35 | if(l == 0) 36 | { return; } 37 | 38 | for(i=0; i