{
 "experiment": "signature_benchmarks",
 "timestamp_utc": "2026-11-01T05:50:10+00:00",
 "command": "experiments/signature_benchmarks/run_bench.py --no-build --seed 34 --label M3U96a (Apple M3 Ultra)",
 "cwd": "/Users/simon-pierreboucher/wp34-sigbench",
 "seed": 34,
 "host": {
  "hostname": "MacStudnpierre2",
  "os": "Darwin 25.6.0 (26.6)",
  "machine": "arm64",
  "python": "3.14.5",
  "cpu": "Apple M3 Ultra",
  "cores": 28,
  "ram_gb": 96.0
 },
 "software": {
  "numpy": "2.4.4",
  "scipy": "1.17.1",
  "sympy": "1.14.0",
  "gmpy2": null,
  "z3": "4.16.0",
  "pysat": null,
  "ecdsa": null,
  "coincurve": null
 },
 "params": {
  "seed": 34,
  "reps": 7,
  "batch_ops": 2000,
  "batch_min_sigs": 2000,
  "batch_sizes": [
   1,
   2,
   4,
   8,
   16,
   32,
   64,
   128,
   256,
   512,
   1024,
   2048
  ],
  "crosscheck_n": 1000,
  "python_crosscheck_n": 200,
  "bootstrap": 2000,
  "python_ops": 20,
  "rust_command": "/Users/simon-pierreboucher/wp34-sigbench/experiments/signature_benchmarks/sigbench/target/release/sigbench --seed 34 --reps 7 --batch-ops 2000 --batch-min-sigs 2000 --batch-sizes 1,2,4,8,16,32,64,128,256,512,1024,2048 --crosscheck-n 1000 --python-crosscheck-n 200 --bootstrap 2000 --vectors /Users/simon-pierreboucher/wp34-sigbench/data/vectors/bip340_test_vectors.csv --crosscheck-out /Users/simon-pierreboucher/wp34-sigbench/results/signature_benchmarks/crosscheck_triples_MacStudnpierre2.json"
 },
 "measurements": {
  "correctness_gates": {
   "bip340_vectors_both_libraries": true,
   "cross_library_1000": true,
   "python_reference_200": true,
   "own_scalar_mult_agrees_with_k256": true,
   "batch_negative_controls_rejected": true,
   "all": true
  },
  "bip340_vectors": {
   "both_all_pass": true,
   "file": "/Users/simon-pierreboucher/wp34-sigbench/data/vectors/bip340_test_vectors.csv",
   "k256": {
    "all_pass": true,
    "details": [
     {
      "comment": "",
      "expected": true,
      "index": 0,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "",
      "expected": true,
      "index": 1,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "",
      "expected": true,
      "index": 2,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "test fails if msg is reduced modulo p or n",
      "expected": true,
      "index": 3,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "",
      "expected": true,
      "index": 4,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "public key not on the curve",
      "expected": false,
      "index": 5,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "has_even_y(R) is false",
      "expected": false,
      "index": 6,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "negated message",
      "expected": false,
      "index": 7,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "negated s value",
      "expected": false,
      "index": 8,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "sG - eP is infinite. Test fails in single verification if has_even_y(inf) is defined as true and x(inf) as 0",
      "expected": false,
      "index": 9,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "sG - eP is infinite. Test fails in single verification if has_even_y(inf) is defined as true and x(inf) as 1",
      "expected": false,
      "index": 10,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "sig[0:32] is not an X coordinate on the curve",
      "expected": false,
      "index": 11,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "sig[0:32] is equal to field size",
      "expected": false,
      "index": 12,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "sig[32:64] is equal to curve order",
      "expected": false,
      "index": 13,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "public key is not a valid X coordinate because it exceeds the field size",
      "expected": false,
      "index": 14,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "message of size 0 (added 2022-12)",
      "expected": true,
      "index": 15,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "message of size 1 (added 2022-12)",
      "expected": true,
      "index": 16,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "message of size 17 (added 2022-12)",
      "expected": true,
      "index": 17,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "message of size 100 (added 2022-12)",
      "expected": true,
      "index": 18,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     }
    ],
    "library": "k256 (RustCrypto)",
    "n_vectors": 19,
    "sign_cases": 8,
    "sign_pass": 8,
    "verify_pass": 19
   },
   "libsecp256k1": {
    "all_pass": true,
    "details": [
     {
      "comment": "",
      "expected": true,
      "index": 0,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "",
      "expected": true,
      "index": 1,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "",
      "expected": true,
      "index": 2,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "test fails if msg is reduced modulo p or n",
      "expected": true,
      "index": 3,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "",
      "expected": true,
      "index": 4,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "public key not on the curve",
      "expected": false,
      "index": 5,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "has_even_y(R) is false",
      "expected": false,
      "index": 6,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "negated message",
      "expected": false,
      "index": 7,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "negated s value",
      "expected": false,
      "index": 8,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "sG - eP is infinite. Test fails in single verification if has_even_y(inf) is defined as true and x(inf) as 0",
      "expected": false,
      "index": 9,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "sG - eP is infinite. Test fails in single verification if has_even_y(inf) is defined as true and x(inf) as 1",
      "expected": false,
      "index": 10,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "sig[0:32] is not an X coordinate on the curve",
      "expected": false,
      "index": 11,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "sig[0:32] is equal to field size",
      "expected": false,
      "index": 12,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "sig[32:64] is equal to curve order",
      "expected": false,
      "index": 13,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "public key is not a valid X coordinate because it exceeds the field size",
      "expected": false,
      "index": 14,
      "sign_checked": false,
      "sign_ok": null,
      "verify_ok": true
     },
     {
      "comment": "message of size 0 (added 2022-12)",
      "expected": true,
      "index": 15,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "message of size 1 (added 2022-12)",
      "expected": true,
      "index": 16,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "message of size 17 (added 2022-12)",
      "expected": true,
      "index": 17,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     },
     {
      "comment": "message of size 100 (added 2022-12)",
      "expected": true,
      "index": 18,
      "sign_checked": true,
      "sign_ok": true,
      "verify_ok": true
     }
    ],
    "library": "libsecp256k1 (rust-secp256k1)",
    "n_vectors": 19,
    "sign_cases": 8,
    "sign_pass": 8,
    "verify_pass": 19
   },
   "n_vectors": 19
  },
  "cross_library_checks": {
   "all_pass": true,
   "ecdsa_k256_sign_libsecp_verify_pass": 1000,
   "ecdsa_libsecp_sign_k256_verify_pass": 1000,
   "ecdsa_signatures_byte_identical": 1000,
   "n": 1000,
   "schnorr_k256_sign_libsecp_verify_pass": 1000,
   "schnorr_libsecp_sign_k256_verify_pass": 1000,
   "schnorr_signatures_byte_identical": 1000
  },
  "python_reference_crosscheck": {
   "n": 200,
   "source": "/Users/simon-pierreboucher/wp34-sigbench/results/signature_benchmarks/crosscheck_triples_MacStudnpierre2.json",
   "ecdsa_k256_sig_verified_by_python": 200,
   "ecdsa_libsecp_sig_verified_by_python": 200,
   "ecdsa_python_resign_identical": 200,
   "schnorr_k256_sig_verified_by_python": 200,
   "schnorr_libsecp_sig_verified_by_python": 200,
   "schnorr_python_resign_identical": 200,
   "tampered_sig_rejected_by_python": 200,
   "elapsed_s": 13.45,
   "resign_checked": true,
   "all_pass": true
  },
  "sign_verify": {
   "ecdsa_sign_k256": {
    "iqr_ns": 53.79175000000032,
    "mean_ns": 18883.256,
    "median_ns": 18848.625,
    "min_ns": 18831.646,
    "ns_per_op_samples": [
     18907.8335,
     18834.229,
     18874.104,
     18848.625,
     18840.125,
     19046.2295,
     18831.646
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 53054.26788426212,
    "q1_ns": 18837.177,
    "q3_ns": 18890.96875,
    "reps": 7,
    "sd_ns": 76.78433267221082
   },
   "ecdsa_sign_libsecp256k1": {
    "iqr_ns": 769.5517499999987,
    "mean_ns": 29011.006,
    "median_ns": 29199.1875,
    "min_ns": 28564.396,
    "ns_per_op_samples": [
     29199.1875,
     29428.3955,
     29259.375,
     29477.021,
     28564.396,
     28583.125,
     28565.542
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 34247.52829166908,
    "q1_ns": 28574.3335,
    "q3_ns": 29343.88525,
    "reps": 7,
    "sd_ns": 422.1895762165573
   },
   "ecdsa_verify_k256": {
    "iqr_ns": 34.57249999999476,
    "mean_ns": 33574.8215,
    "median_ns": 33524.0625,
    "min_ns": 33494.9795,
    "ns_per_op_samples": [
     33531.6665,
     33524.0625,
     33530.0,
     33496.4795,
     33496.042,
     33494.9795,
     33950.5205
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 29829.320357578978,
    "q1_ns": 33496.26075,
    "q3_ns": 33530.833249999996,
    "reps": 7,
    "sd_ns": 166.49122054806097
   },
   "ecdsa_verify_libsecp256k1": {
    "iqr_ns": 37.5,
    "mean_ns": 16691.279857142858,
    "median_ns": 16680.3545,
    "min_ns": 16664.75,
    "ns_per_op_samples": [
     16734.8125,
     16712.1875,
     16680.3545,
     16676.167,
     16704.8335,
     16665.854,
     16664.75
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 59950.76423585601,
    "q1_ns": 16671.0105,
    "q3_ns": 16708.5105,
    "reps": 7,
    "sd_ns": 26.501544514289243
   },
   "schnorr_sign_k256": {
    "iqr_ns": 401.4482500000013,
    "mean_ns": 14996.696428571431,
    "median_ns": 14837.9585,
    "min_ns": 14731.3335,
    "ns_per_op_samples": [
     15160.396,
     15131.4585,
     15626.7705,
     14837.9585,
     14737.125,
     14731.3335,
     14751.833
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 67394.71605881631,
    "q1_ns": 14744.479,
    "q3_ns": 15145.92725,
    "reps": 7,
    "sd_ns": 332.8919594697641
   },
   "schnorr_sign_libsecp256k1": {
    "iqr_ns": 80.92725000000064,
    "mean_ns": 24748.6905,
    "median_ns": 24717.3335,
    "min_ns": 24694.75,
    "ns_per_op_samples": [
     24863.1045,
     24694.75,
     24697.854,
     24838.604,
     24717.3335,
     24725.146,
     24704.0415
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 40457.438501608594,
    "q1_ns": 24700.94775,
    "q3_ns": 24781.875,
    "reps": 7,
    "sd_ns": 70.94606669975937
   },
   "schnorr_verify_k256": {
    "iqr_ns": 430.46875,
    "mean_ns": 32320.133928571428,
    "median_ns": 32497.646,
    "min_ns": 31759.083,
    "ns_per_op_samples": [
     31759.083,
     32652.521,
     32539.5625,
     32138.75,
     32096.625,
     32556.75,
     32497.646
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 30771.459569717757,
    "q1_ns": 32117.6875,
    "q3_ns": 32548.15625,
    "reps": 7,
    "sd_ns": 327.5571907110819
   },
   "schnorr_verify_libsecp256k1": {
    "iqr_ns": 161.56224999999904,
    "mean_ns": 17099.41664285714,
    "median_ns": 16944.1665,
    "min_ns": 16924.729,
    "ns_per_op_samples": [
     16968.4165,
     16944.1665,
     16942.3335,
     16941.8125,
     16924.729,
     17238.854,
     17735.6045
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 59017.36152085144,
    "q1_ns": 16942.073,
    "q3_ns": 17103.63525,
    "reps": 7,
    "sd_ns": 301.51599255853716
   }
  },
  "scalar_mult": {
   "glv_note": "k256: every constant-time multiplication goes through lincomb(), which always applies the GLV decomposition (no public feature toggle); the vartime path uses GLV + wNAF-5; the only non-GLV reference is our own wNAF-5 double-and-add above. libsecp256k1: the GLV endomorphism has been unconditional since v0.1 (USE_ENDOMORPHISM removed) and ecmult is not exposed by rust-secp256k1's public API; mul_tweak maps to secp256k1_ec_pubkey_tweak_mul (constant-time ecmult_const) and from_secret_key to ecmult_gen (precomputed generator table).",
   "k256_generator_mul_ct_glv": {
    "iqr_ns": 57.45799999999872,
    "mean_ns": 22889.636785714283,
    "median_ns": 22876.0625,
    "min_ns": 22856.104,
    "ns_per_op_samples": [
     22856.104,
     22876.0625,
     22913.3955,
     22868.396,
     22857.5415,
     22928.5,
     22927.458
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 43713.816571361436,
    "q1_ns": 22862.96875,
    "q3_ns": 22920.42675,
    "reps": 7,
    "sd_ns": 32.39150473099511
   },
   "k256_mul_by_generator_precomputed_table": {
    "iqr_ns": 30.05199999999968,
    "mean_ns": 10807.788571428571,
    "median_ns": 10800.4165,
    "min_ns": 10788.1665,
    "ns_per_op_samples": [
     10788.1665,
     10842.333,
     10805.729,
     10800.4165,
     10836.125,
     10788.75,
     10793.0
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 92589.0219141086,
    "q1_ns": 10790.875,
    "q3_ns": 10820.927,
    "reps": 7,
    "sd_ns": 22.439008947271418
   },
   "k256_mul_by_generator_vartime_table": {
    "iqr_ns": 215.25025000000096,
    "mean_ns": 9460.776714285716,
    "median_ns": 9426.2085,
    "min_ns": 9328.0,
    "ns_per_op_samples": [
     9344.583,
     9370.229,
     9328.0,
     9426.2085,
     9611.104,
     9591.625,
     9553.6875
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 106087.19295780481,
    "q1_ns": 9357.405999999999,
    "q3_ns": 9572.65625,
    "reps": 7,
    "sd_ns": 121.70761815647116
   },
   "k256_point_mul_ct_glv": {
    "iqr_ns": 555.0832499999997,
    "mean_ns": 23166.4405,
    "median_ns": 23236.7295,
    "min_ns": 22841.8125,
    "ns_per_op_samples": [
     22870.521,
     22864.479,
     22841.8125,
     23385.479,
     23459.6875,
     23506.375,
     23236.7295
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 43035.31613603368,
    "q1_ns": 22867.5,
    "q3_ns": 23422.58325,
    "reps": 7,
    "sd_ns": 299.61088978011685
   },
   "k256_point_mul_vartime_glv_wnaf": {
    "iqr_ns": 18.03125,
    "mean_ns": 19012.967214285713,
    "median_ns": 19015.3125,
    "min_ns": 18989.0625,
    "ns_per_op_samples": [
     19036.125,
     19025.3125,
     19013.229,
     19017.854,
     19015.3125,
     18993.875,
     18989.0625
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 52589.19620700422,
    "q1_ns": 19003.552,
    "q3_ns": 19021.58325,
    "reps": 7,
    "sd_ns": 16.6036476987667
   },
   "libsecp256k1_generator_mul_ecmult_gen": {
    "iqr_ns": 157.67725000000064,
    "mean_ns": 23915.16957142857,
    "median_ns": 23797.458,
    "min_ns": 23744.854,
    "ns_per_op_samples": [
     23766.4375,
     23796.729,
     23797.458,
     23744.854,
     23897.917,
     24422.1875,
     23980.604
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 42021.29487947831,
    "q1_ns": 23781.58325,
    "q3_ns": 23939.2605,
    "reps": 7,
    "sd_ns": 238.27830419742892
   },
   "libsecp256k1_point_mul_tweak_ecmult_const": {
    "iqr_ns": 52.25,
    "mean_ns": 15656.592285714287,
    "median_ns": 15607.6665,
    "min_ns": 15591.271,
    "ns_per_op_samples": [
     15653.75,
     15650.396,
     15893.4165,
     15607.6665,
     15600.9375,
     15598.7085,
     15591.271
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 64071.07686469339,
    "q1_ns": 15599.823,
    "q3_ns": 15652.073,
    "reps": 7,
    "sd_ns": 107.42499066280944
   },
   "own_wnaf5_agrees_with_k256_64_cases": true,
   "own_wnaf5_point_mul_no_glv": {
    "iqr_ns": 489.82274999999936,
    "mean_ns": 29217.413571428566,
    "median_ns": 28983.8955,
    "min_ns": 28971.625,
    "ns_per_op_samples": [
     29524.583,
     29412.6875,
     29671.479,
     28971.625,
     28973.8335,
     28983.8955,
     28983.7915
    ],
    "op_counts_example": {
     "adds": 52,
     "doublings": 257,
     "identity_adds": 1,
     "mixed_adds": 0
    },
    "ops_per_rep": 2000,
    "ops_per_s": 34501.91848780299,
    "q1_ns": 28978.8125,
    "q3_ns": 29468.63525,
    "reps": 7,
    "sd_ns": 307.5477235153144
   }
  },
  "batch_verification": {
   "equation": "sum_i a_i s_i G = sum_i a_i R_i + sum_i a_i e_i P_i, a_1 = 1, a_i uniform 128-bit from ChaCha20(seed); R_i = lift_x(r_i), P_i = lift_x(pk_i); merged into one MSM with 2b+1 terms whose result must be the identity",
   "msm_algorithms": {
    "k256_lincomb_ct": "k256 0.14 library: constant-time GLV + radix-16 fixed-window interleaving (benchmarked up to ct_lincomb_max_batch)",
    "k256_lincomb_vartime": "k256 0.14 library: GLV decomposition + wNAF-5 multiscalar (wnaf crate), variable time",
    "pippenger": "own implementation: bucket method with c-bit windows (c = pippenger_window(2b+1)), mixed additions into buckets, running-sum trick",
    "straus_wnaf5": "own implementation: interleaved Straus with width-5 wNAF recoding, per-term odd-multiple tables (1 dbl + 7 adds), projective additions"
   },
   "negative_controls": {
    "all_invalid_batches_rejected": true,
    "batch_size": 64,
    "cases": {
     "r_plus_one": {
      "k256_lincomb_ct": true,
      "k256_lincomb_vartime": true,
      "pippenger": true,
      "straus_wnaf5": true,
      "unmodified_batch_accepted": true
     },
     "s_plus_one": {
      "k256_lincomb_ct": true,
      "k256_lincomb_vartime": true,
      "pippenger": true,
      "straus_wnaf5": true,
      "unmodified_batch_accepted": true
     },
     "wrong_message": {
      "k256_lincomb_ct": true,
      "k256_lincomb_vartime": true,
      "pippenger": true,
      "straus_wnaf5": true,
      "unmodified_batch_accepted": true
     }
    }
   },
   "results": [
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 1,
     "msm_only_ns_per_sig_median": 37863.703,
     "msm_only_ns_per_sig_samples": [
      37904.747,
      37863.703,
      37877.7395,
      37838.8055,
      37833.0995,
      37857.391,
      39200.6545
     ],
     "n_batches_per_rep": 2000,
     "n_terms": 3,
     "op_counts_per_batch": {
      "adds": 107,
      "doublings": 259,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 107.0,
      "doublings": 259.0,
      "mixed_adds": 0.0,
      "total": 366.0
     },
     "per_signature": {
      "iqr_ns": 42.08325000000332,
      "mean_ns": 41625.127928571426,
      "median_ns": 41422.25,
      "min_ns": 41383.104,
      "ns_per_op_samples": [
       41463.604,
       41422.25,
       41425.9165,
       41389.6665,
       41383.104,
       41415.6875,
       42875.667
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 24141.614711900005,
      "q1_ns": 41402.676999999996,
      "q3_ns": 41444.76025,
      "reps": 7,
      "sd_ns": 552.0666558957832
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.7861760012006862,
      "ci95_low": 0.774091538207822,
      "point": 0.7845456487757184
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.4162397159288977,
      "ci95_low": 0.4085947883353314,
      "point": 0.4090595392572832
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 1,
     "msm_only_ns_per_sig_median": 128402.972,
     "msm_only_ns_per_sig_samples": [
      126369.512,
      126422.9685,
      127447.3695,
      130600.072,
      132717.03,
      133060.248,
      128402.972
     ],
     "n_batches_per_rep": 2000,
     "n_terms": 3,
     "op_counts_per_batch": {
      "adds": 630,
      "doublings": 255,
      "identity_adds": 234,
      "mixed_adds": 154
     },
     "op_counts_per_signature": {
      "adds": 630.0,
      "doublings": 255.0,
      "mixed_adds": 154.0,
      "total": 1039.0
     },
     "per_signature": {
      "iqr_ns": 4832.135500000004,
      "mean_ns": 133008.00900000002,
      "median_ns": 132033.25,
      "min_ns": 130045.521,
      "ns_per_op_samples": [
       130045.521,
       130087.479,
       131150.7085,
       134406.521,
       136495.9375,
       136836.646,
       132033.25
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 7573.849768902909,
      "q1_ns": 130619.09375,
      "q3_ns": 135451.22925,
      "reps": 7,
      "sd_ns": 2900.7324707003045
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.2501360065560191,
      "ci95_low": 0.2354557255595977,
      "point": 0.24613228864698855
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.1314430870954845,
      "ci95_low": 0.12411953652466763,
      "point": 0.1283325715302774
     },
     "window_bits": 3
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 1,
     "msm_only_ns_per_sig_median": 30657.826,
     "msm_only_ns_per_sig_samples": [
      30687.119,
      30657.826,
      30656.965,
      30630.114,
      30628.986,
      30666.121,
      30667.96
     ],
     "n_batches_per_rep": 2000,
     "n_terms": 3,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 30.510500000003958,
      "mean_ns": 34235.878000000004,
      "median_ns": 34243.375,
      "min_ns": 34203.9165,
      "ns_per_op_samples": [
       34260.9585,
       34233.8125,
       34243.375,
       34207.125,
       34203.9165,
       34245.875,
       34256.0835
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 29202.728995024587,
      "q1_ns": 34220.46875,
      "q3_ns": 34250.979250000004,
      "reps": 7,
      "sd_ns": 22.531376308014337
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.9512510186108888,
      "ci95_low": 0.9372406165706089,
      "point": 0.9490199491142447
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.503562201843572,
      "ci95_low": 0.494563615248077,
      "point": 0.4948159023460742
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 1,
     "msm_only_ns_per_sig_median": 47663.242,
     "msm_only_ns_per_sig_samples": [
      47633.805,
      47658.7665,
      48232.4715,
      47964.444,
      47810.781,
      47663.242,
      47654.2825
     ],
     "n_batches_per_rep": 2000,
     "n_terms": 3,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 247.87475000000268,
      "mean_ns": 51388.184499999996,
      "median_ns": 51239.4375,
      "min_ns": 51212.4375,
      "ns_per_op_samples": [
       51212.4375,
       51234.042,
       51849.042,
       51560.458,
       51395.604,
       51239.4375,
       51226.2705
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 19516.217366749977,
      "q1_ns": 51230.15625,
      "q3_ns": 51478.031,
      "reps": 7,
      "sd_ns": 239.83034795767637
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.6354515226419184,
      "ci95_low": 0.6233012296942746,
      "point": 0.6342311232436929
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.33647265230410667,
      "ci95_low": 0.32859160211493854,
      "point": 0.33068603651240314
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 2,
     "msm_only_ns_per_sig_median": 24900.267,
     "msm_only_ns_per_sig_samples": [
      24910.854,
      25081.6005,
      24900.267,
      24911.542,
      24899.5015,
      24879.188,
      24892.4735
     ],
     "n_batches_per_rep": 1000,
     "n_terms": 5,
     "op_counts_per_batch": {
      "adds": 187,
      "doublings": 261,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 93.5,
      "doublings": 130.5,
      "mixed_adds": 0.0,
      "total": 224.0
     },
     "per_signature": {
      "iqr_ns": 17.76075000000128,
      "mean_ns": 28566.616071428572,
      "median_ns": 28541.9795,
      "min_ns": 28511.0625,
      "ns_per_op_samples": [
       28546.875,
       28756.625,
       28532.7915,
       28541.9795,
       28527.7705,
       28511.0625,
       28549.2085
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 35036.11233411474,
      "q1_ns": 28530.281,
      "q3_ns": 28548.04175,
      "reps": 7,
      "sd_ns": 84.79619329428881
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1412300866623981,
      "ci95_low": 1.1243481116584564,
      "point": 1.1385911758502945
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.604176916934328,
      "ci95_low": 0.5934249455637273,
      "point": 0.5936577209019437
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 2,
     "msm_only_ns_per_sig_median": 80944.258,
     "msm_only_ns_per_sig_samples": [
      81606.7265,
      81753.7915,
      83183.8795,
      80892.0165,
      80910.3795,
      80915.337,
      80944.258
     ],
     "n_batches_per_rep": 1000,
     "n_terms": 5,
     "op_counts_per_batch": {
      "adds": 766,
      "doublings": 255,
      "identity_adds": 296,
      "mixed_adds": 254
     },
     "op_counts_per_signature": {
      "adds": 383.0,
      "doublings": 127.5,
      "mixed_adds": 127.0,
      "total": 637.5
     },
     "per_signature": {
      "iqr_ns": 819.5835000000079,
      "mean_ns": 85136.1845,
      "median_ns": 84597.6875,
      "min_ns": 84540.2915,
      "ns_per_op_samples": [
       85295.9585,
       85458.75,
       86945.0625,
       84540.2915,
       84560.5415,
       84555.0,
       84597.6875
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 11820.65408111776,
      "q1_ns": 84557.77075,
      "q3_ns": 85377.35425,
      "reps": 7,
      "sd_ns": 886.5498317163266
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.38501113430074235,
      "ci95_low": 0.3760732517150087,
      "point": 0.3841434318166203
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.20387740523919343,
      "ci95_low": 0.19825159506779588,
      "point": 0.20029113088936384
     },
     "window_bits": 3
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 2,
     "msm_only_ns_per_sig_median": 23211.2325,
     "msm_only_ns_per_sig_samples": [
      23234.8325,
      23199.4075,
      23205.684,
      23223.3685,
      23211.2325,
      23208.038,
      23226.1475
     ],
     "n_batches_per_rep": 1000,
     "n_terms": 5,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 16.44800000000032,
      "mean_ns": 26869.80942857143,
      "median_ns": 26871.2915,
      "min_ns": 26853.7705,
      "ns_per_op_samples": [
       26887.25,
       26853.7705,
       26864.3125,
       26873.7915,
       26871.2915,
       26857.4165,
       26880.8335
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 37214.437571785485,
      "q1_ns": 26860.8645,
      "q3_ns": 26877.3125,
      "reps": 7,
      "sd_ns": 12.143621392966967
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.2122070639221758,
      "ci95_low": 1.1943467299729553,
      "point": 1.2093816182969843
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.64170091827215,
      "ci95_low": 0.63027511684115,
      "point": 0.630567626420189
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 2,
     "msm_only_ns_per_sig_median": 36292.7915,
     "msm_only_ns_per_sig_samples": [
      37212.9615,
      37159.6615,
      37109.338,
      36215.7065,
      36247.0035,
      36292.7915,
      36262.0215
     ],
     "n_batches_per_rep": 1000,
     "n_terms": 5,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 978.020749999996,
      "mean_ns": 40323.27085714286,
      "median_ns": 39937.8955,
      "min_ns": 39853.0835,
      "ns_per_op_samples": [
       40955.3335,
       40899.5,
       40836.8125,
       39853.0835,
       39885.6665,
       39937.8955,
       39894.6045
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 25038.87567135329,
      "q1_ns": 39890.135500000004,
      "q3_ns": 40868.15625,
      "reps": 7,
      "sd_ns": 538.5336517446175
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8160690000072566,
      "ci95_low": 0.7857981148913801,
      "point": 0.8137045178056516
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.43210991100312823,
      "ci95_low": 0.41424304698101444,
      "point": 0.4242628783482094
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 4,
     "msm_only_ns_per_sig_median": 18388.972,
     "msm_only_ns_per_sig_samples": [
      18409.9975,
      18388.972,
      18366.673,
      18411.878,
      18378.1235,
      18390.009,
      18367.0245
     ],
     "n_batches_per_rep": 500,
     "n_terms": 9,
     "op_counts_per_batch": {
      "adds": 345,
      "doublings": 265,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 86.25,
      "doublings": 66.25,
      "mixed_adds": 0.0,
      "total": 152.5
     },
     "per_signature": {
      "iqr_ns": 26.15625,
      "mean_ns": 22011.58635714286,
      "median_ns": 22009.583,
      "min_ns": 21980.7915,
      "ns_per_op_samples": [
       22032.25,
       22006.646,
       21990.146,
       22044.8335,
       22009.583,
       22016.8545,
       21980.7915
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 45434.75448853347,
      "q1_ns": 21998.396,
      "q3_ns": 22024.55225,
      "reps": 7,
      "sd_ns": 22.347798858266444
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.4803635483280937,
      "ci95_low": 1.4578206437254695,
      "point": 1.476522567465272
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.7833476305294318,
      "ci95_low": 0.7689788151459792,
      "point": 0.7698540449403335
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 4,
     "msm_only_ns_per_sig_median": 59259.009,
     "msm_only_ns_per_sig_samples": [
      60760.2285,
      59430.209,
      59258.8085,
      59250.0155,
      59219.633,
      59259.009,
      59302.973
     ],
     "n_batches_per_rep": 500,
     "n_terms": 9,
     "op_counts_per_batch": {
      "adds": 1224,
      "doublings": 252,
      "identity_adds": 380,
      "mixed_adds": 383
     },
     "op_counts_per_signature": {
      "adds": 306.0,
      "doublings": 63.0,
      "mixed_adds": 95.75,
      "total": 464.75
     },
     "per_signature": {
      "iqr_ns": 122.33325000000332,
      "mean_ns": 63140.34807142856,
      "median_ns": 62885.9165,
      "min_ns": 62854.9165,
      "ns_per_op_samples": [
       64500.354,
       63070.5205,
       62885.9165,
       62876.7915,
       62854.9165,
       62871.5,
       62922.4375
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 15901.811656032714,
      "q1_ns": 62874.145749999996,
      "q3_ns": 62996.479,
      "reps": 7,
      "sd_ns": 604.1419522738032
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5177864395323034,
      "ci95_low": 0.5089005885086996,
      "point": 0.5167714459564249
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.27416879247090714,
      "ci95_low": 0.26862523673005045,
      "point": 0.26944294435145905
     },
     "window_bits": 4
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 4,
     "msm_only_ns_per_sig_median": 19676.3585,
     "msm_only_ns_per_sig_samples": [
      20088.9145,
      20037.5555,
      19682.3745,
      19564.021,
      19676.3585,
      19517.4,
      19534.604
     ],
     "n_batches_per_rep": 500,
     "n_terms": 9,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 380.15625,
      "mean_ns": 23423.21135714286,
      "median_ns": 23361.771,
      "min_ns": 23168.5205,
      "ns_per_op_samples": [
       23863.7915,
       23774.917,
       23361.771,
       23226.5625,
       23389.4375,
       23168.5205,
       23177.4795
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 42804.97398934353,
      "q1_ns": 23202.021,
      "q3_ns": 23582.17725,
      "reps": 7,
      "sd_ns": 284.79397926464827
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.4039301598778244,
      "ci95_low": 1.3517923111992356,
      "point": 1.391060891744894
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.7422042758156744,
      "ci95_low": 0.7126137811543148,
      "point": 0.725294606303606
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 4,
     "msm_only_ns_per_sig_median": 30477.128,
     "msm_only_ns_per_sig_samples": [
      30466.2575,
      30483.9385,
      30483.54,
      30472.5255,
      30481.272,
      30477.128,
      30457.9005
     ],
     "n_batches_per_rep": 500,
     "n_terms": 9,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 16.177499999997963,
      "mean_ns": 34096.863,
      "median_ns": 34094.854,
      "min_ns": 34080.4165,
      "ns_per_op_samples": [
       34084.8955,
       34117.0415,
       34105.896,
       34091.7915,
       34103.146,
       34094.854,
       34080.4165
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 29329.93935096481,
      "q1_ns": 34088.3435,
      "q3_ns": 34104.521,
      "reps": 7,
      "sd_ns": 12.726007831733503
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.9549732814715824,
      "ci95_low": 0.941163170107532,
      "point": 0.9531539862291243
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.505659962164206,
      "ci95_low": 0.4967567337917174,
      "point": 0.49697137579764966
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 8,
     "msm_only_ns_per_sig_median": 15227.732,
     "msm_only_ns_per_sig_samples": [
      15294.683,
      15241.145,
      15216.585,
      15215.4375,
      15209.7305,
      15238.08,
      15227.732
     ],
     "n_batches_per_rep": 250,
     "n_terms": 17,
     "op_counts_per_batch": {
      "adds": 662,
      "doublings": 273,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 82.75,
      "doublings": 34.125,
      "mixed_adds": 0.0,
      "total": 116.875
     },
     "per_signature": {
      "iqr_ns": 24.71875,
      "mean_ns": 18848.910714285714,
      "median_ns": 18839.167,
      "min_ns": 18824.8125,
      "ns_per_op_samples": [
       18925.375,
       18854.604,
       18826.4375,
       18825.354,
       18824.8125,
       18846.625,
       18839.167
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 53080.90320553982,
      "q1_ns": 18825.89575,
      "q3_ns": 18850.6145,
      "reps": 7,
      "sd_ns": 35.637183366835096
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.7293101788376053,
      "ci95_low": 1.703043648398586,
      "point": 1.7250044017338981
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.9156726544785756,
      "ci95_low": 0.898578060828008,
      "point": 0.8994116618850504
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 8,
     "msm_only_ns_per_sig_median": 39667.79,
     "msm_only_ns_per_sig_samples": [
      40840.5035,
      41513.021,
      40084.354,
      39661.0435,
      39667.79,
      39653.7705,
      39664.0675
     ],
     "n_batches_per_rep": 250,
     "n_terms": 17,
     "op_counts_per_batch": {
      "adds": 1492,
      "doublings": 252,
      "identity_adds": 581,
      "mixed_adds": 745
     },
     "op_counts_per_signature": {
      "adds": 186.5,
      "doublings": 31.5,
      "mixed_adds": 93.125,
      "total": 311.125
     },
     "per_signature": {
      "iqr_ns": 881.6977499999994,
      "mean_ns": 43819.02971428571,
      "median_ns": 43290.0,
      "min_ns": 43262.104,
      "ns_per_op_samples": [
       44577.5415,
       45306.3335,
       43741.5415,
       43277.7915,
       43277.896,
       43262.104,
       43290.0
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 23100.0231000231,
      "q1_ns": 43277.84375,
      "q3_ns": 44159.5415,
      "reps": 7,
      "sd_ns": 813.3490737469808
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.7522720143326745,
      "ci95_low": 0.7209628193605069,
      "point": 0.7506963732963733
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.3983292995574461,
      "ci95_low": 0.3800643312731816,
      "point": 0.39141063756063754
     },
     "window_bits": 4
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 8,
     "msm_only_ns_per_sig_median": 18167.6035,
     "msm_only_ns_per_sig_samples": [
      17793.0005,
      17714.141,
      18325.0785,
      18203.497,
      18234.184,
      18167.6035,
      17909.978
     ],
     "n_batches_per_rep": 250,
     "n_terms": 17,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 447.83350000000064,
      "mean_ns": 21760.074285714287,
      "median_ns": 21912.021,
      "min_ns": 21359.5625,
      "ns_per_op_samples": [
       21446.708,
       21359.5625,
       22088.5625,
       21951.5,
       21976.5205,
       21912.021,
       21585.6455
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 45637.05009227583,
      "q1_ns": 21516.17675,
      "q3_ns": 21964.01025,
      "reps": 7,
      "sd_ns": 289.68908605590394
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.517228774691202,
      "ci95_low": 1.460496214585016,
      "point": 1.4830966983830474
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.7986258275204232,
      "ci95_low": 0.7709288419884304,
      "point": 0.7732817753323621
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 8,
     "msm_only_ns_per_sig_median": 27605.0425,
     "msm_only_ns_per_sig_samples": [
      27611.515,
      27587.767,
      27625.4575,
      27605.0425,
      27596.411,
      27602.1285,
      27812.44
     ],
     "n_batches_per_rep": 250,
     "n_terms": 17,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 14.10425000000032,
      "mean_ns": 31259.532642857142,
      "median_ns": 31232.2915,
      "min_ns": 31209.604,
      "ns_per_op_samples": [
       31234.8125,
       31209.604,
       31239.104,
       31232.2915,
       31232.1665,
       31213.5415,
       31455.2085
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 32018.14378557526,
      "q1_ns": 31222.854,
      "q3_ns": 31236.95825,
      "reps": 7,
      "sd_ns": 87.00239098089739
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.042482234833878,
      "ci95_low": 1.0275878802676353,
      "point": 1.0405143023207248
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5519583151556264,
      "ci95_low": 0.5423437720877013,
      "point": 0.5425207593237275
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 16,
     "msm_only_ns_per_sig_median": 13652.0405,
     "msm_only_ns_per_sig_samples": [
      13702.6885,
      13652.0405,
      13825.751,
      13650.6455,
      13649.6005,
      13647.457,
      13661.605
     ],
     "n_batches_per_rep": 125,
     "n_terms": 33,
     "op_counts_per_batch": {
      "adds": 1296,
      "doublings": 289,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 81.0,
      "doublings": 18.0625,
      "mixed_adds": 0.0,
      "total": 99.0625
     },
     "per_signature": {
      "iqr_ns": 37.86475000000064,
      "mean_ns": 17299.675714285713,
      "median_ns": 17269.875,
      "min_ns": 17250.9585,
      "ns_per_op_samples": [
       17314.292,
       17250.9585,
       17480.375,
       17257.771,
       17252.625,
       17269.875,
       17271.8335
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 57904.29867037254,
      "q1_ns": 17255.198,
      "q3_ns": 17293.06275,
      "reps": 7,
      "sd_ns": 82.53512474085247
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.886497972420656,
      "ci95_low": 1.8537647973131097,
      "point": 1.8817534000680376
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.9989113047862268,
      "ci95_low": 0.9785172561488509,
      "point": 0.9811400777365209
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 16,
     "msm_only_ns_per_sig_median": 31886.127,
     "msm_only_ns_per_sig_samples": [
      31449.4375,
      32053.687,
      32149.106,
      31762.021,
      32138.5815,
      31886.127,
      31387.1465
     ],
     "n_batches_per_rep": 125,
     "n_terms": 33,
     "op_counts_per_batch": {
      "adds": 2429,
      "doublings": 255,
      "identity_adds": 897,
      "mixed_adds": 1228
     },
     "op_counts_per_signature": {
      "adds": 151.8125,
      "doublings": 15.9375,
      "mixed_adds": 76.75,
      "total": 244.5
     },
     "per_signature": {
      "iqr_ns": 550.2497500000027,
      "mean_ns": 35499.69335714286,
      "median_ns": 35558.1665,
      "min_ns": 35002.333,
      "ns_per_op_samples": [
       35062.6875,
       35743.208,
       35849.604,
       35429.625,
       35852.2295,
       35558.1665,
       35002.333
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 28122.93485379793,
      "q1_ns": 35246.15625,
      "q3_ns": 35796.406,
      "reps": 7,
      "sd_ns": 354.186555935771
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.9280396005012451,
      "ci95_low": 0.8964220448842416,
      "point": 0.913929181359787
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.4865660869964048,
      "ci95_low": 0.47259471820107135,
      "point": 0.4765196906314053
     },
     "window_bits": 5
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 16,
     "msm_only_ns_per_sig_median": 17277.2315,
     "msm_only_ns_per_sig_samples": [
      17342.459,
      17277.2315,
      17487.397,
      17162.545,
      17190.583,
      17357.042,
      17236.247
     ],
     "n_batches_per_rep": 125,
     "n_terms": 33,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 172.32274999999936,
      "mean_ns": 21030.5535,
      "median_ns": 21011.583,
      "min_ns": 20890.9375,
      "ns_per_op_samples": [
       21099.875,
       21011.583,
       21260.8335,
       20894.625,
       20890.9375,
       21097.708,
       20958.3125
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 47592.796792131274,
      "q1_ns": 20926.46875,
      "q3_ns": 21098.7915,
      "reps": 7,
      "sd_ns": 132.848223016594
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.5573173722907208,
      "ci95_low": 1.52117607331797,
      "point": 1.5466538623006179
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8225306307461538,
      "ci95_low": 0.8029342590892126,
      "point": 0.8064202730465382
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 16,
     "msm_only_ns_per_sig_median": 26715.4365,
     "msm_only_ns_per_sig_samples": [
      29196.8735,
      27781.8345,
      26887.562,
      26715.4365,
      26333.733,
      26212.483,
      26173.6055
     ],
     "n_batches_per_rep": 125,
     "n_terms": 33,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 1207.96875,
      "mean_ns": 30773.3185,
      "median_ns": 30383.167,
      "min_ns": 29777.25,
      "ns_per_op_samples": [
       33230.875,
       31623.3125,
       30595.625,
       30383.167,
       29975.375,
       29827.625,
       29777.25
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 32912.96131176845,
      "q1_ns": 29901.5,
      "q3_ns": 31109.46875,
      "reps": 7,
      "sd_ns": 1256.2556404814998
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0909203297278949,
      "ci95_low": 1.016299288697223,
      "point": 1.0695937655215468
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5751005283503542,
      "ci95_low": 0.5357545481675899,
      "point": 0.5576826964746631
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 32,
     "msm_only_ns_per_sig_median": 12876.077380952382,
     "msm_only_ns_per_sig_samples": [
      12876.077380952382,
      12865.44990079365,
      12856.479662698413,
      12857.289186507936,
      13016.35119047619,
      13163.21626984127,
      13210.130456349207
     ],
     "n_batches_per_rep": 63,
     "n_terms": 65,
     "op_counts_per_batch": {
      "adds": 2565,
      "doublings": 321,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 80.15625,
      "doublings": 10.03125,
      "mixed_adds": 0.0,
      "total": 90.1875
     },
     "per_signature": {
      "iqr_ns": 303.49925595238165,
      "mean_ns": 16612.959396258502,
      "median_ns": 16477.96775793651,
      "min_ns": 16456.494047619046,
      "ns_per_op_samples": [
       16477.96775793651,
       16463.231646825396,
       16456.494047619046,
       16457.299603174604,
       16661.065476190477,
       16866.464285714286,
       16908.192956349205
      ],
      "ops_per_rep": 2016,
      "ops_per_s": 60687.095319649256,
      "q1_ns": 16460.265625,
      "q3_ns": 16763.76488095238,
      "reps": 7,
      "sd_ns": 201.28516122787462
     },
     "sigs_per_rep": 2016,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.9775430910782281,
      "ci95_low": 1.9054823498023339,
      "point": 1.9721877404662183
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0471123999111176,
      "ci95_low": 1.0044982287336874,
      "point": 1.0282922474975076
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 32,
     "msm_only_ns_per_sig_median": 22151.82738095238,
     "msm_only_ns_per_sig_samples": [
      22171.37896825397,
      22151.82738095238,
      22136.035714285714,
      22146.720734126986,
      22139.34771825397,
      22470.196428571428,
      22722.720238095237
     ],
     "n_batches_per_rep": 63,
     "n_terms": 65,
     "op_counts_per_batch": {
      "adds": 2811,
      "doublings": 255,
      "identity_adds": 1254,
      "mixed_adds": 2420
     },
     "op_counts_per_signature": {
      "adds": 87.84375,
      "doublings": 7.96875,
      "mixed_adds": 75.625,
      "total": 171.4375
     },
     "per_signature": {
      "iqr_ns": 206.09102182539937,
      "mean_ns": 25903.740362811794,
      "median_ns": 25749.565972222223,
      "min_ns": 25743.283234126986,
      "ns_per_op_samples": [
       25777.405753968254,
       25747.82986111111,
       25743.283234126986,
       25749.04910714286,
       25749.565972222223,
       26131.65525793651,
       26427.393353174604
      ],
      "ops_per_rep": 2016,
      "ops_per_s": 38835.60604783657,
      "q1_ns": 25748.439484126982,
      "q3_ns": 25954.53050595238,
      "reps": 7,
      "sd_ns": 270.76182310525957
     },
     "sigs_per_rep": 2016,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.2643879937589277,
      "ci95_low": 1.229878080158702,
      "point": 1.2620657775380517
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.6694947812739963,
      "ci95_low": 0.6483452093932857,
      "point": 0.6580369750029497
     },
     "window_bits": 5
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 32,
     "msm_only_ns_per_sig_median": 16860.328373015873,
     "msm_only_ns_per_sig_samples": [
      16905.174603174604,
      16903.646825396827,
      16860.328373015873,
      17010.93005952381,
      16828.684027777777,
      16443.740575396827,
      16427.414186507936
     ],
     "n_batches_per_rep": 63,
     "n_terms": 65,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 323.55753968254066,
      "mean_ns": 20458.59615929705,
      "median_ns": 20577.62896825397,
      "min_ns": 20044.97371031746,
      "ns_per_op_samples": [
       20617.352678571428,
       20617.663194444445,
       20577.62896825397,
       20764.65376984127,
       20524.44990079365,
       20063.45089285714,
       20044.97371031746
      ],
      "ops_per_rep": 2016,
      "ops_per_s": 48596.463739468956,
      "q1_ns": 20293.950396825396,
      "q3_ns": 20617.507936507936,
      "reps": 7,
      "sd_ns": 285.7464061663041
     },
     "sigs_per_rep": 2016,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.6218327880765777,
      "ci95_low": 1.5567772206447976,
      "point": 1.5792706754570984
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8465172738673182,
      "ci95_low": 0.8217135152622473,
      "point": 0.8234265729127747
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 32,
     "msm_only_ns_per_sig_median": 25570.581845238095,
     "msm_only_ns_per_sig_samples": [
      25529.967261904763,
      25540.199404761905,
      25570.581845238095,
      25567.749503968254,
      25843.398313492064,
      26723.422123015873,
      28419.64236111111
     ],
     "n_batches_per_rep": 63,
     "n_terms": 65,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 832.5376984126997,
      "mean_ns": 29866.69430272109,
      "median_ns": 29182.97371031746,
      "min_ns": 29138.49603174603,
      "ns_per_op_samples": [
       29138.49603174603,
       29155.423115079364,
       29182.97371031746,
       29169.312003968254,
       29494.068452380954,
       30495.742063492064,
       32430.84474206349
      ],
      "ops_per_rep": 2016,
      "ops_per_s": 34266.55590093124,
      "q1_ns": 29162.36755952381,
      "q3_ns": 29994.90525793651,
      "reps": 7,
      "sd_ns": 1231.4905554221282
     },
     "sigs_per_rep": 2016,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1161434909878987,
      "ci95_low": 1.0538766340916446,
      "point": 1.1135824033076747
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5909928214163841,
      "ci95_low": 0.5555639034697402,
      "point": 0.5806182285669365
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 64,
     "msm_only_ns_per_sig_median": 12562.376953125,
     "msm_only_ns_per_sig_samples": [
      12580.32275390625,
      12572.2646484375,
      12572.97802734375,
      12539.57080078125,
      12551.3916015625,
      12562.376953125,
      12560.60791015625
     ],
     "n_batches_per_rep": 32,
     "n_terms": 129,
     "op_counts_per_batch": {
      "adds": 5059,
      "doublings": 385,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 79.046875,
      "doublings": 6.015625,
      "mixed_adds": 0.0,
      "total": 85.0625
     },
     "per_signature": {
      "iqr_ns": 25.1162109375,
      "mean_ns": 16165.393624441964,
      "median_ns": 16163.39111328125,
      "min_ns": 16149.06787109375,
      "ns_per_op_samples": [
       16181.33544921875,
       16176.2900390625,
       16180.806640625,
       16149.06787109375,
       16149.08837890625,
       16163.39111328125,
       16157.77587890625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 61868.20531604367,
      "q1_ns": 16153.43212890625,
      "q3_ns": 16178.54833984375,
      "reps": 7,
      "sd_ns": 14.170780083310076
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.014947329318155,
      "ci95_low": 1.9841771458408004,
      "point": 2.0105710350161052
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0669076071605301,
      "ci95_low": 1.0470635906038852,
      "point": 1.048305171931229
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 64,
     "msm_only_ns_per_sig_median": 18316.42822265625,
     "msm_only_ns_per_sig_samples": [
      18331.134765625,
      18490.904296875,
      18315.93896484375,
      18304.6884765625,
      18303.8544921875,
      18316.42822265625,
      18508.64697265625
     ],
     "n_batches_per_rep": 32,
     "n_terms": 129,
     "op_counts_per_batch": {
      "adds": 4710,
      "doublings": 252,
      "identity_adds": 2063,
      "mixed_adds": 4098
     },
     "op_counts_per_signature": {
      "adds": 73.59375,
      "doublings": 3.9375,
      "mixed_adds": 64.03125,
      "total": 141.5625
     },
     "per_signature": {
      "iqr_ns": 133.18896484375,
      "mean_ns": 21983.33740234375,
      "median_ns": 21915.140625,
      "min_ns": 21902.9951171875,
      "ns_per_op_samples": [
       21941.5078125,
       22162.29248046875,
       21915.140625,
       21902.9951171875,
       21904.1953125,
       21914.08251953125,
       22143.14794921875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 45630.55364834101,
      "q1_ns": 21909.138916015625,
      "q3_ns": 22042.327880859375,
      "reps": 7,
      "sd_ns": 116.53285507252042
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.4856542577579197,
      "ci95_low": 1.4514083577323482,
      "point": 1.4828855792477946
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.7866564335803525,
      "ci95_low": 0.7651275933690249,
      "point": 0.7731716985046725
     },
     "window_bits": 6
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 64,
     "msm_only_ns_per_sig_median": 16553.30419921875,
     "msm_only_ns_per_sig_samples": [
      16564.73876953125,
      16574.400390625,
      16641.93017578125,
      16364.2998046875,
      16553.30419921875,
      16373.16796875,
      16352.009765625
     ],
     "n_batches_per_rep": 32,
     "n_terms": 129,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 241.556884765625,
      "mean_ns": 20131.957938058036,
      "median_ns": 20212.68701171875,
      "min_ns": 19971.86279296875,
      "ns_per_op_samples": [
       20217.97705078125,
       20232.46240234375,
       20321.390625,
       19974.8330078125,
       20212.68701171875,
       19992.49267578125,
       19971.86279296875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 49473.877442431476,
      "q1_ns": 19983.662841796875,
      "q3_ns": 20225.2197265625,
      "reps": 7,
      "sd_ns": 147.00998825418478
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.629028011762262,
      "ci95_low": 1.5875290054679205,
      "point": 1.6077845553715235
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.862266365658496,
      "ci95_low": 0.837383020320719,
      "point": 0.8382936167851531
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 64,
     "msm_only_ns_per_sig_median": 25216.51171875,
     "msm_only_ns_per_sig_samples": [
      25266.07177734375,
      25185.2216796875,
      25213.44287109375,
      25216.51171875,
      25169.353515625,
      25900.2080078125,
      25795.55419921875
     ],
     "n_batches_per_rep": 32,
     "n_terms": 129,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 370.930908203125,
      "mean_ns": 29023.91427176339,
      "median_ns": 28822.20458984375,
      "min_ns": 28770.6708984375,
      "ns_per_op_samples": [
       28868.1640625,
       28794.88134765625,
       28822.20458984375,
       28819.64111328125,
       28770.6708984375,
       29603.61767578125,
       29488.22021484375
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 34695.47226628097,
      "q1_ns": 28807.26123046875,
      "q3_ns": 29178.192138671875,
      "reps": 7,
      "sd_ns": 359.37370953047406
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1300467644624814,
      "ci95_low": 1.0898843594440477,
      "point": 1.1275211755124168
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5981633821267691,
      "ci95_low": 0.5745458144493776,
      "point": 0.5878858588759971
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 128,
     "msm_only_ns_per_sig_median": 12476.25732421875,
     "msm_only_ns_per_sig_samples": [
      12512.04638671875,
      12630.6357421875,
      12476.25732421875,
      12473.89697265625,
      12457.23583984375,
      12460.95947265625,
      12493.89599609375
     ],
     "n_batches_per_rep": 16,
     "n_terms": 257,
     "op_counts_per_batch": {
      "adds": 10120,
      "doublings": 513,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 79.0625,
      "doublings": 4.0078125,
      "mixed_adds": 0.0,
      "total": 83.0703125
     },
     "per_signature": {
      "iqr_ns": 46.05078125,
      "mean_ns": 16105.648856026786,
      "median_ns": 16073.64892578125,
      "min_ns": 16054.30078125,
      "ns_per_op_samples": [
       16120.462890625,
       16259.19580078125,
       16073.64892578125,
       16070.76025390625,
       16054.30078125,
       16059.38720703125,
       16101.7861328125
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 62213.62707481155,
      "q1_ns": 16065.07373046875,
      "q3_ns": 16111.12451171875,
      "reps": 7,
      "sd_ns": 71.68102438331745
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.0262020013910162,
      "ci95_low": 1.993300313204662,
      "point": 2.0217964290532415
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0726844111690252,
      "ci95_low": 1.0509830651235808,
      "point": 1.054158055724515
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 128,
     "msm_only_ns_per_sig_median": 14093.8515625,
     "msm_only_ns_per_sig_samples": [
      13655.8642578125,
      13661.1943359375,
      14370.626953125,
      14052.470703125,
      14165.466796875,
      14093.8515625,
      14112.48779296875
     ],
     "n_batches_per_rep": 16,
     "n_terms": 257,
     "op_counts_per_batch": {
      "adds": 5163,
      "doublings": 252,
      "identity_adds": 2506,
      "mixed_adds": 8180
     },
     "op_counts_per_signature": {
      "adds": 40.3359375,
      "doublings": 1.96875,
      "mixed_adds": 63.90625,
      "total": 106.2109375
     },
     "per_signature": {
      "iqr_ns": 339.192626953125,
      "mean_ns": 17713.698660714286,
      "median_ns": 17814.798828125,
      "min_ns": 17256.34765625,
      "ns_per_op_samples": [
       17256.34765625,
       17265.56396484375,
       18164.73388671875,
       17775.24853515625,
       17887.51220703125,
       17831.685546875,
       17814.798828125
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 56133.106505881864,
      "q1_ns": 17520.40625,
      "q3_ns": 17859.598876953125,
      "reps": 7,
      "sd_ns": 334.556698510094
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.8846510062606274,
      "ci95_low": 1.794359362470954,
      "point": 1.8241938241084457
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.9827895882550489,
      "ci95_low": 0.9471598567709311,
      "point": 0.9511287027978954
     },
     "window_bits": 6
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 128,
     "msm_only_ns_per_sig_median": 16316.4072265625,
     "msm_only_ns_per_sig_samples": [
      16406.6572265625,
      16329.244140625,
      16524.76025390625,
      16316.4072265625,
      16289.3466796875,
      16296.61083984375,
      16310.54638671875
     ],
     "n_batches_per_rep": 16,
     "n_terms": 257,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 69.936279296875,
      "mean_ns": 19958.385672433036,
      "median_ns": 19917.92822265625,
      "min_ns": 19889.46533203125,
      "ns_per_op_samples": [
       20015.70654296875,
       19923.4619140625,
       20162.841796875,
       19917.92822265625,
       19890.07568359375,
       19889.46533203125,
       19909.22021484375
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 50206.024884782935,
      "q1_ns": 19899.64794921875,
      "q3_ns": 19969.584228515625,
      "reps": 7,
      "sd_ns": 99.81480624824657
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.635969767919995,
      "ci95_low": 1.6035719214356245,
      "point": 1.6315776237728665
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8658728877360651,
      "ci95_low": 0.8464519333169188,
      "point": 0.8506992449509053
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 128,
     "msm_only_ns_per_sig_median": 25191.00048828125,
     "msm_only_ns_per_sig_samples": [
      25191.00048828125,
      24960.10400390625,
      24988.2607421875,
      25003.7646484375,
      25421.6923828125,
      25714.0283203125,
      25586.873046875
     ],
     "n_batches_per_rep": 16,
     "n_terms": 257,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 616.0888671875,
      "mean_ns": 28914.22530691964,
      "median_ns": 28822.65185546875,
      "min_ns": 28558.87890625,
      "ns_per_op_samples": [
       28822.65185546875,
       28558.87890625,
       28584.65576171875,
       28608.5615234375,
       29113.72900390625,
       29399.43408203125,
       29311.666015625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 34694.93386710224,
      "q1_ns": 28596.608642578125,
      "q3_ns": 29212.697509765625,
      "reps": 7,
      "sd_ns": 358.2112022789739
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1383576829208402,
      "ci95_low": 1.0964491060613197,
      "point": 1.1275036788064998
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.6025767491272537,
      "ci95_low": 0.5780065005847381,
      "point": 0.5878767361506693
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 256,
     "msm_only_ns_per_sig_median": 12508.30126953125,
     "msm_only_ns_per_sig_samples": [
      12527.24169921875,
      12508.30126953125,
      12507.06005859375,
      12503.01123046875,
      12520.20361328125,
      12488.138671875,
      12542.50048828125
     ],
     "n_batches_per_rep": 8,
     "n_terms": 513,
     "op_counts_per_batch": {
      "adds": 20212,
      "doublings": 769,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 78.953125,
      "doublings": 3.00390625,
      "mixed_adds": 0.0,
      "total": 81.95703125
     },
     "per_signature": {
      "iqr_ns": 26.9775390625,
      "mean_ns": 16116.76304408482,
      "median_ns": 16127.685546875,
      "min_ns": 16088.37890625,
      "ns_per_op_samples": [
       16130.28955078125,
       16127.685546875,
       16104.89892578125,
       16099.52783203125,
       16128.09228515625,
       16088.37890625,
       16138.46826171875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 62005.17719008765,
      "q1_ns": 16102.21337890625,
      "q3_ns": 16129.19091796875,
      "reps": 7,
      "sd_ns": 18.908572767749146
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.021543267675036,
      "ci95_low": 1.9901067300774715,
      "point": 2.0150222984907433
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0704105675822329,
      "ci95_low": 1.0503105010399174,
      "point": 1.0506260461708472
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 256,
     "msm_only_ns_per_sig_median": 11731.14013671875,
     "msm_only_ns_per_sig_samples": [
      11731.14013671875,
      11721.41552734375,
      11720.15283203125,
      11732.421875,
      11760.82470703125,
      11736.26708984375,
      11728.33251953125
     ],
     "n_batches_per_rep": 8,
     "n_terms": 513,
     "op_counts_per_batch": {
      "adds": 8866,
      "doublings": 252,
      "identity_adds": 4282,
      "mixed_adds": 14164
     },
     "op_counts_per_signature": {
      "adds": 34.6328125,
      "doublings": 0.984375,
      "mixed_adds": 55.328125,
      "total": 90.9453125
     },
     "per_signature": {
      "iqr_ns": 13.89599609375,
      "mean_ns": 15330.798897879464,
      "median_ns": 15327.1279296875,
      "min_ns": 15313.06982421875,
      "ns_per_op_samples": [
       15325.33740234375,
       15316.5283203125,
       15313.06982421875,
       15327.1279296875,
       15363.87109375,
       15337.82958984375,
       15331.828125
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 65243.795483893286,
      "q1_ns": 15320.932861328125,
      "q3_ns": 15334.828857421875,
      "reps": 7,
      "sd_ns": 16.859880661777215
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.124953577142075,
      "ci95_low": 2.0934636586268147,
      "point": 2.120269769331963
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1248596717592403,
      "ci95_low": 1.1045769155773095,
      "point": 1.105501733771036
     },
     "window_bits": 7
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 256,
     "msm_only_ns_per_sig_median": 16294.82080078125,
     "msm_only_ns_per_sig_samples": [
      16308.919921875,
      16291.85009765625,
      16294.82080078125,
      16403.80908203125,
      16372.86376953125,
      16285.64501953125,
      16283.32470703125
     ],
     "n_batches_per_rep": 8,
     "n_terms": 513,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 64.015625,
      "mean_ns": 19925.89453125,
      "median_ns": 19898.3154296875,
      "min_ns": 19883.544921875,
      "ns_per_op_samples": [
       19910.013671875,
       19887.939453125,
       19898.3154296875,
       20007.52734375,
       19999.93896484375,
       19893.98193359375,
       19883.544921875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 50255.5104995491,
      "q1_ns": 19890.960693359375,
      "q3_ns": 19954.976318359375,
      "reps": 7,
      "sd_ns": 53.869895766284685
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.6365124945159122,
      "ci95_low": 1.6069424039990357,
      "point": 1.6331857897636297
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.866536124218038,
      "ci95_low": 0.8471192602028205,
      "point": 0.8515377374468581
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 256,
     "msm_only_ns_per_sig_median": 25624.47021484375,
     "msm_only_ns_per_sig_samples": [
      25624.47021484375,
      25446.77734375,
      25534.95361328125,
      25670.36962890625,
      25518.53515625,
      27657.45068359375,
      27548.4619140625
     ],
     "n_batches_per_rep": 8,
     "n_terms": 513,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 1187.02197265625,
      "mean_ns": 29932.3701171875,
      "median_ns": 29308.89892578125,
      "min_ns": 29177.67333984375,
      "ns_per_op_samples": [
       29308.89892578125,
       29177.67333984375,
       29286.80419921875,
       29359.70068359375,
       29237.12158203125,
       31618.123046875,
       31538.26904296875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 34119.33019156721,
      "q1_ns": 29261.962890625,
      "q3_ns": 30448.98486328125,
      "reps": 7,
      "sd_ns": 1125.9835709484
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1129536951407142,
      "ci95_low": 1.019039756310441,
      "point": 1.1087979143226634
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5886218886408869,
      "ci95_low": 0.5371992190477296,
      "point": 0.5781236116343917
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 512,
     "msm_only_ns_per_sig_median": 12536.1328125,
     "msm_only_ns_per_sig_samples": [
      12560.11962890625,
      12567.1796875,
      12540.58837890625,
      12529.52099609375,
      12536.1328125,
      12535.03369140625,
      12527.77001953125
     ],
     "n_batches_per_rep": 4,
     "n_terms": 1025,
     "op_counts_per_batch": {
      "adds": 40393,
      "doublings": 1281,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 78.892578125,
      "doublings": 2.501953125,
      "mixed_adds": 0.0,
      "total": 81.39453125
     },
     "per_signature": {
      "iqr_ns": 22.29833984375,
      "mean_ns": 16144.060477120536,
      "median_ns": 16138.712890625,
      "min_ns": 16123.31103515625,
      "ns_per_op_samples": [
       16165.568359375,
       16170.30859375,
       16144.775390625,
       16128.4990234375,
       16137.248046875,
       16138.712890625,
       16123.31103515625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 61962.80996986453,
      "q1_ns": 16132.87353515625,
      "q3_ns": 16155.171875,
      "reps": 7,
      "sd_ns": 17.7940429953434
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.0175195753004904,
      "ci95_low": 1.9880502653903733,
      "point": 2.013645463565928
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0688442845765722,
      "ci95_low": 1.0480505926767818,
      "point": 1.0499081689372445
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 512,
     "msm_only_ns_per_sig_median": 9719.8896484375,
     "msm_only_ns_per_sig_samples": [
      9499.28857421875,
      9778.1376953125,
      9719.8896484375,
      9886.169921875,
      9735.45361328125,
      9700.05322265625,
      9627.767578125
     ],
     "n_batches_per_rep": 4,
     "n_terms": 1025,
     "op_counts_per_batch": {
      "adds": 9163,
      "doublings": 252,
      "identity_adds": 4577,
      "mixed_adds": 28313
     },
     "op_counts_per_signature": {
      "adds": 17.896484375,
      "doublings": 0.4921875,
      "mixed_adds": 55.298828125,
      "total": 73.6875
     },
     "per_signature": {
      "iqr_ns": 111.60302734375,
      "mean_ns": 13386.52992466518,
      "median_ns": 13426.04541015625,
      "min_ns": 13088.48095703125,
      "ns_per_op_samples": [
       13088.48095703125,
       13465.80029296875,
       13452.5556640625,
       13577.67724609375,
       13426.04541015625,
       13398.82421875,
       13296.32568359375
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 74482.09576615473,
      "q1_ns": 13347.574951171875,
      "q3_ns": 13459.177978515625,
      "reps": 7,
      "sd_ns": 155.91830313705242
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.447259737338591,
      "ci95_low": 2.385912818464951,
      "point": 2.4204927815465953
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.2964389493101882,
      "ci95_low": 1.2581363254619387,
      "point": 1.2620370319306708
     },
     "window_bits": 7
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 512,
     "msm_only_ns_per_sig_median": 16351.60302734375,
     "msm_only_ns_per_sig_samples": [
      16341.41015625,
      16374.41015625,
      16351.60302734375,
      16345.70361328125,
      16309.7333984375,
      16979.49267578125,
      16945.71923828125
     ],
     "n_batches_per_rep": 4,
     "n_terms": 1025,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 361.816162109375,
      "mean_ns": 20137.71561104911,
      "median_ns": 19945.86181640625,
      "min_ns": 19904.94775390625,
      "ns_per_op_samples": [
       19936.421875,
       19969.74658203125,
       19945.86181640625,
       19941.650390625,
       19904.94775390625,
       20633.4228515625,
       20631.9580078125
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 50135.71282126606,
      "q1_ns": 19939.0361328125,
      "q3_ns": 20300.852294921875,
      "reps": 7,
      "sd_ns": 338.6651006612408
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.6326512909339583,
      "ci95_low": 1.5577169160498647,
      "point": 1.6292926472231657
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8644647590504524,
      "ci95_low": 0.8211694446830793,
      "point": 0.8495078656397168
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 1024,
     "msm_only_ns_per_sig_median": 12596.31396484375,
     "msm_only_ns_per_sig_samples": [
      12596.31396484375,
      12577.25048828125,
      12601.94873046875,
      12658.04052734375,
      12638.9365234375,
      12582.3974609375,
      12593.34326171875
     ],
     "n_batches_per_rep": 2,
     "n_terms": 2049,
     "op_counts_per_batch": {
      "adds": 80876,
      "doublings": 2305,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 78.98046875,
      "doublings": 2.2509765625,
      "mixed_adds": 0.0,
      "total": 81.2314453125
     },
     "per_signature": {
      "iqr_ns": 37.4345703125,
      "mean_ns": 16205.447265625,
      "median_ns": 16192.42333984375,
      "min_ns": 16174.76416015625,
      "ns_per_op_samples": [
       16192.42333984375,
       16174.76416015625,
       16202.880859375,
       16268.65625,
       16235.697265625,
       16175.5576171875,
       16188.1513671875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 61757.27863656815,
      "q1_ns": 16181.8544921875,
      "q3_ns": 16219.2890625,
      "reps": 7,
      "sd_ns": 34.69063138946556
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.0116501248417404,
      "ci95_low": 1.9795115340100427,
      "point": 2.0069661790545545
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.064905659020598,
      "ci95_low": 1.0435236148355098,
      "point": 1.0464256118049038
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 1024,
     "msm_only_ns_per_sig_median": 8207.11328125,
     "msm_only_ns_per_sig_samples": [
      8207.11328125,
      8202.5556640625,
      8211.24267578125,
      8202.9013671875,
      8207.62109375,
      8205.81103515625,
      8211.9140625
     ],
     "n_batches_per_rep": 2,
     "n_terms": 2049,
     "op_counts_per_batch": {
      "adds": 16281,
      "doublings": 248,
      "identity_adds": 8122,
      "mixed_adds": 48971
     },
     "op_counts_per_signature": {
      "adds": 15.8994140625,
      "doublings": 0.2421875,
      "mixed_adds": 47.8232421875,
      "total": 63.96484375
     },
     "per_signature": {
      "iqr_ns": 5.666015625,
      "mean_ns": 11802.115234375,
      "median_ns": 11799.31640625,
      "min_ns": 11794.53515625,
      "ns_per_op_samples": [
       11798.2177734375,
       11796.81396484375,
       11801.65576171875,
       11794.53515625,
       11804.7080078125,
       11799.31640625,
       11819.5595703125
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 84750.67246016966,
      "q1_ns": 11797.515869140625,
      "q3_ns": 11803.181884765625,
      "reps": 7,
      "sd_ns": 8.364838404267926
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.759463388894062,
      "ci95_low": 2.71911570044655,
      "point": 2.754197351872543
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.4613143897474634,
      "ci95_low": 1.4351742108985417,
      "point": 1.4360295051520795
     },
     "window_bits": 8
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 1024,
     "msm_only_ns_per_sig_median": 16590.4541015625,
     "msm_only_ns_per_sig_samples": [
      16590.4541015625,
      16386.29150390625,
      16371.94775390625,
      16353.455078125,
      16716.1865234375,
      17243.65234375,
      16653.13720703125
     ],
     "n_batches_per_rep": 2,
     "n_terms": 2049,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 337.992431640625,
      "mean_ns": 20236.339704241072,
      "median_ns": 20192.81005859375,
      "min_ns": 19948.99462890625,
      "ns_per_op_samples": [
       20192.81005859375,
       19982.177734375,
       19965.2099609375,
       19948.99462890625,
       20311.97119140625,
       20941.81298828125,
       20311.4013671875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 49522.57744703617,
      "q1_ns": 19973.69384765625,
      "q3_ns": 20311.686279296875,
      "reps": 7,
      "sd_ns": 349.1939758426903
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.629813188224145,
      "ci95_low": 1.580227007470356,
      "point": 1.6093671908813654
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.862711473652058,
      "ci95_low": 0.8341035753135686,
      "point": 0.8391187977717258
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 2048,
     "msm_only_ns_per_sig_median": 12612.26416015625,
     "msm_only_ns_per_sig_samples": [
      12643.5341796875,
      12800.740234375,
      12607.666015625,
      12625.4072265625,
      12612.26416015625,
      12608.11376953125,
      12608.94775390625
     ],
     "n_batches_per_rep": 1,
     "n_terms": 4097,
     "op_counts_per_batch": {
      "adds": 161617,
      "doublings": 4353,
      "identity_adds": 1,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 78.91455078125,
      "doublings": 2.12548828125,
      "mixed_adds": 0.0,
      "total": 81.0400390625
     },
     "per_signature": {
      "iqr_ns": 34.637451171875,
      "mean_ns": 16243.2744140625,
      "median_ns": 16211.28369140625,
      "min_ns": 16202.04638671875,
      "ns_per_op_samples": [
       16252.72607421875,
       16398.09130859375,
       16211.28369140625,
       16227.6611328125,
       16206.4208984375,
       16202.04638671875,
       16204.69140625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 61685.429669589284,
      "q1_ns": 16205.55615234375,
      "q3_ns": 16240.193603515625,
      "reps": 7,
      "sd_ns": 70.55891857626114
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.00887970292928,
      "ci95_low": 1.9774374989916805,
      "point": 2.0046312567602094
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0637051887046842,
      "ci95_low": 1.0424302620146386,
      "point": 1.0452081909455608
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 2048,
     "msm_only_ns_per_sig_median": 7116.53662109375,
     "msm_only_ns_per_sig_samples": [
      7117.1669921875,
      7116.53662109375,
      7114.11572265625,
      7116.353515625,
      7113.56591796875,
      7133.23974609375,
      7121.337890625
     ],
     "n_batches_per_rep": 1,
     "n_terms": 4097,
     "op_counts_per_batch": {
      "adds": 16351,
      "doublings": 248,
      "identity_adds": 8192,
      "mixed_adds": 97903
     },
     "op_counts_per_signature": {
      "adds": 7.98388671875,
      "doublings": 0.12109375,
      "mixed_adds": 47.80419921875,
      "total": 55.9091796875
     },
     "per_signature": {
      "iqr_ns": 5.014892578125,
      "mean_ns": 10715.921944754464,
      "median_ns": 10711.080078125,
      "min_ns": 10707.2548828125,
      "ns_per_op_samples": [
       10710.87646484375,
       10710.75439453125,
       10707.2548828125,
       10716.59326171875,
       10711.080078125,
       10739.8271484375,
       10715.0673828125
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 93361.26634346407,
      "q1_ns": 10710.8154296875,
      "q3_ns": 10715.830322265625,
      "reps": 7,
      "sd_ns": 10.979995322622296
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 3.039597189535407,
      "ci95_low": 2.9954664635599566,
      "point": 3.0340213837416097
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.6094718351558803,
      "ci95_low": 1.5808953541718012,
      "point": 1.5819288415745012
     },
     "window_bits": 8
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 2048,
     "msm_only_ns_per_sig_median": 16532.30810546875,
     "msm_only_ns_per_sig_samples": [
      16380.5947265625,
      17224.955078125,
      17976.62353515625,
      16838.6025390625,
      16349.12109375,
      16370.462890625,
      16532.30810546875
     ],
     "n_batches_per_rep": 1,
     "n_terms": 4097,
     "op_counts_per_batch": {
      "adds": 0,
      "doublings": 0,
      "identity_adds": 0,
      "mixed_adds": 0
     },
     "op_counts_per_signature": {
      "adds": 0.0,
      "doublings": 0.0,
      "mixed_adds": 0.0,
      "total": 0.0
     },
     "per_signature": {
      "iqr_ns": 706.06494140625,
      "mean_ns": 20436.096330915178,
      "median_ns": 20122.6806640625,
      "min_ns": 19936.11669921875,
      "ns_per_op_samples": [
       19988.38330078125,
       20821.26904296875,
       21693.888671875,
       20534.7900390625,
       19936.11669921875,
       19955.5458984375,
       20122.6806640625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 49695.1681882981,
      "q1_ns": 19971.964599609375,
      "q3_ns": 20678.029541015625,
      "reps": 7,
      "sd_ns": 648.0386725808311
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.6306024733980249,
      "ci95_low": 1.5435538503284991,
      "point": 1.614975983693773
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8624436374164496,
      "ci95_low": 0.8137032120874185,
      "point": 0.8420432040280263
     },
     "window_bits": 0
    }
   ],
   "single_verify_reference_ns": {
    "k256_verify_raw": 32497.646,
    "libsecp256k1_schnorr_verify": 16944.1665
   },
   "sizes": [
    1,
    2,
    4,
    8,
    16,
    32,
    64,
    128,
    256,
    512,
    1024,
    2048
   ]
  },
  "python_baselines": {
   "seed": 34,
   "ops": 20,
   "reps": 7,
   "python": "3.14.5",
   "results": {
    "wp34_pure_python_ecdsa_sign": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      4615279.2,
      4589406.25,
      4673427.1,
      4671043.75,
      4623656.25,
      4576283.35,
      4673160.45
     ],
     "median_ns": 4623656.25,
     "q1_ns": 4602342.725,
     "q3_ns": 4672102.1,
     "iqr_ns": 69759.375,
     "min_ns": 4576283.35,
     "mean_ns": 4631750.907142857,
     "sd_ns": 41235.38788650303,
     "ops_per_s": 216.27905404948734
    },
    "wp34_pure_python_ecdsa_verify": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      9114654.2,
      9192429.15,
      9100618.75,
      9098322.9,
      9096145.8,
      9220681.25,
      9285858.35
     ],
     "median_ns": 9114654.2,
     "q1_ns": 9099470.825,
     "q3_ns": 9206555.2,
     "iqr_ns": 107084.375,
     "min_ns": 9096145.8,
     "mean_ns": 9158387.2,
     "sd_ns": 75299.15694567886,
     "ops_per_s": 109.71343268294261
    },
    "wp34_pure_python_ecdsa_verify_shamir": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      5657356.25,
      5519695.85,
      5494897.95,
      5747664.55,
      5854495.8,
      5724783.35,
      5723125.0
     ],
     "median_ns": 5723125.0,
     "q1_ns": 5588526.05,
     "q3_ns": 5736223.949999999,
     "iqr_ns": 147697.89999999944,
     "min_ns": 5494897.95,
     "mean_ns": 5674574.107142857,
     "sd_ns": 128555.71830207325,
     "ops_per_s": 174.72971497215246
    },
    "wp34_pure_python_schnorr_sign": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      18541975.0,
      18548685.4,
      18528050.0,
      19253277.1,
      18509164.55,
      18715677.1,
      18492147.9
     ],
     "median_ns": 18541975.0,
     "q1_ns": 18518607.275,
     "q3_ns": 18632181.25,
     "iqr_ns": 113573.97500000149,
     "min_ns": 18492147.9,
     "mean_ns": 18655568.15,
     "sd_ns": 273738.7658386299,
     "ops_per_s": 53.931687428119176
    },
    "wp34_pure_python_schnorr_verify": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      9274020.85,
      9219837.5,
      9217985.45,
      9216875.0,
      9212522.9,
      9509041.65,
      9392354.15
     ],
     "median_ns": 9219837.5,
     "q1_ns": 9217430.225,
     "q3_ns": 9333187.5,
     "iqr_ns": 115757.27500000037,
     "min_ns": 9212522.9,
     "mean_ns": 9291805.357142856,
     "sd_ns": 115576.07376250606,
     "ops_per_s": 108.461781457645
    },
    "wp34_pure_python_schnorr_batch_verify_per_sig": {
     "reps": 7,
     "ops_per_rep": 16,
     "ns_per_op_samples": [
      7228744.8125,
      7255359.375,
      7301432.25,
      7269578.125,
      7261411.4375,
      7261630.25,
      7328841.125
     ],
     "median_ns": 7261630.25,
     "q1_ns": 7258385.40625,
     "q3_ns": 7285505.1875,
     "iqr_ns": 27119.78125,
     "min_ns": 7228744.8125,
     "mean_ns": 7272428.196428572,
     "sd_ns": 32836.27024471402,
     "ops_per_s": 137.7101237012171,
     "batch_size": 16
    }
   },
   "versions": {
    "ecdsa": null,
    "coincurve": null
   },
   "pure_python_batch_negative_control_rejected": true,
   "python_ecdsa_pkg_error": "ModuleNotFoundError(\"No module named 'ecdsa'\")",
   "coincurve_error": "ModuleNotFoundError(\"No module named 'coincurve'\")"
  },
  "rust_elapsed_s": 27.28,
  "threading": "single thread (all work on the main thread; no rayon; macOS offers no hard CPU pinning from user space - affinity tags are hints only)"
 },
 "elapsed_s": 50.922,
 "label": "M3U96a (Apple M3 Ultra)",
 "toolchain": {
  "rustc": "rustc 1.96.0 (ac68faa20 2026-05-25) (Homebrew)",
  "cargo": "cargo 1.96.0 (30a34c682 2026-05-25) (Homebrew)",
  "crates": {
   "clap": "4.6.7",
   "k256": "0.14.0",
   "ecdsa": "0.17.0",
   "elliptic-curve": "0.14.3",
   "crypto-bigint": "0.7.10",
   "primeorder": "0.14.0",
   "wnaf": "0.14.1",
   "sha2": "0.11.1",
   "rand": "0.9.5",
   "rand_chacha": "0.9.0",
   "secp256k1": "0.33.1",
   "secp256k1-sys": "0.14.1",
   "serde": "1.0.229",
   "serde_json": "1.0.154"
  },
  "profile": "release (opt-level 3, lto fat, codegen-units 1)",
  "target": "aarch64-apple-darwin"
 },
 "crate": "experiments/signature_benchmarks/sigbench"
}