主要代码基于dCTIDH.
代码需要 ADX (ADOX and ADCX) 指令,请确认您的 cpu 包含上述指令
# 确认可以使用 ADX 指令
cat /proc/cpuinfo | grep adx
# 仅第一次需要
mkdir build && cd build
cmake ..
# 开启恒定时间测试(默认关闭)
cmake -DENABLE_CT_TESTING=ON ..
# Building
make构建三个可执行文件
- 2047m1l226
- 2047m4l205
- 2047m6l194
我们主要分析了 2047m1l226
该项目包含自动化基准测试
# Run benchmarks for a specific parameter set
make benchmark-ctidh-2047m1l226
# Run all benchmarks and display a summary
make benchmark
# Show just the summary of previously run benchmarks
make benchmark-summary默认情况下,基准测试会运行 100 次迭代,这将花费几个小时。您可以通过设置 SECSIDH_BENCHMARK_RUNS 选项来更改这一点:
# Configure with 5 benchmark runs
cmake -DSECSIDH_BENCHMARK_RUNS=5 ..
基准测试结果已保存到构建目录中的文件:
- 原始日志:
benchmark-ctidh-<param_set>.log - 分析结果:
benchmark-ctidh-<param_set>-analysis.log
您也可以使用可执行文件选项手动运行基准测试:
在 build 目录下:
usage:
./main/ctidh-2047m1l226.main # for a quick test
./main//ctidh-2047m1l226.main -bact [number of runs] # run benchmark for the action
./main//ctidh-2047m1l226.main -bfp [number of runs] # run benchmark for fp arithmetic每个版本都包含用于该操作的基准测试工具,以及可与 -bact 或 -bfp 一起使用的有限域算术。
可以使用 analyze_bench.py 脚本来分析动作基准:
./main/ctidh-2047m1l226.main -bact 100 > bench_action.out
python3 ../analyze_bench.py < bench_action.out analyze_bench.py 脚本支持不同的输出格式:
# 默认网格格式
python3 ../analyze_bench.py < bench_action.out
# CSV 格式
python3 ../analyze_bench.py --format=csv < bench_action.out
# LaTeX 格式
python3 ../analyze_bench.py --format=latex < bench_action.out如果 DENABLE_CT_TESTING=ON,则会为所有版本创建可执行文件的 checkct 版本,可以使用 valgrind 进行验证。
在 build 目录下:
cmake -DENABLE_CT_TESTING=ON ..
make # 所有版本
make checkct-2047m1l226.main # 对于选定的版本
make checkct-2047m4l205.main
make checkct-2047m6l194.main
# 运行 'valgrind' 测试
valgrind ./main/checkct-2047m1l226.main
valgrind ./main/checkct-2047m4l205.main
valgrind ./main/checkct-2047m6l194.main我们先大步搜索最佳范围,然后使用贪婪算法来寻找最优配置。脚本会探索关键空间,用于 ell_i 在 190 到 226 之间、批次数在 15 到 20 之间的质数。我们建议分批进行搜索,因为这可能需要较长时间。
# 初步搜索
cd scripts/greedy/
./rough_greedy.py
#精细搜索
cd scripts/greedy/
./new_wombats.py要为新的参数集添加新素数所需的文件,请使用 scripts/new_prime 中的脚本
cd scripts/new_primes/genFiles
./autogen
cd scripts/new_primes/genSteps
./autogen
# 生成文件移至common如果您需要使用在大数乘法中使用adx(adox、adcx),请将 uintbig2047m1l226.s 最后的mul修改为15次adox + adcx循环