diff --git a/README.md b/README.md index 99f62e1..f6ba2ae 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,9 @@ NIST FIPS 204 (ML-DSA) standard compliant, C++20, fully `constexpr`, header-only library +> [!NOTE] +> `constexpr` ? Yes, you can compile-time execute keygen, sign and verify. But why? I don't know, some usecase might arise. + > [!CAUTION] > This ML-DSA implementation is conformant with ML-DSA standard @ . I also try to make it timing leakage free, but be informed that this implementation is not yet audited. **If you consider using it in production, be careful !** @@ -19,11 +22,11 @@ Verify | Public Key, N(>=) bytes message and an optional context (of max 255 -by Here I'm maintaining `ml-dsa` - a C++20, header-only, fully `constexpr` library, implementing NIST FIPS 204 ML-DSA standard, supporting ML-DSA-{44, 65, 87} parameter sets, as defined in table 1 of ML-DSA standard. For more details on using this library, see [below](#usage). It shows following performance characteristics on desktop and server grade CPUs. -ML-DSA-65 Algorithm | Time taken on "12th Gen Intel(R) Core(TM) i7-1260P" | Time taken on "AWS EC2 Instance c8g.large" ---- | --: | --: -keygen | 92.9 us | 126.2 us -sign | 160.5 us | 231.7 us -verify | 94.8 us | 134.4 us +ML-DSA-65 Algorithm | `(a)` Time taken on "12th Gen Intel(R) Core(TM) i7-1260P" | `(b)` Time taken on "AWS EC2 Instance c8g.large" | Ratio `(a / b)` +--- | --: | --: | --: +keygen | 92.9 us | 126.2 us | 0.74 +sign | 604 us | 879 us | 0.69 +verify | 94.8 us | 134.4 us | 0.71 > [!NOTE] > All numbers in the table above represent the median time required to execute a specific algorithm, except for signing. In the case of signing, the number represents the minimum time required to sign a 32 -bytes message. To understand why this is done for signing, please refer to [this](#benchmarking) section. @@ -122,7 +125,7 @@ PASSED TESTS (37/37): ## Benchmarking > [!WARNING] -> Relying only on average timing measurement for understanding performance characteristics of ML-DSA `sign` algorithm may not be a good idea, given that it's a post-quantum digital signature scheme of **"Fiat-Shamir with Aborts"** paradigm - simply put, during signing procedure it may need to abort and restart again, multiple times, based on what message is being signed or what random seed is being used for default **hedged** signing. So it's a better idea to also compute other statistics such as minimum, maximum and median when timing execution of `sign` procedure. In following benchmark results, you'll see such statistics demonstrating broader performance characteristics of ML-DSA `sign` procedure for various parameter sets. +> Relying only on average timing measurement for understanding performance characteristics of ML-DSA `sign` algorithm may not be a good idea, given that it's a post-quantum digital signature scheme of **"Fiat-Shamir with Aborts"** paradigm - simply put, during signing procedure it may need to abort and restart again, multiple times, based on what message is being signed or what random seed is being used for default **hedged** signing. So it's a better idea to also compute other statistics such as minimum, maximum and median when timing execution of `sign` procedure. In following benchmark results, you'll see such statistics demonstrating broader performance characteristics of ML-DSA `sign` procedure for various parameter sets. Also to easily compare performance benchmarking result of sign function across different configurations, we use a fixed seed to initialize RandomShake CSPRNG. This gives us deterministic result. Benchmarking key generation, signing and verification algorithms for various instantiations of ML-DSA can be done, by running following command. @@ -136,11 +139,11 @@ make perf -j # If you have built google-benchmark library with libPFM supp ### On 12th Gen Intel(R) Core(TM) i7-1260P -Benchmark result in JSON format @ [bench_result_on_Linux_6.11.0-19-generic_x86_64_with_g++_14.json](./bench_result_on_Linux_6.11.0-19-generic_x86_64_with_g++_14.json). +Benchmark result in JSON format @ [bench_result_at_commit_25f3161_on_Linux_6.17.0-5-generic_x86_64_with_g++_15.json](./bench_result_at_commit_25f3161_on_Linux_6.17.0-5-generic_x86_64_with_g++_15.json). ### On AWS EC2 Instance `c8g.large` i.e. AWS Graviton4 -Benchmark result in JSON format @ [bench_result_on_Linux_6.8.0-1021-aws_aarch64_with_g++_13.json](./bench_result_on_Linux_6.8.0-1021-aws_aarch64_with_g++_13.json). +Benchmark result in JSON format @ [bench_result_at_commit_25f3161_on_Linux_6.14.0-1011-aws_aarch64_with_g++_13.json](./bench_result_at_commit_25f3161_on_Linux_6.14.0-1011-aws_aarch64_with_g++_13.json). More about this EC2 instance @ . diff --git a/bench_result_on_Linux_6.8.0-1021-aws_aarch64_with_g++_13.json b/bench_result_at_commit_25f3161_on_Linux_6.14.0-1011-aws_aarch64_with_g++_13.json similarity index 72% rename from bench_result_on_Linux_6.8.0-1021-aws_aarch64_with_g++_13.json rename to bench_result_at_commit_25f3161_on_Linux_6.14.0-1011-aws_aarch64_with_g++_13.json index c8591ab..2450d92 100644 --- a/bench_result_on_Linux_6.8.0-1021-aws_aarch64_with_g++_13.json +++ b/bench_result_at_commit_25f3161_on_Linux_6.14.0-1011-aws_aarch64_with_g++_13.json @@ -1,11 +1,12 @@ { "context": { - "date": "2025-03-07T17:05:16+00:00", - "host_name": "ip-172-31-47-179", + "date": "2025-10-23T14:59:22+00:00", + "host_name": "ip-172-31-45-12", "executable": "./build/benchmark/bench.out", "num_cpus": 2, "mhz_per_cpu": 2000, "cpu_scaling_enabled": false, + "aslr_enabled": false, "caches": [ { "type": "Data", @@ -32,875 +33,875 @@ "num_sharing": 2 } ], - "load_avg": [2.87256,3.50342,1.96729], - "library_version": "v1.9.1-46-g571c235e", + "load_avg": [2.0293,0.62207,0.213867], + "library_version": "v1.9.4-62-g8498a2a0", "library_build_type": "release", "json_schema_version": 1 }, "benchmarks": [ { - "name": "ml_dsa_87_verify/32_mean", - "family_index": 8, + "name": "ml_dsa_87_sign/32_mean", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.1504543364055502e+02, - "cpu_time": 2.1504761474654396e+02, + "real_time": 6.0336941939656072e+02, + "cpu_time": 6.0336551379310481e+02, "time_unit": "us", - "items_per_second": 4.6501332396662392e+03 + "items_per_second": 1.6573702159459133e+03 }, { - "name": "ml_dsa_87_verify/32_median", - "family_index": 8, + "name": "ml_dsa_87_sign/32_median", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.1504355990788298e+02, - "cpu_time": 2.1505014055299665e+02, + "real_time": 6.0334226077582912e+02, + "cpu_time": 6.0334803879310448e+02, "time_unit": "us", - "items_per_second": 4.6500783388881136e+03 + "items_per_second": 1.6574181667478733e+03 }, { - "name": "ml_dsa_87_verify/32_stddev", - "family_index": 8, + "name": "ml_dsa_87_sign/32_stddev", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 6.0458450719624898e-02, - "cpu_time": 5.6187340090515271e-02, + "real_time": 1.3586770727156319e-01, + "cpu_time": 1.1357492750193030e-01, "time_unit": "us", - "items_per_second": 1.2150591160265127e+00 + "items_per_second": 3.1197804210332025e-01 }, { - "name": "ml_dsa_87_verify/32_cv", - "family_index": 8, + "name": "ml_dsa_87_sign/32_cv", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 2.8114268550654380e-04, - "cpu_time": 2.6127860174937493e-04, + "real_time": 2.2518162655218193e-04, + "cpu_time": 1.8823569611715551e-04, "time_unit": "us", - "items_per_second": 2.6129554862254289e-04 + "items_per_second": 1.8823678566304183e-04 }, { - "name": "ml_dsa_87_verify/32_min", - "family_index": 8, + "name": "ml_dsa_87_sign/32_min", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.1495215975417901e+02, - "cpu_time": 2.1495880645161009e+02, + "real_time": 6.0315814655170198e+02, + "cpu_time": 6.0318102155172267e+02, "time_unit": "us", - "items_per_second": 4.6484971408743222e+03 + "items_per_second": 1.6569286754411414e+03 }, { - "name": "ml_dsa_87_verify/32_max", - "family_index": 8, + "name": "ml_dsa_87_sign/32_max", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.1512651766514264e+02, - "cpu_time": 2.1512329032258216e+02, + "real_time": 6.0364113793112972e+02, + "cpu_time": 6.0352628017241580e+02, "time_unit": "us", - "items_per_second": 4.6520541144943163e+03 + "items_per_second": 1.6578770953824685e+03 }, { - "name": "ml_dsa_87_keygen_mean", - "family_index": 6, + "name": "ml_dsa_44_keygen_mean", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.0592463534610835e+02, - "cpu_time": 2.0559812857142896e+02, + "real_time": 7.7185411485363772e+01, + "cpu_time": 7.7186115295416514e+01, "time_unit": "us", - "items_per_second": 4.8639117830261594e+03 + "items_per_second": 1.2955967561357611e+04 }, { - "name": "ml_dsa_87_keygen_median", - "family_index": 6, + "name": "ml_dsa_44_keygen_median", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.0553081369668979e+02, - "cpu_time": 2.0553429970544911e+02, + "real_time": 7.7256728050796099e+01, + "cpu_time": 7.7258344008835053e+01, "time_unit": "us", - "items_per_second": 4.8653690925422688e+03 + "items_per_second": 1.2943586128064706e+04 }, { - "name": "ml_dsa_87_keygen_stddev", - "family_index": 6, + "name": "ml_dsa_44_keygen_stddev", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.2661684776995223e+00, - "cpu_time": 7.2371922284287404e-01, + "real_time": 3.6875278995733690e-01, + "cpu_time": 3.6917743965163141e-01, "time_unit": "us", - "items_per_second": 1.7134010176387097e+01 + "items_per_second": 6.2620007553663548e+01 }, { - "name": "ml_dsa_87_keygen_cv", - "family_index": 6, + "name": "ml_dsa_44_keygen_cv", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 6.1486984088688868e-03, - "cpu_time": 3.5200671711923645e-03, + "real_time": 4.7774933483027597e-03, + "cpu_time": 4.7829514186414042e-03, "time_unit": "us", - "items_per_second": 3.5226811136214527e-03 + "items_per_second": 4.8332945615295921e-03 }, { - "name": "ml_dsa_87_keygen_min", - "family_index": 6, + "name": "ml_dsa_44_keygen_min", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.0433777908689370e+02, - "cpu_time": 2.0433990868924840e+02, + "real_time": 7.6177714522364539e+01, + "cpu_time": 7.6177232468249173e+01, "time_unit": "us", - "items_per_second": 4.8402347917345687e+03 + "items_per_second": 1.2914949906004229e+04 }, { - "name": "ml_dsa_87_keygen_max", - "family_index": 6, + "name": "ml_dsa_44_keygen_max", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.0841384977907137e+02, - "cpu_time": 2.0660154786450667e+02, + "real_time": 7.7429025400325727e+01, + "cpu_time": 7.7429646051905678e+01, "time_unit": "us", - "items_per_second": 4.8938066304059976e+03 + "items_per_second": 1.3127281834724072e+04 }, { - "name": "ml_dsa_87_sign/32_mean", - "family_index": 7, + "name": "ml_dsa_87_verify/32_mean", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 6.1833207037048055e+02, - "cpu_time": 6.1736459506172696e+02, + "real_time": 2.1492584700461254e+02, + "cpu_time": 2.1492619969278070e+02, "time_unit": "us", - "items_per_second": 2.0411120832996849e+03 + "items_per_second": 4.6527600901971746e+03 }, { - "name": "ml_dsa_87_sign/32_median", - "family_index": 7, + "name": "ml_dsa_87_verify/32_median", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 4.7262315432112985e+02, - "cpu_time": 4.7263848148147724e+02, + "real_time": 2.1490194393242186e+02, + "cpu_time": 2.1490782872503888e+02, "time_unit": "us", - "items_per_second": 2.1157820337930452e+03 + "items_per_second": 4.6531576167687926e+03 }, { - "name": "ml_dsa_87_sign/32_stddev", - "family_index": 7, + "name": "ml_dsa_87_verify/32_stddev", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 3.8591977258053834e+02, - "cpu_time": 3.8409211158717392e+02, + "real_time": 5.1946657687411565e-02, + "cpu_time": 4.7670059457559651e-02, "time_unit": "us", - "items_per_second": 8.0533972201491713e+02 + "items_per_second": 1.0318221091569948e+00 }, { - "name": "ml_dsa_87_sign/32_cv", - "family_index": 7, + "name": "ml_dsa_87_verify/32_cv", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 6.2413028706292106e-01, - "cpu_time": 6.2214794087563541e-01, + "real_time": 2.4169572162391776e-04, + "cpu_time": 2.2179734032286462e-04, "time_unit": "us", - "items_per_second": 3.9455928393358775e-01 + "items_per_second": 2.2176559486291250e-04 }, { - "name": "ml_dsa_87_sign/32_min", - "family_index": 7, + "name": "ml_dsa_87_verify/32_min", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 3.4077987654346077e+02, - "cpu_time": 3.4079017283951254e+02, + "real_time": 2.1486838402457516e+02, + "cpu_time": 2.1487417511520934e+02, "time_unit": "us", - "items_per_second": 7.1848191477239800e+02 + "items_per_second": 4.6508063833867482e+03 }, { - "name": "ml_dsa_87_sign/32_max", - "family_index": 7, + "name": "ml_dsa_87_verify/32_max", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.3918012839503210e+03, - "cpu_time": 1.3918234814814812e+03, + "real_time": 2.1502492012289798e+02, + "cpu_time": 2.1501647619047804e+02, "time_unit": "us", - "items_per_second": 2.9343569143084637e+03 + "items_per_second": 4.6538863940435322e+03 }, { - "name": "ml_dsa_44_sign/32_mean", - "family_index": 1, + "name": "ml_dsa_65_keygen_mean", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 4.2654093093748452e+02, - "cpu_time": 4.2603722031250027e+02, + "real_time": 1.2623779648331981e+02, + "cpu_time": 1.2620894283137918e+02, "time_unit": "us", - "items_per_second": 2.9884693828378195e+03 + "items_per_second": 7.9233753132419952e+03 }, { - "name": "ml_dsa_44_sign/32_median", - "family_index": 1, + "name": "ml_dsa_65_keygen_median", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 3.5253817578126956e+02, - "cpu_time": 3.5254227187500317e+02, + "real_time": 1.2626205049594039e+02, + "cpu_time": 1.2625278539224480e+02, "time_unit": "us", - "items_per_second": 2.8365397283907887e+03 + "items_per_second": 7.9206173469271034e+03 }, { - "name": "ml_dsa_44_sign/32_stddev", - "family_index": 1, + "name": "ml_dsa_65_keygen_stddev", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.2902752353168307e+02, - "cpu_time": 2.2826545780514880e+02, + "real_time": 1.2476275722847871e-01, + "cpu_time": 1.2059007510800332e-01, "time_unit": "us", - "items_per_second": 1.6039048926215701e+03 + "items_per_second": 7.5733230315783091e+00 }, { - "name": "ml_dsa_44_sign/32_cv", - "family_index": 1, + "name": "ml_dsa_65_keygen_cv", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 5.3694149123815316e-01, - "cpu_time": 5.3578759536013076e-01, + "real_time": 9.8831539130171675e-04, + "cpu_time": 9.5547963878532039e-04, "time_unit": "us", - "items_per_second": 5.3669778309674987e-01 + "items_per_second": 9.5582030790859307e-04 }, { - "name": "ml_dsa_44_sign/32_min", - "family_index": 1, + "name": "ml_dsa_65_keygen_min", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.5198933437510220e+02, - "cpu_time": 1.5199412187499871e+02, + "real_time": 1.2600594409378689e+02, + "cpu_time": 1.2600935617673531e+02, "time_unit": "us", - "items_per_second": 1.0479769754218637e+03 + "items_per_second": 7.9120747471181094e+03 }, { - "name": "ml_dsa_44_sign/32_max", - "family_index": 1, + "name": "ml_dsa_65_keygen_max", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 9.5651026874996603e+02, - "cpu_time": 9.5421943749999787e+02, + "real_time": 1.2638563660954654e+02, + "cpu_time": 1.2638909918845744e+02, "time_unit": "us", - "items_per_second": 6.5792017984906588e+03 + "items_per_second": 7.9359186519248860e+03 }, { - "name": "ml_dsa_44_keygen_mean", - "family_index": 0, + "name": "ml_dsa_44_verify/32_mean", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 7.7331584517902996e+01, - "cpu_time": 7.7333546776859436e+01, + "real_time": 8.3453793381037656e+01, + "cpu_time": 8.3453013476445676e+01, "time_unit": "us", - "items_per_second": 1.2931279201723777e+04 + "items_per_second": 1.1982791680020724e+04 }, { - "name": "ml_dsa_44_keygen_median", - "family_index": 0, + "name": "ml_dsa_44_verify/32_median", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 7.7487873829200666e+01, - "cpu_time": 7.7490310743802212e+01, + "real_time": 8.3449688729879497e+01, + "cpu_time": 8.3450784138341248e+01, "time_unit": "us", - "items_per_second": 1.2904841842492950e+04 + "items_per_second": 1.1983111208335169e+04 }, { - "name": "ml_dsa_44_keygen_stddev", - "family_index": 0, + "name": "ml_dsa_44_verify/32_stddev", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 3.7816626901106409e-01, - "cpu_time": 3.7804655941335569e-01, + "real_time": 2.4661280681112709e-02, + "cpu_time": 2.4181310403720700e-02, "time_unit": "us", - "items_per_second": 6.3734835473401731e+01 + "items_per_second": 3.4718370431706025e+00 }, { - "name": "ml_dsa_44_keygen_cv", - "family_index": 0, + "name": "ml_dsa_44_verify/32_cv", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 4.8901916515562277e-03, - "cpu_time": 4.8885196033253550e-03, + "real_time": 2.9550820498372020e-04, + "cpu_time": 2.8975958322398734e-04, "time_unit": "us", - "items_per_second": 4.9287340006474913e-03 + "items_per_second": 2.8973524165986319e-04 }, { - "name": "ml_dsa_44_keygen_min", - "family_index": 0, + "name": "ml_dsa_44_verify/32_min", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 7.6380620385641649e+01, - "cpu_time": 7.6383076584022007e+01, + "real_time": 8.3424719141317468e+01, + "cpu_time": 8.3424131782945878e+01, "time_unit": "us", - "items_per_second": 1.2887715744621686e+04 + "items_per_second": 1.1976792874829714e+04 }, { - "name": "ml_dsa_44_keygen_max", - "family_index": 0, + "name": "ml_dsa_44_verify/32_max", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 7.7591910192836309e+01, - "cpu_time": 7.7593269421489296e+01, + "real_time": 8.3492545020866430e+01, + "cpu_time": 8.3494806201548997e+01, "time_unit": "us", - "items_per_second": 1.3091905232437084e+04 + "items_per_second": 1.1986939254001642e+04 }, { - "name": "ml_dsa_65_sign/32_mean", - "family_index": 4, + "name": "ml_dsa_65_verify/32_mean", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 7.0767819601990561e+02, - "cpu_time": 7.0652294328358244e+02, + "real_time": 1.3330079762130939e+02, + "cpu_time": 1.3330213939105630e+02, "time_unit": "us", - "items_per_second": 2.0205509313956868e+03 + "items_per_second": 7.5017592885666518e+03 }, { - "name": "ml_dsa_65_sign/32_median", - "family_index": 4, + "name": "ml_dsa_65_verify/32_median", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 6.9858181094529607e+02, - "cpu_time": 6.9736653316749630e+02, + "real_time": 1.3331325689818880e+02, + "cpu_time": 1.3331678924833474e+02, "time_unit": "us", - "items_per_second": 1.5437953646390370e+03 + "items_per_second": 7.5009308329614651e+03 }, { - "name": "ml_dsa_65_sign/32_stddev", - "family_index": 4, + "name": "ml_dsa_65_verify/32_stddev", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 3.8674056075220449e+02, - "cpu_time": 3.8591704463718327e+02, + "real_time": 1.0424016350812162e-01, + "cpu_time": 1.0535496699700383e-01, "time_unit": "us", - "items_per_second": 1.3494864438613949e+03 + "items_per_second": 5.9308801009435221e+00 }, { - "name": "ml_dsa_65_sign/32_cv", - "family_index": 4, + "name": "ml_dsa_65_verify/32_cv", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 5.4649212442504902e-01, - "cpu_time": 5.4622011684946070e-01, + "real_time": 7.8199204632109303e-04, + "cpu_time": 7.9034715780467422e-04, "time_unit": "us", - "items_per_second": 6.6788043938553088e-01 + "items_per_second": 7.9059856132450304e-04 }, { - "name": "ml_dsa_65_sign/32_min", - "family_index": 4, + "name": "ml_dsa_65_verify/32_min", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.3170114759545754e+02, - "cpu_time": 2.3170058043117260e+02, + "real_time": 1.3308954804946740e+02, + "cpu_time": 1.3309315318744049e+02, "time_unit": "us", - "items_per_second": 8.6023711107806446e+02 + "items_per_second": 7.4937019926694720e+03 }, { - "name": "ml_dsa_65_sign/32_max", - "family_index": 4, + "name": "ml_dsa_65_verify/32_max", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.1648121691542049e+03, - "cpu_time": 1.1624701923714756e+03, + "real_time": 1.3344022549952027e+02, + "cpu_time": 1.3344539200761187e+02, "time_unit": "us", - "items_per_second": 4.3159149542875366e+03 + "items_per_second": 7.5135345136173855e+03 }, { - "name": "ml_dsa_65_verify/32_mean", - "family_index": 5, + "name": "ml_dsa_44_sign/32_mean", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.3447273407122080e+02, - "cpu_time": 1.3447139605389731e+02, + "real_time": 2.1849818127924254e+02, + "cpu_time": 2.1849674914196603e+02, "time_unit": "us", - "items_per_second": 7.4365339005059159e+03 + "items_per_second": 4.5767271706316324e+03 }, { - "name": "ml_dsa_65_verify/32_median", - "family_index": 5, + "name": "ml_dsa_44_sign/32_median", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.3441935418665844e+02, - "cpu_time": 1.3441937728585100e+02, + "real_time": 2.1850445865831944e+02, + "cpu_time": 2.1850330967238551e+02, "time_unit": "us", - "items_per_second": 7.4394036483540494e+03 + "items_per_second": 4.5765897161896482e+03 }, { - "name": "ml_dsa_65_verify/32_stddev", - "family_index": 5, + "name": "ml_dsa_44_sign/32_stddev", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.4984441898005219e-01, - "cpu_time": 1.4839683906887141e-01, + "real_time": 2.4515610868220735e-02, + "cpu_time": 2.1224565063452525e-02, "time_unit": "us", - "items_per_second": 8.2017588720220029e+00 + "items_per_second": 4.4459592184585900e-01 }, { - "name": "ml_dsa_65_verify/32_cv", - "family_index": 5, + "name": "ml_dsa_44_sign/32_cv", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 1.1143107932994809e-03, - "cpu_time": 1.1035569156238453e-03, + "real_time": 1.1220052599380484e-04, + "cpu_time": 9.7139042785767408e-05, "time_unit": "us", - "items_per_second": 1.1029007574972565e-03 + "items_per_second": 9.7142762780089525e-05 }, { - "name": "ml_dsa_65_verify/32_min", - "family_index": 5, + "name": "ml_dsa_44_sign/32_min", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.3430266794997257e+02, - "cpu_time": 1.3429146198267529e+02, + "real_time": 2.1845452886113657e+02, + "cpu_time": 2.1845726053042154e+02, "time_unit": "us", - "items_per_second": 7.4217498271710856e+03 + "items_per_second": 4.5760652810479223e+03 }, { - "name": "ml_dsa_65_verify/32_max", - "family_index": 5, + "name": "ml_dsa_44_sign/32_max", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.3475100096243878e+02, - "cpu_time": 1.3473911453320508e+02, + "real_time": 2.1853102496102468e+02, + "cpu_time": 2.1852835101403957e+02, "time_unit": "us", - "items_per_second": 7.4464897859925613e+03 + "items_per_second": 4.5775544267650648e+03 }, { - "name": "ml_dsa_65_keygen_mean", - "family_index": 3, + "name": "ml_dsa_65_sign/32_mean", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.2676854432432567e+02, - "cpu_time": 1.2629686801801768e+02, + "real_time": 8.7870148176099281e+02, + "cpu_time": 8.7869879308176064e+02, "time_unit": "us", - "items_per_second": 7.9178603320729999e+03 + "items_per_second": 1.1380464902976771e+03 }, { - "name": "ml_dsa_65_keygen_median", - "family_index": 3, + "name": "ml_dsa_65_sign/32_median", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.2625791891893543e+02, - "cpu_time": 1.2625659774774776e+02, + "real_time": 8.7864938679250156e+02, + "cpu_time": 8.7867335849056485e+02, "time_unit": "us", - "items_per_second": 7.9203781657200761e+03 + "items_per_second": 1.1380793459237914e+03 }, { - "name": "ml_dsa_65_keygen_stddev", - "family_index": 3, + "name": "ml_dsa_65_sign/32_stddev", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 9.1378739161238942e-01, - "cpu_time": 1.3054792495205450e-01, + "real_time": 2.5564632137914745e-01, + "cpu_time": 2.5785259473476363e-01, "time_unit": "us", - "items_per_second": 8.1821390366129538e+00 + "items_per_second": 3.3393543484245375e-01 }, { - "name": "ml_dsa_65_keygen_cv", - "family_index": 3, + "name": "ml_dsa_65_sign/32_cv", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 7.2083133594604372e-03, - "cpu_time": 1.0336592427092521e-03, + "real_time": 2.9093648603711289e-04, + "cpu_time": 2.9344821771112997e-04, "time_unit": "us", - "items_per_second": 1.0333775405799261e-03 + "items_per_second": 2.9342864082389708e-04 }, { - "name": "ml_dsa_65_keygen_min", - "family_index": 3, + "name": "ml_dsa_65_sign/32_min", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.2611815495494884e+02, - "cpu_time": 1.2612216486486406e+02, + "real_time": 8.7832113207547513e+02, + "cpu_time": 8.7829811320754538e+02, "time_unit": "us", - "items_per_second": 7.9062494321835602e+03 + "items_per_second": 1.1374206848478580e+03 }, { - "name": "ml_dsa_65_keygen_max", - "family_index": 3, + "name": "ml_dsa_65_sign/32_max", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.2857761351355506e+02, - "cpu_time": 1.2648222252252147e+02, + "real_time": 8.7915844025158822e+02, + "cpu_time": 8.7918218238993995e+02, "time_unit": "us", - "items_per_second": 7.9288204501680448e+03 + "items_per_second": 1.1385655792291291e+03 }, { - "name": "ml_dsa_44_verify/32_mean", - "family_index": 2, + "name": "ml_dsa_87_keygen_mean", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 8.4765506060620922e+01, - "cpu_time": 8.4767388363636442e+01, + "real_time": 2.0511920117301480e+02, + "cpu_time": 2.0511967287390024e+02, "time_unit": "us", - "items_per_second": 1.1796992551273062e+04 + "items_per_second": 4.8752531167356819e+03 }, { - "name": "ml_dsa_44_verify/32_median", - "family_index": 2, + "name": "ml_dsa_87_keygen_median", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 8.4757053333395092e+01, - "cpu_time": 8.4758534848484558e+01, + "real_time": 2.0485090469206156e+02, + "cpu_time": 2.0485482111437085e+02, "time_unit": "us", - "items_per_second": 1.1798221890553596e+04 + "items_per_second": 4.8815058372759158e+03 }, { - "name": "ml_dsa_44_verify/32_stddev", - "family_index": 2, + "name": "ml_dsa_87_keygen_stddev", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 4.4567982221682234e-02, - "cpu_time": 4.4611202338173284e-02, + "real_time": 6.9349438422740761e-01, + "cpu_time": 6.9520901249477007e-01, "time_unit": "us", - "items_per_second": 6.2046387687594624e+00 + "items_per_second": 1.6501105127021592e+01 }, { - "name": "ml_dsa_44_verify/32_cv", - "family_index": 2, + "name": "ml_dsa_87_keygen_cv", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 5.2577969852275741e-04, - "cpu_time": 5.2627789058215958e-04, + "real_time": 3.3809335267567472e-03, + "cpu_time": 3.3892849123358247e-03, "time_unit": "us", - "items_per_second": 5.2595089314436279e-04 + "items_per_second": 3.3846663407848289e-03 }, { - "name": "ml_dsa_44_verify/32_min", - "family_index": 2, + "name": "ml_dsa_87_keygen_min", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 8.4701604242430520e+01, - "cpu_time": 8.4704204242423870e+01, + "real_time": 2.0404242521993984e+02, + "cpu_time": 2.0404799413489297e+02, "time_unit": "us", - "items_per_second": 1.1782073540832596e+04 + "items_per_second": 4.8454474896511138e+03 }, { - "name": "ml_dsa_44_verify/32_max", - "family_index": 2, + "name": "ml_dsa_87_keygen_max", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 8.4872093333353504e+01, - "cpu_time": 8.4874703636362952e+01, + "real_time": 2.0637365102636869e+02, + "cpu_time": 2.0637928739002865e+02, "time_unit": "us", - "items_per_second": 1.1805789440368211e+04 + "items_per_second": 4.9008077939688810e+03 } ] } diff --git a/bench_result_on_Linux_6.11.0-19-generic_x86_64_with_g++_14.json b/bench_result_at_commit_25f3161_on_Linux_6.17.0-5-generic_x86_64_with_g++_15.json similarity index 67% rename from bench_result_on_Linux_6.11.0-19-generic_x86_64_with_g++_14.json rename to bench_result_at_commit_25f3161_on_Linux_6.17.0-5-generic_x86_64_with_g++_15.json index f9b8f22..6e56e80 100644 --- a/bench_result_on_Linux_6.11.0-19-generic_x86_64_with_g++_14.json +++ b/bench_result_at_commit_25f3161_on_Linux_6.17.0-5-generic_x86_64_with_g++_15.json @@ -1,10 +1,10 @@ { "context": { - "date": "2025-03-07T20:45:09+04:00", + "date": "2025-10-23T20:35:43+05:30", "host_name": "linux", "executable": "./build/benchmark/perf.out", "num_cpus": 16, - "mhz_per_cpu": 4700, + "mhz_per_cpu": 964, "cpu_scaling_enabled": false, "caches": [ { @@ -32,929 +32,929 @@ "num_sharing": 16 } ], - "load_avg": [1.19189,0.956055,0.794922], + "load_avg": [1.4917,0.76123,0.617188], "library_version": "v1.9.1-7-gf4f93b55", "library_build_type": "release", "json_schema_version": 1 }, "benchmarks": [ { - "name": "ml_dsa_65_sign/32_mean", - "family_index": 4, + "name": "ml_dsa_44_verify/32_mean", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 4.0766955850103153e+02, - "cpu_time": 4.0755151834451874e+02, + "real_time": 5.9533445177326108e+01, + "cpu_time": 5.9523611622806904e+01, "time_unit": "us", - "CYCLES": 1.7727467298657720e+06, - "items_per_second": 3.1442303655449018e+03 + "CYCLES": 2.4564336605263158e+05, + "items_per_second": 1.6815916674939308e+04 }, { - "name": "ml_dsa_65_sign/32_median", - "family_index": 4, + "name": "ml_dsa_44_verify/32_median", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 4.3781430592798341e+02, - "cpu_time": 4.3766777181208073e+02, + "real_time": 5.9255751757678297e+01, + "cpu_time": 5.9244925000000002e+01, "time_unit": "us", - "CYCLES": 1.9351024194630873e+06, - "items_per_second": 2.2996772220611483e+03 + "CYCLES": 2.4591859144736844e+05, + "items_per_second": 1.6887103208207162e+04 }, { - "name": "ml_dsa_65_sign/32_stddev", - "family_index": 4, + "name": "ml_dsa_44_verify/32_stddev", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.9822696341236275e+02, - "cpu_time": 1.9818976395270224e+02, + "real_time": 1.9345661173302138e+00, + "cpu_time": 1.9302254801495966e+00, "time_unit": "us", - "CYCLES": 8.3873923477730353e+05, - "items_per_second": 1.6845968765704934e+03 + "CYCLES": 8.1123903163867851e+02, + "items_per_second": 5.4349462859787229e+02 }, { - "name": "ml_dsa_65_sign/32_cv", - "family_index": 4, + "name": "ml_dsa_44_verify/32_cv", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 4.8624421244801169e-01, - "cpu_time": 4.8629376908655003e-01, + "real_time": 3.2495450440805533e-02, + "cpu_time": 3.2427895880733429e-02, "time_unit": "us", - "CYCLES": 4.7312975996340484e-01, - "items_per_second": 5.3577399895078903e-01 + "CYCLES": 3.3025073897776759e-03, + "items_per_second": 3.2320249862312897e-02 }, { - "name": "ml_dsa_65_sign/32_min", - "family_index": 4, + "name": "ml_dsa_44_verify/32_min", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.6053833892644212e+02, - "cpu_time": 1.6052624496644313e+02, + "real_time": 5.7516741671542263e+01, + "cpu_time": 5.7515697368421094e+01, "time_unit": "us", - "CYCLES": 6.9419812863534677e+05, - "items_per_second": 1.3391461924732650e+03 + "CYCLES": 2.4412887894736842e+05, + "items_per_second": 1.6122839176256242e+04 }, { - "name": "ml_dsa_65_sign/32_max", - "family_index": 4, + "name": "ml_dsa_44_verify/32_max", + "family_index": 2, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_sign/32", + "run_name": "ml_dsa_44_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 7.4685973042456976e+02, - "cpu_time": 7.4674445973154218e+02, + "real_time": 6.2024897373416209e+01, + "cpu_time": 6.2023815350876802e+01, "time_unit": "us", - "CYCLES": 3.1823270111856824e+06, - "items_per_second": 6.2295109451357503e+03 + "CYCLES": 2.4673618771929824e+05, + "items_per_second": 1.7386557857317202e+04 }, { - "name": "ml_dsa_87_keygen_mean", - "family_index": 6, + "name": "ml_dsa_65_sign/32_mean", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.5161751317095988e+02, - "cpu_time": 1.5156993141463437e+02, + "real_time": 6.1066608887631457e+02, + "cpu_time": 6.1060361733333195e+02, "time_unit": "us", - "CYCLES": 6.4893040068292676e+05, - "items_per_second": 6.6003993456331391e+03 + "CYCLES": 2.5752125293333335e+06, + "items_per_second": 1.6384522295284924e+03 }, { - "name": "ml_dsa_87_keygen_median", - "family_index": 6, + "name": "ml_dsa_65_sign/32_median", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.5234155902318179e+02, - "cpu_time": 1.5232033365853718e+02, + "real_time": 6.0351581332118553e+02, + "cpu_time": 6.0335251111110233e+02, "time_unit": "us", - "CYCLES": 6.4859253317073174e+05, - "items_per_second": 6.5651251801985873e+03 + "CYCLES": 2.5747171155555556e+06, + "items_per_second": 1.6574062342272596e+03 }, { - "name": "ml_dsa_87_keygen_stddev", - "family_index": 6, + "name": "ml_dsa_65_sign/32_stddev", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 3.2424912066871840e+00, - "cpu_time": 3.2803595434246011e+00, + "real_time": 1.3672321612974368e+01, + "cpu_time": 1.3692748210738802e+01, "time_unit": "us", - "CYCLES": 6.4722497384374437e+03, - "items_per_second": 1.4297783651217355e+02 + "CYCLES": 2.5585882689720765e+03, + "items_per_second": 3.6098993508901422e+01 }, { - "name": "ml_dsa_87_keygen_cv", - "family_index": 6, + "name": "ml_dsa_65_sign/32_cv", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 2.1385993866229934e-02, - "cpu_time": 2.1642548180950592e-02, + "real_time": 2.2389194130842897e-02, + "cpu_time": 2.2424937917234537e-02, "time_unit": "us", - "CYCLES": 9.9737194183322653e-03, - "items_per_second": 2.1661997861806420e-02 + "CYCLES": 9.9354450936693737e-04, + "items_per_second": 2.2032374736546245e-02 }, { - "name": "ml_dsa_87_keygen_min", - "family_index": 6, + "name": "ml_dsa_65_sign/32_min", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.4756858146184396e+02, - "cpu_time": 1.4738014439024238e+02, + "real_time": 5.9982947992264394e+02, + "cpu_time": 5.9977864888888951e+02, "time_unit": "us", - "CYCLES": 6.4013566634146345e+05, - "items_per_second": 6.4162009662811342e+03 + "CYCLES": 2.5708335733333332e+06, + "items_per_second": 1.5830409122570888e+03 }, { - "name": "ml_dsa_87_keygen_max", - "family_index": 6, + "name": "ml_dsa_65_sign/32_max", + "family_index": 4, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_keygen", + "run_name": "ml_dsa_65_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.5587695805063447e+02, - "cpu_time": 1.5585546731707277e+02, + "real_time": 6.3172680002430252e+02, + "cpu_time": 6.3169561333333263e+02, "time_unit": "us", - "CYCLES": 6.6091245560975606e+05, - "items_per_second": 6.7851745168069419e+03 + "CYCLES": 2.5788236311111110e+06, + "items_per_second": 1.6672817577826991e+03 }, { - "name": "ml_dsa_87_sign/32_mean", - "family_index": 7, + "name": "ml_dsa_65_verify/32_mean", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 4.6779476642768714e+02, - "cpu_time": 4.6773209071428573e+02, + "real_time": 9.6322342510835682e+01, + "cpu_time": 9.6315355359765135e+01, "time_unit": "us", - "CYCLES": 2.0323504857142859e+06, - "items_per_second": 2.3822019260288721e+03 + "CYCLES": 3.9825002738619671e+05, + "items_per_second": 1.0389342891050084e+04 }, { - "name": "ml_dsa_87_sign/32_median", - "family_index": 7, + "name": "ml_dsa_65_verify/32_median", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 3.7929195237839366e+02, - "cpu_time": 3.7925585238095368e+02, + "real_time": 9.5845063138946685e+01, + "cpu_time": 9.5837737151248319e+01, "time_unit": "us", - "CYCLES": 1.6474681785714286e+06, - "items_per_second": 2.6561451876713309e+03 + "CYCLES": 3.9832138876651984e+05, + "items_per_second": 1.0434723782291698e+04 }, { - "name": "ml_dsa_87_sign/32_stddev", - "family_index": 7, + "name": "ml_dsa_65_verify/32_stddev", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.8187577314264087e+02, - "cpu_time": 1.8186379740550871e+02, + "real_time": 2.6106839583464962e+00, + "cpu_time": 2.6083010460769902e+00, "time_unit": "us", - "CYCLES": 7.9865391735732357e+05, - "items_per_second": 7.1084415930359421e+02 + "CYCLES": 1.3353452863559789e+03, + "items_per_second": 2.7833847697388649e+02 }, { - "name": "ml_dsa_87_sign/32_cv", - "family_index": 7, + "name": "ml_dsa_65_verify/32_cv", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 3.8879394596808869e-01, - "cpu_time": 3.8882044019639500e-01, + "real_time": 2.7103617813829747e-02, + "cpu_time": 2.7080843302028496e-02, "time_unit": "us", - "CYCLES": 3.9297056436435973e-01, - "items_per_second": 2.9839794500064509e-01 + "CYCLES": 3.3530325035258535e-03, + "items_per_second": 2.6790768183583738e-02 }, { - "name": "ml_dsa_87_sign/32_min", - "family_index": 7, + "name": "ml_dsa_65_verify/32_min", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 3.2425674047165859e+02, - "cpu_time": 3.2422184761904708e+02, + "real_time": 9.3391294416420379e+01, + "cpu_time": 9.3389654919236236e+01, "time_unit": "us", - "CYCLES": 1.4490906880952381e+06, - "items_per_second": 1.2531713814206366e+03 + "CYCLES": 3.9599490528634359e+05, + "items_per_second": 9.9279090931250121e+03 }, { - "name": "ml_dsa_87_sign/32_max", - "family_index": 7, + "name": "ml_dsa_65_verify/32_max", + "family_index": 5, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_sign/32", + "run_name": "ml_dsa_65_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 7.9808182618719343e+02, - "cpu_time": 7.9797545238095586e+02, + "real_time": 1.0073044640422360e+02, + "cpu_time": 1.0072614390602055e+02, "time_unit": "us", - "CYCLES": 3.3898879190476192e+06, - "items_per_second": 3.0843078816051161e+03 + "CYCLES": 4.0045269603524229e+05, + "items_per_second": 1.0707824125325273e+04 }, { - "name": "ml_dsa_65_keygen_mean", - "family_index": 3, + "name": "ml_dsa_87_sign/32_mean", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 9.2802216808749421e+01, - "cpu_time": 9.2781132304661753e+01, + "real_time": 4.2954989024928511e+02, + "cpu_time": 4.2942325691823964e+02, "time_unit": "us", - "CYCLES": 3.9503702278397908e+05, - "items_per_second": 1.0782561465188623e+04 + "CYCLES": 1.8093147191823900e+06, + "items_per_second": 2.3298654511748368e+03 }, { - "name": "ml_dsa_65_keygen_median", - "family_index": 3, + "name": "ml_dsa_87_sign/32_median", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 9.2958802363163542e+01, - "cpu_time": 9.2950447800394358e+01, + "real_time": 4.2422784907148815e+02, + "cpu_time": 4.2417072955974845e+02, "time_unit": "us", - "CYCLES": 3.9528350984898233e+05, - "items_per_second": 1.0760559677486694e+04 + "CYCLES": 1.8094268836477986e+06, + "items_per_second": 2.3575426839625870e+03 }, { - "name": "ml_dsa_65_keygen_stddev", - "family_index": 3, + "name": "ml_dsa_87_sign/32_stddev", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.9861135086133668e+00, - "cpu_time": 1.9946436651133908e+00, + "real_time": 1.0290617621035185e+01, + "cpu_time": 1.0217512652344034e+01, "time_unit": "us", - "CYCLES": 1.7336767195341863e+03, - "items_per_second": 2.3301572916673206e+02 + "CYCLES": 1.8212933730679551e+03, + "items_per_second": 5.4203699619773232e+01 }, { - "name": "ml_dsa_65_keygen_cv", - "family_index": 3, + "name": "ml_dsa_87_sign/32_cv", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 2.1401573980785720e-02, - "cpu_time": 2.1498375968981041e-02, + "real_time": 2.3956746013980179e-02, + "cpu_time": 2.3793570766683942e-02, "time_unit": "us", - "CYCLES": 4.3886436448824324e-03, - "items_per_second": 2.1610424380052985e-02 + "CYCLES": 1.0066205474142044e-03, + "items_per_second": 2.3264733846515027e-02 }, { - "name": "ml_dsa_65_keygen_min", - "family_index": 3, + "name": "ml_dsa_87_sign/32_min", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 8.9553184503936620e+01, - "cpu_time": 8.9549623112277615e+01, + "real_time": 4.2150963202877404e+02, + "cpu_time": 4.2148543081760891e+02, "time_unit": "us", - "CYCLES": 3.9235796388706501e+05, - "items_per_second": 1.0507264659314294e+04 + "CYCLES": 1.8063092169811320e+06, + "items_per_second": 2.2270241906090919e+03 }, { - "name": "ml_dsa_65_keygen_max", - "family_index": 3, + "name": "ml_dsa_87_sign/32_max", + "family_index": 7, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_keygen", + "run_name": "ml_dsa_87_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 9.5185917267833162e+01, - "cpu_time": 9.5172248194351681e+01, + "real_time": 4.4907649377516162e+02, + "cpu_time": 4.4902969811320253e+02, "time_unit": "us", - "CYCLES": 3.9750301904136571e+05, - "items_per_second": 1.1166992838665516e+04 + "CYCLES": 1.8117957452830188e+06, + "items_per_second": 2.3725612485825968e+03 }, { - "name": "ml_dsa_65_verify/32_mean", - "family_index": 5, + "name": "ml_dsa_44_keygen_mean", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 9.5728421830660977e+01, - "cpu_time": 9.5717842169491476e+01, + "real_time": 5.3577745825971419e+01, + "cpu_time": 5.3573551879699252e+01, "time_unit": "us", - "CYCLES": 4.1289117518644070e+05, - "items_per_second": 1.0453612813760466e+04 + "CYCLES": 2.2417624416303920e+05, + "items_per_second": 1.8675382590102072e+04 }, { - "name": "ml_dsa_65_verify/32_median", - "family_index": 5, + "name": "ml_dsa_44_keygen_median", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 9.4863791865941863e+01, - "cpu_time": 9.4849688474576425e+01, + "real_time": 5.3607115158914404e+01, + "cpu_time": 5.3596523347843757e+01, "time_unit": "us", - "CYCLES": 4.1282507423728815e+05, - "items_per_second": 1.0543345129680863e+04 + "CYCLES": 2.2471654669568659e+05, + "items_per_second": 1.8658080197271502e+04 }, { - "name": "ml_dsa_65_verify/32_stddev", - "family_index": 5, + "name": "ml_dsa_44_keygen_stddev", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 2.4738478089519451e+00, - "cpu_time": 2.4722277653649058e+00, + "real_time": 1.2741522016622369e+00, + "cpu_time": 1.2735425174657287e+00, "time_unit": "us", - "CYCLES": 1.2096181297540329e+03, - "items_per_second": 2.6845099609392014e+02 + "CYCLES": 2.6907490879298184e+03, + "items_per_second": 4.4208105458410233e+02 }, { - "name": "ml_dsa_65_verify/32_cv", - "family_index": 5, + "name": "ml_dsa_44_keygen_cv", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 2.5842354461124033e-02, - "cpu_time": 2.5828285608311477e-02, + "real_time": 2.3781370082288922e-02, + "cpu_time": 2.3771851459942400e-02, "time_unit": "us", - "CYCLES": 2.9296294095116728e-03, - "items_per_second": 2.5680212274606960e-02 + "CYCLES": 1.2002828836640188e-02, + "items_per_second": 2.3671860667443822e-02 }, { - "name": "ml_dsa_65_verify/32_min", - "family_index": 5, + "name": "ml_dsa_44_keygen_min", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 9.2929379661346516e+01, - "cpu_time": 9.2913640000000342e+01, + "real_time": 5.1848867430481036e+01, + "cpu_time": 5.1844370795409347e+01, "time_unit": "us", - "CYCLES": 4.1108407389830507e+05, - "items_per_second": 1.0098209364976505e+04 + "CYCLES": 2.2059849109616145e+05, + "items_per_second": 1.7955116188501946e+04 }, { - "name": "ml_dsa_65_verify/32_max", - "family_index": 5, + "name": "ml_dsa_44_keygen_max", + "family_index": 0, "per_family_instance_index": 0, - "run_name": "ml_dsa_65_verify/32", + "run_name": "ml_dsa_44_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 9.9031481355669413e+01, - "cpu_time": 9.9027457627120256e+01, + "real_time": 5.5696671149760881e+01, + "cpu_time": 5.5694432132963719e+01, "time_unit": "us", - "CYCLES": 4.1467879728813557e+05, - "items_per_second": 1.0762682422085672e+04 + "CYCLES": 2.2916346616541353e+05, + "items_per_second": 1.9288497182196425e+04 }, { - "name": "ml_dsa_44_sign/32_mean", - "family_index": 1, + "name": "ml_dsa_65_keygen_mean", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.8502096288562058e+02, - "cpu_time": 1.8500563051546274e+02, + "real_time": 9.0752836036451157e+01, + "cpu_time": 9.0726988100067558e+01, "time_unit": "us", - "CYCLES": 7.9520323484536074e+05, - "items_per_second": 7.1316748480242422e+03 + "CYCLES": 3.7923280615280592e+05, + "items_per_second": 1.1033546029890780e+04 }, { - "name": "ml_dsa_44_sign/32_median", - "family_index": 1, + "name": "ml_dsa_65_keygen_median", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.3199171958852452e+02, - "cpu_time": 1.3197241030927592e+02, + "real_time": 8.9502446578552366e+01, + "cpu_time": 8.9494415821501050e+01, "time_unit": "us", - "CYCLES": 5.5809926804123714e+05, - "items_per_second": 7.8161726606817256e+03 + "CYCLES": 3.7881186916835699e+05, + "items_per_second": 1.1173883935764241e+04 }, { - "name": "ml_dsa_44_sign/32_stddev", - "family_index": 1, + "name": "ml_dsa_65_keygen_stddev", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.4577992378992064e+02, - "cpu_time": 1.4576709891757909e+02, + "real_time": 3.1563643751767039e+00, + "cpu_time": 3.1626639454229233e+00, "time_unit": "us", - "CYCLES": 6.1390894925212942e+05, - "items_per_second": 2.7958428776882565e+03 + "CYCLES": 2.1626964375539560e+03, + "items_per_second": 3.6561109296142740e+02 }, { - "name": "ml_dsa_44_sign/32_cv", - "family_index": 1, + "name": "ml_dsa_65_keygen_cv", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 7.8791030765547021e-01, - "cpu_time": 7.8790628431925436e-01, + "real_time": 3.4779787751304435e-02, + "cpu_time": 3.4859130801682243e-02, "time_unit": "us", - "CYCLES": 7.7201515581298319e-01, - "items_per_second": 3.9203173690158016e-01 + "CYCLES": 5.7028200157412841e-03, + "items_per_second": 3.3136318276187640e-02 }, { - "name": "ml_dsa_44_sign/32_min", - "family_index": 1, + "name": "ml_dsa_65_keygen_min", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.0174136288846918e+02, - "cpu_time": 1.0173712164948122e+02, + "real_time": 8.8331555105283584e+01, + "cpu_time": 8.8328348208249139e+01, "time_unit": "us", - "CYCLES": 4.5593724948453606e+05, - "items_per_second": 1.7286885607912513e+03 + "CYCLES": 3.7595435429344152e+05, + "items_per_second": 1.0194227536233875e+04 }, { - "name": "ml_dsa_44_sign/32_max", - "family_index": 1, + "name": "ml_dsa_65_keygen_max", + "family_index": 3, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_sign/32", + "run_name": "ml_dsa_65_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 5.7852128453849161e+02, - "cpu_time": 5.7847319793814245e+02, + "real_time": 9.8101979043955609e+01, + "cpu_time": 9.8094730223123605e+01, "time_unit": "us", - "CYCLES": 2.4436054494845360e+06, - "items_per_second": 9.8292539024775833e+03 + "CYCLES": 3.8275272616632859e+05, + "items_per_second": 1.1321393644114452e+04 }, { - "name": "ml_dsa_44_keygen_mean", - "family_index": 0, + "name": "ml_dsa_87_verify/32_mean", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 5.4818878949317401e+01, - "cpu_time": 5.4810777095403374e+01, + "real_time": 1.5837501446174983e+02, + "cpu_time": 1.5836063804100220e+02, "time_unit": "us", - "CYCLES": 2.3353665048281194e+05, - "items_per_second": 1.8255988888591906e+04 + "CYCLES": 6.5418970056947623e+05, + "items_per_second": 6.3189008743734203e+03 }, { - "name": "ml_dsa_44_keygen_median", - "family_index": 0, + "name": "ml_dsa_87_verify/32_median", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 5.4856472962487850e+01, - "cpu_time": 5.4852174005407221e+01, + "real_time": 1.5681380980010601e+02, + "cpu_time": 1.5680197152619741e+02, "time_unit": "us", - "CYCLES": 2.3402690169949789e+05, - "items_per_second": 1.8231899540623985e+04 + "CYCLES": 6.5496930865603639e+05, + "items_per_second": 6.3776959898427413e+03 }, { - "name": "ml_dsa_44_keygen_stddev", - "family_index": 0, + "name": "ml_dsa_87_verify/32_stddev", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.4389953630762888e+00, - "cpu_time": 1.4410863585283160e+00, + "real_time": 4.3504056589497084e+00, + "cpu_time": 4.3538536486365862e+00, "time_unit": "us", - "CYCLES": 3.0274646826442090e+03, - "items_per_second": 4.8199134550536240e+02 + "CYCLES": 2.6832646482281798e+03, + "items_per_second": 1.6978643333082221e+02 }, { - "name": "ml_dsa_44_keygen_cv", - "family_index": 0, + "name": "ml_dsa_87_verify/32_cv", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 2.6249996181182528e-02, - "cpu_time": 2.6292025672614856e-02, + "real_time": 2.7469015069926970e-02, + "cpu_time": 2.7493281805983261e-02, "time_unit": "us", - "CYCLES": 1.2963552728812592e-02, - "items_per_second": 2.6401820709178722e-02 + "CYCLES": 4.1016614078338148e-03, + "items_per_second": 2.6869614938793949e-02 }, { - "name": "ml_dsa_44_keygen_min", - "family_index": 0, + "name": "ml_dsa_87_verify/32_min", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 5.2430884125075465e+01, - "cpu_time": 5.2408984163769745e+01, + "real_time": 1.5432811047826686e+02, + "cpu_time": 1.5431013781320979e+02, "time_unit": "us", - "CYCLES": 2.2905852607184241e+05, - "items_per_second": 1.7544200016565814e+04 + "CYCLES": 6.4964809681093390e+05, + "items_per_second": 6.0143602921575985e+03 }, { - "name": "ml_dsa_44_keygen_max", - "family_index": 0, + "name": "ml_dsa_87_verify/32_max", + "family_index": 8, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_keygen", + "run_name": "ml_dsa_87_verify/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 5.7008156430762405e+01, - "cpu_time": 5.6998894167631853e+01, + "real_time": 1.6627620046710118e+02, + "cpu_time": 1.6626872209567259e+02, "time_unit": "us", - "CYCLES": 2.3960185515643106e+05, - "items_per_second": 1.9080698013057437e+04 + "CYCLES": 6.5776724715261965e+05, + "items_per_second": 6.4804556212015423e+03 }, { - "name": "ml_dsa_87_verify/32_mean", - "family_index": 8, + "name": "ml_dsa_87_keygen_mean", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.5701128715939399e+02, - "cpu_time": 1.5699020783460278e+02, + "real_time": 1.4837204153484242e+02, + "cpu_time": 1.4834521456310662e+02, "time_unit": "us", - "CYCLES": 6.7183788063112088e+05, - "items_per_second": 6.3731597199992530e+03 + "CYCLES": 6.1767870614886738e+05, + "items_per_second": 6.7461958196324722e+03 }, { - "name": "ml_dsa_87_verify/32_median", - "family_index": 8, + "name": "ml_dsa_87_keygen_median", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.5688898748601915e+02, - "cpu_time": 1.5687261534276394e+02, + "real_time": 1.4671936244784200e+02, + "cpu_time": 1.4669487756202713e+02, "time_unit": "us", - "CYCLES": 6.7105454896626761e+05, - "items_per_second": 6.3769221529342321e+03 + "CYCLES": 6.1569094660194172e+05, + "items_per_second": 6.8171689764757375e+03 }, { - "name": "ml_dsa_87_verify/32_stddev", - "family_index": 8, + "name": "ml_dsa_87_keygen_stddev", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 3.7908357319270101e+00, - "cpu_time": 3.7875301813743696e+00, + "real_time": 4.4132026619006925e+00, + "cpu_time": 4.4173783807762712e+00, "time_unit": "us", - "CYCLES": 2.3755565696137637e+03, - "items_per_second": 1.5362680148192939e+02 + "CYCLES": 5.8991900728683468e+03, + "items_per_second": 1.9272405660287063e+02 }, { - "name": "ml_dsa_87_verify/32_cv", - "family_index": 8, + "name": "ml_dsa_87_keygen_cv", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 2.4143714764140792e-02, - "cpu_time": 2.4125900803728638e-02, + "real_time": 2.9744166193631124e-02, + "cpu_time": 2.9777693832497044e-02, "time_unit": "us", - "CYCLES": 3.5359074534204275e-03, - "items_per_second": 2.4105280305441238e-02 + "CYCLES": 9.5505802841235991e-03, + "items_per_second": 2.8567812402067228e-02 }, { - "name": "ml_dsa_87_verify/32_min", - "family_index": 8, + "name": "ml_dsa_87_keygen_min", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.5300857127332878e+02, - "cpu_time": 1.5299569858541790e+02, + "real_time": 1.4488337003397871e+02, + "cpu_time": 1.4488082740021702e+02, "time_unit": "us", - "CYCLES": 6.6923613057671383e+05, - "items_per_second": 6.1983423973243271e+03 + "CYCLES": 6.1109019201726001e+05, + "items_per_second": 6.2849868505464483e+03 }, { - "name": "ml_dsa_87_verify/32_max", - "family_index": 8, + "name": "ml_dsa_87_keygen_max", + "family_index": 6, "per_family_instance_index": 0, - "run_name": "ml_dsa_87_verify/32", + "run_name": "ml_dsa_87_keygen", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.6135720348188815e+02, - "cpu_time": 1.6133345593035898e+02, + "real_time": 1.5911770008877122e+02, + "cpu_time": 1.5910932254584671e+02, "time_unit": "us", - "CYCLES": 6.7540264417845488e+05, - "items_per_second": 6.5361314680471060e+03 + "CYCLES": 6.2819888025889965e+05, + "items_per_second": 6.9022245244197311e+03 }, { - "name": "ml_dsa_44_verify/32_mean", - "family_index": 2, + "name": "ml_dsa_44_sign/32_mean", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "mean", "aggregate_unit": "time", "iterations": 10, - "real_time": 5.8627924288281676e+01, - "cpu_time": 5.8619525000000159e+01, + "real_time": 1.5357613324579830e+02, + "cpu_time": 1.5355570750280012e+02, "time_unit": "us", - "CYCLES": 2.5328250929648243e+05, - "items_per_second": 1.7066757137973131e+04 + "CYCLES": 6.4913613236282195e+05, + "items_per_second": 6.5170145272396476e+03 }, { - "name": "ml_dsa_44_verify/32_median", - "family_index": 2, + "name": "ml_dsa_44_sign/32_median", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "median", "aggregate_unit": "time", "iterations": 10, - "real_time": 5.8269634213033065e+01, - "cpu_time": 5.8265041457286529e+01, + "real_time": 1.5187983314818541e+02, + "cpu_time": 1.5185028947368545e+02, "time_unit": "us", - "CYCLES": 2.5308888902847571e+05, - "items_per_second": 1.7163148214014458e+04 + "CYCLES": 6.4896291881298996e+05, + "items_per_second": 6.5854380887337811e+03 }, { - "name": "ml_dsa_44_verify/32_stddev", - "family_index": 2, + "name": "ml_dsa_44_sign/32_stddev", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "stddev", "aggregate_unit": "time", "iterations": 10, - "real_time": 1.3199213997255557e+00, - "cpu_time": 1.3165472111885568e+00, + "real_time": 4.3878986987611981e+00, + "cpu_time": 4.3964839923591432e+00, "time_unit": "us", - "CYCLES": 9.0399733833138703e+02, - "items_per_second": 3.7578147959844250e+02 + "CYCLES": 7.7735515053930601e+02, + "items_per_second": 1.8320418658139877e+02 }, { - "name": "ml_dsa_44_verify/32_cv", - "family_index": 2, + "name": "ml_dsa_44_sign/32_cv", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "cv", "aggregate_unit": "percentage", "iterations": 10, - "real_time": 2.2513527738681621e-02, - "cpu_time": 2.2459192755119619e-02, + "real_time": 2.8571488329754823e-02, + "cpu_time": 2.8631198825865671e-02, "time_unit": "us", - "CYCLES": 3.5691265884972884e-03, - "items_per_second": 2.2018329349887893e-02 + "CYCLES": 1.1975225407801187e-03, + "items_per_second": 2.8111673806410387e-02 }, { - "name": "ml_dsa_44_verify/32_min", - "family_index": 2, + "name": "ml_dsa_44_sign/32_min", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "min", "aggregate_unit": "time", "iterations": 10, - "real_time": 5.7378283919896411e+01, - "cpu_time": 5.7370699748743412e+01, + "real_time": 1.4819321274749041e+02, + "cpu_time": 1.4813905823068274e+02, "time_unit": "us", - "CYCLES": 2.5235679061976550e+05, - "items_per_second": 1.6389065544896814e+04 + "CYCLES": 6.4835433482642774e+05, + "items_per_second": 6.2097612426075866e+03 }, { - "name": "ml_dsa_44_verify/32_max", - "family_index": 2, + "name": "ml_dsa_44_sign/32_max", + "family_index": 1, "per_family_instance_index": 0, - "run_name": "ml_dsa_44_verify/32", + "run_name": "ml_dsa_44_sign/32", "run_type": "aggregate", "repetitions": 10, "threads": 1, "aggregate_name": "max", "aggregate_unit": "time", "iterations": 10, - "real_time": 6.1020474874218429e+01, - "cpu_time": 6.1016291457286741e+01, + "real_time": 1.6104492606816254e+02, + "cpu_time": 1.6103678723404229e+02, "time_unit": "us", - "CYCLES": 2.5502009254606365e+05, - "items_per_second": 1.7430500314263692e+04 + "CYCLES": 6.5034983874580066e+05, + "items_per_second": 6.7504141847776300e+03 } ] } diff --git a/benchmarks/bench.mk b/benchmarks/bench.mk index eadc44d..0b64454 100644 --- a/benchmarks/bench.mk +++ b/benchmarks/bench.mk @@ -6,7 +6,7 @@ BENCHMARK_LINK_FLAGS := -lbenchmark -lbenchmark_main -lpthread BENCHMARK_BINARY := $(BENCHMARK_BUILD_DIR)/bench.out PERF_LINK_FLAGS := -lbenchmark -lbenchmark_main -lpfm -lpthread PERF_BINARY := $(BENCHMARK_BUILD_DIR)/perf.out -BENCHMARK_OUT_FILE := bench_result_on_$(shell uname -s)_$(shell uname -r)_$(shell uname -m)_with_$(CXX)_$(shell $(CXX) -dumpversion).json +BENCHMARK_OUT_FILE := bench_result_at_commit_$(shell git log -1 --pretty=format:"%h")_on_$(shell uname -s)_$(shell uname -r)_$(shell uname -m)_with_$(CXX)_$(shell $(CXX) -dumpversion).json $(BENCHMARK_BUILD_DIR): mkdir -p $@ diff --git a/benchmarks/bench_ml_dsa_44.cpp b/benchmarks/bench_ml_dsa_44.cpp index aac57f2..85a281c 100644 --- a/benchmarks/bench_ml_dsa_44.cpp +++ b/benchmarks/bench_ml_dsa_44.cpp @@ -1,6 +1,11 @@ #include "bench_helper.hpp" #include "ml_dsa/ml_dsa_44.hpp" +#include #include +#include + +static constexpr size_t BIT_SECURITY_LEVEL = ml_dsa_44::lambda; +static constexpr std::array::digits> CSPRNG_SEED{ 0 }; // Benchmark performance of ML-DSA-44 key generation algorithm. void @@ -10,7 +15,7 @@ ml_dsa_44_keygen(benchmark::State& state) std::array pubkey{}; std::array seckey{}; - randomshake::randomshake_t<128> csprng; + randomshake::randomshake_t csprng; csprng.generate(seed); for (auto _ : state) { @@ -41,7 +46,7 @@ ml_dsa_44_sign(benchmark::State& state) std::array rnd{}; std::array sig{}; - randomshake::randomshake_t<128> csprng; + randomshake::randomshake_t csprng(CSPRNG_SEED); csprng.generate(seed); csprng.generate(rnd); csprng.generate(msg_span); @@ -82,7 +87,7 @@ ml_dsa_44_verify(benchmark::State& state) std::array rnd{}; std::array sig{}; - randomshake::randomshake_t<128> csprng; + randomshake::randomshake_t csprng; csprng.generate(seed); csprng.generate(rnd); csprng.generate(msg_span); diff --git a/benchmarks/bench_ml_dsa_65.cpp b/benchmarks/bench_ml_dsa_65.cpp index 84a7db9..d840862 100644 --- a/benchmarks/bench_ml_dsa_65.cpp +++ b/benchmarks/bench_ml_dsa_65.cpp @@ -2,6 +2,9 @@ #include "ml_dsa/ml_dsa_65.hpp" #include +static constexpr size_t BIT_SECURITY_LEVEL = ml_dsa_65::lambda; +static constexpr std::array::digits> CSPRNG_SEED{ 0 }; + // Benchmark performance of ML-DSA-65 key generation algorithm. void ml_dsa_65_keygen(benchmark::State& state) @@ -10,7 +13,7 @@ ml_dsa_65_keygen(benchmark::State& state) std::array pubkey{}; std::array seckey{}; - randomshake::randomshake_t<192> csprng; + randomshake::randomshake_t csprng; csprng.generate(seed); for (auto _ : state) { @@ -41,7 +44,7 @@ ml_dsa_65_sign(benchmark::State& state) std::array rnd{}; std::array sig{}; - randomshake::randomshake_t<192> csprng; + randomshake::randomshake_t csprng(CSPRNG_SEED); csprng.generate(seed); csprng.generate(rnd); csprng.generate(msg_span); @@ -82,7 +85,7 @@ ml_dsa_65_verify(benchmark::State& state) std::array rnd{}; std::array sig{}; - randomshake::randomshake_t<192> csprng; + randomshake::randomshake_t csprng; csprng.generate(seed); csprng.generate(rnd); csprng.generate(msg_span); diff --git a/benchmarks/bench_ml_dsa_87.cpp b/benchmarks/bench_ml_dsa_87.cpp index 60c5c6c..d620789 100644 --- a/benchmarks/bench_ml_dsa_87.cpp +++ b/benchmarks/bench_ml_dsa_87.cpp @@ -2,6 +2,9 @@ #include "ml_dsa/ml_dsa_87.hpp" #include +static constexpr size_t BIT_SECURITY_LEVEL = ml_dsa_87::lambda; +static constexpr std::array::digits> CSPRNG_SEED{ 0 }; + // Benchmark performance of ML-DSA-87 key generation algorithm. void ml_dsa_87_keygen(benchmark::State& state) @@ -10,7 +13,7 @@ ml_dsa_87_keygen(benchmark::State& state) std::array pubkey{}; std::array seckey{}; - randomshake::randomshake_t<256> csprng; + randomshake::randomshake_t csprng; csprng.generate(seed); for (auto _ : state) { @@ -41,7 +44,7 @@ ml_dsa_87_sign(benchmark::State& state) std::array rnd{}; std::array sig{}; - randomshake::randomshake_t<256> csprng; + randomshake::randomshake_t csprng(CSPRNG_SEED); csprng.generate(seed); csprng.generate(rnd); csprng.generate(msg_span); @@ -82,7 +85,7 @@ ml_dsa_87_verify(benchmark::State& state) std::array rnd{}; std::array sig{}; - randomshake::randomshake_t<256> csprng; + randomshake::randomshake_t csprng; csprng.generate(seed); csprng.generate(rnd); csprng.generate(msg_span);