{
 "experiment": "signature_benchmarks",
 "timestamp_utc": "2026-11-01T05:49:56+00:00",
 "command": "experiments/signature_benchmarks/run_bench.py --no-build --seed 34 --label Laptop (Apple M5 Max)",
 "cwd": "/Users/simon-pierreboucher/Desktop/UQO/Recherche/Recherche-UQO/mathematiques/beyond-square-root-barrier",
 "seed": 34,
 "host": {
  "hostname": "MacBookPro-de-simon-pierre-2.local",
  "os": "Darwin 27.0.0 (27.0)",
  "machine": "arm64",
  "python": "3.12.13",
  "cpu": "Apple M5 Max",
  "cores": 18,
  "ram_gb": 48.0
 },
 "software": {
  "numpy": "2.5.4",
  "scipy": "1.18.1",
  "sympy": "1.14.0",
  "gmpy2": "2.3.2",
  "z3": "5.3.3",
  "pysat": "1.9.dev17",
  "ecdsa": "0.19.2",
  "coincurve": "21.0.0"
 },
 "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/Desktop/UQO/Recherche/Recherche-UQO/mathematiques/beyond-square-root-barrier/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/Desktop/UQO/Recherche/Recherche-UQO/mathematiques/beyond-square-root-barrier/data/vectors/bip340_test_vectors.csv --crosscheck-out /Users/simon-pierreboucher/Desktop/UQO/Recherche/Recherche-UQO/mathematiques/beyond-square-root-barrier/results/signature_benchmarks/crosscheck_triples_MacBookPro-de-simon-pierre-2.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/Desktop/UQO/Recherche/Recherche-UQO/mathematiques/beyond-square-root-barrier/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/Desktop/UQO/Recherche/Recherche-UQO/mathematiques/beyond-square-root-barrier/results/signature_benchmarks/crosscheck_triples_MacBookPro-de-simon-pierre-2.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": 11.27,
   "resign_checked": true,
   "all_pass": true
  },
  "sign_verify": {
   "ecdsa_sign_k256": {
    "iqr_ns": 304.8125,
    "mean_ns": 15284.860142857144,
    "median_ns": 15267.4375,
    "min_ns": 15064.0625,
    "ns_per_op_samples": [
     15743.146,
     15066.979,
     15087.896,
     15064.0625,
     15334.375,
     15430.125,
     15267.4375
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 65498.87628490374,
    "q1_ns": 15077.4375,
    "q3_ns": 15382.25,
    "reps": 7,
    "sd_ns": 247.9589146798846
   },
   "ecdsa_sign_libsecp256k1": {
    "iqr_ns": 16.53074999999808,
    "mean_ns": 23624.657714285713,
    "median_ns": 23630.833,
    "min_ns": 23605.9795,
    "ns_per_op_samples": [
     23635.979,
     23631.604,
     23605.9795,
     23634.833,
     23616.4585,
     23630.833,
     23616.917
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 42317.594136440304,
    "q1_ns": 23616.68775,
    "q3_ns": 23633.2185,
    "reps": 7,
    "sd_ns": 11.504451674087065
   },
   "ecdsa_verify_k256": {
    "iqr_ns": 503.8962500000016,
    "mean_ns": 24928.16671428571,
    "median_ns": 25012.0835,
    "min_ns": 24629.3125,
    "ns_per_op_samples": [
     24629.3125,
     25012.0835,
     25263.0625,
     25127.417,
     24655.729,
     24636.729,
     25172.8335
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 39980.67574018773,
    "q1_ns": 24646.229,
    "q3_ns": 25150.12525,
    "reps": 7,
    "sd_ns": 279.0554955178958
   },
   "ecdsa_verify_libsecp256k1": {
    "iqr_ns": 88.03099999999904,
    "mean_ns": 12607.327357142856,
    "median_ns": 12615.604,
    "min_ns": 12460.521,
    "ns_per_op_samples": [
     12771.9375,
     12615.604,
     12660.5,
     12562.8125,
     12629.1455,
     12460.521,
     12550.771
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 79266.9142119553,
    "q1_ns": 12556.79175,
    "q3_ns": 12644.82275,
    "reps": 7,
    "sd_ns": 97.63935664121043
   },
   "schnorr_sign_k256": {
    "iqr_ns": 198.40599999999904,
    "mean_ns": 11589.74107142857,
    "median_ns": 11569.0835,
    "min_ns": 11451.0625,
    "ns_per_op_samples": [
     11724.208,
     11460.4585,
     11473.25,
     11843.8125,
     11569.0835,
     11606.3125,
     11451.0625
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 86437.27050634564,
    "q1_ns": 11466.85425,
    "q3_ns": 11665.26025,
    "reps": 7,
    "sd_ns": 148.8012614021435
   },
   "schnorr_sign_libsecp256k1": {
    "iqr_ns": 381.5829999999987,
    "mean_ns": 20523.824285714283,
    "median_ns": 20548.1875,
    "min_ns": 20246.0205,
    "ns_per_op_samples": [
     20275.1875,
     20256.5,
     20246.0205,
     20548.1875,
     21046.021,
     20634.208,
     20660.6455
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 48666.092812322255,
    "q1_ns": 20265.84375,
    "q3_ns": 20647.42675,
    "reps": 7,
    "sd_ns": 292.8722850149957
   },
   "schnorr_verify_k256": {
    "iqr_ns": 716.9579999999987,
    "mean_ns": 24617.791714285715,
    "median_ns": 24486.6875,
    "min_ns": 24107.1045,
    "ns_per_op_samples": [
     24330.7915,
     25160.667,
     25005.6455,
     24996.354,
     24486.6875,
     24237.292,
     24107.1045
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 40838.51684716441,
    "q1_ns": 24284.04175,
    "q3_ns": 25000.99975,
    "reps": 7,
    "sd_ns": 426.9255283433374
   },
   "schnorr_verify_libsecp256k1": {
    "iqr_ns": 116.33324999999968,
    "mean_ns": 13187.339285714286,
    "median_ns": 13197.0415,
    "min_ns": 13020.3545,
    "ns_per_op_samples": [
     13243.1045,
     13124.9585,
     13274.208,
     13020.3545,
     13197.0415,
     13159.6875,
     13292.0205
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 75774.55901764044,
    "q1_ns": 13142.323,
    "q3_ns": 13258.65625,
    "reps": 7,
    "sd_ns": 95.0860352276898
   }
  },
  "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": 6.63550000000032,
    "mean_ns": 16414.24692857143,
    "median_ns": 16409.729,
    "min_ns": 16409.375,
    "ns_per_op_samples": [
     16409.375,
     16429.4375,
     16409.458,
     16409.5,
     16419.6665,
     16412.5625,
     16409.729
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 60939.45853706664,
    "q1_ns": 16409.479,
    "q3_ns": 16416.1145,
    "reps": 7,
    "sd_ns": 7.665692496596951
   },
   "k256_mul_by_generator_precomputed_table": {
    "iqr_ns": 338.90625,
    "mean_ns": 8261.479214285715,
    "median_ns": 8293.0625,
    "min_ns": 7994.396,
    "ns_per_op_samples": [
     8293.0625,
     8606.5835,
     8386.3125,
     8420.75,
     8029.4375,
     7994.396,
     8099.8125
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 120582.71597494894,
    "q1_ns": 8064.625,
    "q3_ns": 8403.53125,
    "reps": 7,
    "sd_ns": 228.1658502745058
   },
   "k256_mul_by_generator_vartime_table": {
    "iqr_ns": 316.4375,
    "mean_ns": 6602.491071428572,
    "median_ns": 6577.479,
    "min_ns": 6422.6455,
    "ns_per_op_samples": [
     6611.146,
     6577.479,
     6428.0835,
     6423.8125,
     6422.6455,
     6880.646,
     6873.625
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 152033.93275752,
    "q1_ns": 6425.948,
    "q3_ns": 6742.3855,
    "reps": 7,
    "sd_ns": 202.59678569295977
   },
   "k256_point_mul_ct_glv": {
    "iqr_ns": 248.96875,
    "mean_ns": 17254.71121428571,
    "median_ns": 17153.25,
    "min_ns": 16850.646,
    "ns_per_op_samples": [
     16850.646,
     17905.354,
     17073.0625,
     17454.9165,
     17230.9165,
     17153.25,
     17114.833
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 58297.990176788655,
    "q1_ns": 17093.94775,
    "q3_ns": 17342.9165,
    "reps": 7,
    "sd_ns": 339.1434369828955
   },
   "k256_point_mul_vartime_glv_wnaf": {
    "iqr_ns": 196.0,
    "mean_ns": 13868.470214285713,
    "median_ns": 13955.729,
    "min_ns": 13498.625,
    "ns_per_op_samples": [
     14025.625,
     13895.271,
     13955.729,
     13967.125,
     14031.4375,
     13705.479,
     13498.625
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 71655.16040043483,
    "q1_ns": 13800.375,
    "q3_ns": 13996.375,
    "reps": 7,
    "sd_ns": 196.92330397641646
   },
   "libsecp256k1_generator_mul_ecmult_gen": {
    "iqr_ns": 208.21875,
    "mean_ns": 19722.449285714283,
    "median_ns": 19804.583,
    "min_ns": 19531.0415,
    "ns_per_op_samples": [
     19531.0415,
     19580.5625,
     19646.354,
     19851.25,
     19809.229,
     19804.583,
     19834.125
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 50493.36307661717,
    "q1_ns": 19613.45825,
    "q3_ns": 19821.677,
    "reps": 7,
    "sd_ns": 132.85145081125296
   },
   "libsecp256k1_point_mul_tweak_ecmult_const": {
    "iqr_ns": 111.74974999999904,
    "mean_ns": 11528.723214285714,
    "median_ns": 11468.0835,
    "min_ns": 11425.875,
    "ns_per_op_samples": [
     11635.4165,
     11811.0625,
     11451.4375,
     11434.8335,
     11474.354,
     11468.0835,
     11425.875
    ],
    "ops_per_rep": 2000,
    "ops_per_s": 87198.52798420939,
    "q1_ns": 11443.1355,
    "q3_ns": 11554.88525,
    "reps": 7,
    "sd_ns": 143.23537223042376
   },
   "own_wnaf5_agrees_with_k256_64_cases": true,
   "own_wnaf5_point_mul_no_glv": {
    "iqr_ns": 256.1875,
    "mean_ns": 21225.032642857142,
    "median_ns": 21122.021,
    "min_ns": 20927.8955,
    "ns_per_op_samples": [
     21647.479,
     21092.104,
     20927.8955,
     21122.021,
     21322.4375,
     21372.6665,
     21090.625
    ],
    "op_counts_example": {
     "adds": 52,
     "doublings": 257,
     "identity_adds": 1,
     "mixed_adds": 0
    },
    "ops_per_rep": 2000,
    "ops_per_s": 47343.954444510775,
    "q1_ns": 21091.3645,
    "q3_ns": 21347.552,
    "reps": 7,
    "sd_ns": 239.57660758542949
   }
  },
  "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": 27251.2275,
     "msm_only_ns_per_sig_samples": [
      27680.5905,
      27248.0795,
      27251.2275,
      27441.3385,
      27224.7355,
      27624.9845,
      27247.457
     ],
     "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": 326.28099999999904,
      "mean_ns": 30507.928499999998,
      "median_ns": 30351.3125,
      "min_ns": 30322.5,
      "ns_per_op_samples": [
       30837.292,
       30348.4165,
       30351.3125,
       30575.208,
       30322.5,
       30773.2705,
       30347.5
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 32947.50432950799,
      "q1_ns": 30347.95825,
      "q3_ns": 30674.23925,
      "reps": 7,
      "sd_ns": 221.17372698137854
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8239528536645611,
      "ci95_low": 0.7906469187277316,
      "point": 0.8067752424215592
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.4373937599017728,
      "ci95_low": 0.4276336991870916,
      "point": 0.4348095819579466
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 1,
     "msm_only_ns_per_sig_median": 88626.9345,
     "msm_only_ns_per_sig_samples": [
      89859.5965,
      89077.3015,
      88865.7205,
      87142.452,
      86287.388,
      86582.1635,
      88626.9345
     ],
     "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": 2179.083249999996,
      "mean_ns": 91279.25600000001,
      "median_ns": 91869.8125,
      "min_ns": 89442.8125,
      "ns_per_op_samples": [
       93140.9585,
       92328.2915,
       92101.396,
       90324.8125,
       89442.8125,
       89746.7085,
       91869.8125
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 10884.968334946803,
      "q1_ns": 90035.7605,
      "q3_ns": 92214.84375,
      "reps": 7,
      "sd_ns": 1427.3093451899567
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.2785211225880223,
      "ci95_low": 0.2628992431938523,
      "point": 0.2665368180652377
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.14756089355633584,
      "ci95_low": 0.14218346808187507,
      "point": 0.14364937884247886
     },
     "window_bits": 3
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 1,
     "msm_only_ns_per_sig_median": 22011.5455,
     "msm_only_ns_per_sig_samples": [
      22011.5455,
      21803.892,
      21790.2325,
      22094.897,
      22056.5555,
      22018.8555,
      21992.209
     ],
     "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": 160.41675000000032,
      "mean_ns": 25085.595142857142,
      "median_ns": 25136.854,
      "min_ns": 24882.104,
      "ns_per_op_samples": [
       25136.854,
       24901.0625,
       24882.104,
       25232.0415,
       25189.396,
       25145.104,
       25112.604
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 39782.22573119134,
      "q1_ns": 25006.83325,
      "q3_ns": 25167.25,
      "reps": 7,
      "sd_ns": 138.1908992682207
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0038268045791219,
      "ci95_low": 0.9638970671984495,
      "point": 0.9741349295341414
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5318288928434278,
      "ci95_low": 0.5219687498608079,
      "point": 0.5250076839369
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 1,
     "msm_only_ns_per_sig_median": 35306.3995,
     "msm_only_ns_per_sig_samples": [
      35710.54,
      35067.621,
      35191.772,
      35618.7335,
      34949.98,
      36050.416,
      35306.3995
     ],
     "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": 579.8545000000013,
      "mean_ns": 38591.381,
      "median_ns": 38468.8125,
      "min_ns": 38089.292,
      "ns_per_op_samples": [
       38914.3125,
       38213.5205,
       38355.3125,
       38814.2295,
       38089.292,
       39284.1875,
       38468.8125
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 25995.08367979906,
      "q1_ns": 38284.4165,
      "q3_ns": 38864.271,
      "reps": 7,
      "sd_ns": 428.0868972051703
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.6541232964913557,
      "ci95_low": 0.6244434660232017,
      "point": 0.6365334906035895
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.3465554685023067,
      "ci95_low": 0.33814811395393024,
      "point": 0.34305819811828087
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 2,
     "msm_only_ns_per_sig_median": 18207.731,
     "msm_only_ns_per_sig_samples": [
      17927.763,
      18207.731,
      18313.5365,
      18298.3275,
      17917.3565,
      19653.395,
      18084.1805
     ],
     "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": 350.09375,
      "mean_ns": 21492.455285714288,
      "median_ns": 21329.2085,
      "min_ns": 20996.646,
      "ns_per_op_samples": [
       21001.9375,
       21329.2085,
       21454.875,
       21440.3955,
       20996.646,
       23030.979,
       21193.1455
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 46884.06510724484,
      "q1_ns": 21097.5415,
      "q3_ns": 21447.63525,
      "reps": 7,
      "sd_ns": 704.0180070324227
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1901927619773176,
      "ci95_low": 1.1296869359527846,
      "point": 1.1480354510107582
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.6305658466034384,
      "ci95_low": 0.611747143714424,
      "point": 0.618730952909012
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 2,
     "msm_only_ns_per_sig_median": 55311.5885,
     "msm_only_ns_per_sig_samples": [
      55182.61,
      55129.7245,
      55763.123,
      56691.914,
      55466.805,
      55275.806,
      55311.5885
     ],
     "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": 411.6877499999973,
      "mean_ns": 58686.08921428571,
      "median_ns": 58441.25,
      "min_ns": 58247.3545,
      "ns_per_op_samples": [
       58298.6455,
       58247.3545,
       58916.3125,
       59899.2705,
       58602.75,
       58397.0415,
       58441.25
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 17111.201420229718,
      "q1_ns": 58347.8435,
      "q3_ns": 58759.53125,
      "reps": 7,
      "sd_ns": 579.9213482842488
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.428763889548686,
      "ci95_low": 0.41297206949263837,
      "point": 0.41899664192672126
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.2273095975247308,
      "ci95_low": 0.22279390841229438,
      "point": 0.2258172352576305
     },
     "window_bits": 3
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 2,
     "msm_only_ns_per_sig_median": 16485.7545,
     "msm_only_ns_per_sig_samples": [
      16535.5915,
      16473.7425,
      16485.7545,
      16476.593,
      17325.2845,
      16478.729,
      16511.6625
     ],
     "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": 44.92725000000064,
      "mean_ns": 19710.461285714286,
      "median_ns": 19563.6875,
      "min_ns": 19545.9165,
      "ns_per_op_samples": [
       19613.75,
       19545.9165,
       19555.229,
       19563.6875,
       20568.0625,
       19547.625,
       19578.9585
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 51115.108028586124,
      "q1_ns": 19551.427,
      "q3_ns": 19596.35425,
      "reps": 7,
      "sd_ns": 378.8922774200755
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.2787412281543153,
      "ci95_low": 1.2357296284494297,
      "point": 1.2516396768247295
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.6788060625626016,
      "ci95_low": 0.6691712956471864,
      "point": 0.6745682019302343
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 2,
     "msm_only_ns_per_sig_median": 26563.9235,
     "msm_only_ns_per_sig_samples": [
      28305.747,
      26491.5025,
      27363.853,
      26427.541,
      26484.4295,
      26563.9235,
      26856.67
     ],
     "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": 692.3644999999997,
      "mean_ns": 30075.303714285717,
      "median_ns": 29666.7085,
      "min_ns": 29516.1045,
      "ns_per_op_samples": [
       31621.375,
       29587.3125,
       30557.9585,
       29516.1045,
       29581.792,
       29666.7085,
       29995.875
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 33707.817636729065,
      "q1_ns": 29584.55225,
      "q3_ns": 30276.91675,
      "reps": 7,
      "sd_ns": 773.6217886332254
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8451475780370387,
      "ci95_low": 0.7962178330728474,
      "point": 0.825392796777573
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.4486452765860367,
      "ci95_low": 0.4306468149696584,
      "point": 0.44484346822634535
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 4,
     "msm_only_ns_per_sig_median": 13287.044,
     "msm_only_ns_per_sig_samples": [
      13308.124,
      13287.044,
      13281.2515,
      13276.2285,
      13255.3535,
      13497.919,
      13303.701
     ],
     "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": 30.3125,
      "mean_ns": 16382.73807142857,
      "median_ns": 16338.042,
      "min_ns": 16309.521,
      "ns_per_op_samples": [
       16360.354,
       16338.042,
       16336.3125,
       16334.958,
       16309.521,
       16628.4375,
       16371.5415
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 61206.8447369642,
      "q1_ns": 16335.63525,
      "q3_ns": 16365.94775,
      "reps": 7,
      "sd_ns": 110.14487907881013
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.5306786950849525,
      "ci95_low": 1.481465009864701,
      "point": 1.498752879935062
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8125584032504276,
      "ci95_low": 0.8016935057703638,
      "point": 0.8077492700777731
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 4,
     "msm_only_ns_per_sig_median": 41195.204,
     "msm_only_ns_per_sig_samples": [
      40957.681,
      41195.204,
      41034.9805,
      41305.6265,
      41545.5815,
      41328.191,
      40009.3905
     ],
     "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": 350.38525000000664,
      "mean_ns": 44195.387,
      "median_ns": 44337.875,
      "min_ns": 43079.3125,
      "ns_per_op_samples": [
       44092.521,
       44337.875,
       44176.667,
       44472.2915,
       44711.375,
       44497.667,
       43079.3125
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 22554.080456043506,
      "q1_ns": 44134.594,
      "q3_ns": 44484.979250000004,
      "reps": 7,
      "sd_ns": 534.0333773455395
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5671176184278508,
      "ci95_low": 0.5449975969868789,
      "point": 0.5522747199769948
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.3004800701691687,
      "ci95_low": 0.29512665206379124,
      "point": 0.2976471357727451
     },
     "window_bits": 4
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 4,
     "msm_only_ns_per_sig_median": 13860.942,
     "msm_only_ns_per_sig_samples": [
      13992.518,
      13883.1215,
      13858.1675,
      13831.3145,
      13860.942,
      13840.379,
      13869.957
     ],
     "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": 31.16675000000032,
      "mean_ns": 16937.154642857142,
      "median_ns": 16919.25,
      "min_ns": 16887.375,
      "ns_per_op_samples": [
       17076.833,
       16943.354,
       16919.25,
       16887.375,
       16914.979,
       16892.1665,
       16926.125
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 59104.274716668886,
      "q1_ns": 16903.57275,
      "q3_ns": 16934.7395,
      "reps": 7,
      "sd_ns": 64.52959232961373
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.479760100635996,
      "ci95_low": 1.4319457052337734,
      "point": 1.447267904901222
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.784760536799957,
      "ci95_low": 0.7746375658562054,
      "point": 0.78000156626328
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 4,
     "msm_only_ns_per_sig_median": 22442.3925,
     "msm_only_ns_per_sig_samples": [
      22672.3985,
      22604.3195,
      22112.876,
      22234.2665,
      22442.3925,
      22181.9185,
      22658.694
     ],
     "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": 489.59375,
      "mean_ns": 25514.5,
      "median_ns": 25549.6045,
      "min_ns": 25170.5625,
      "ns_per_op_samples": [
       25806.9375,
       25732.458,
       25170.5625,
       25305.625,
       25549.6045,
       25241.979,
       25794.3335
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 39139.54910730614,
      "q1_ns": 25273.802,
      "q3_ns": 25763.39575,
      "reps": 7,
      "sd_ns": 273.48185795557515
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.9902691861046236,
      "ci95_low": 0.9418957178517499,
      "point": 0.9583979078815095
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.524646046968029,
      "ci95_low": 0.5100545971939409,
      "point": 0.5165262538604071
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 8,
     "msm_only_ns_per_sig_median": 11011.455,
     "msm_only_ns_per_sig_samples": [
      11398.392,
      10984.706,
      11236.0195,
      10987.4205,
      11177.1245,
      10990.901,
      11011.455
     ],
     "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": 271.8857500000013,
      "mean_ns": 14188.639857142856,
      "median_ns": 14054.333,
      "min_ns": 14028.125,
      "ns_per_op_samples": [
       14548.5415,
       14028.125,
       14352.792,
       14044.479,
       14263.8335,
       14028.375,
       14054.333
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 71152.43391486454,
      "q1_ns": 14036.427,
      "q3_ns": 14308.312750000001,
      "reps": 7,
      "sd_ns": 205.1014914899274
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.781842444331578,
      "ci95_low": 1.6951957152308763,
      "point": 1.7422874141376896
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.9451548896901053,
      "ci95_low": 0.9144533342362936,
      "point": 0.9390016232004749
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 8,
     "msm_only_ns_per_sig_median": 27119.503,
     "msm_only_ns_per_sig_samples": [
      27119.503,
      27130.751,
      26885.7695,
      27056.5015,
      27183.1655,
      26822.1255,
      27610.4145
     ],
     "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": 209.33299999999872,
      "mean_ns": 30216.1845,
      "median_ns": 30217.0835,
      "min_ns": 29889.229,
      "ns_per_op_samples": [
       30217.0835,
       30227.583,
       29957.4585,
       30151.25,
       30299.7915,
       29889.229,
       30770.896
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 33093.86228488928,
      "q1_ns": 30054.35425,
      "q3_ns": 30263.68725,
      "reps": 7,
      "sd_ns": 286.61275966915144
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8343950138493891,
      "ci95_low": 0.8018269935773562,
      "point": 0.8103590639381196
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.44206368507528765,
      "ci95_low": 0.4331699279184809,
      "point": 0.43674107396896855
     },
     "window_bits": 4
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 8,
     "msm_only_ns_per_sig_median": 12545.7275,
     "msm_only_ns_per_sig_samples": [
      12558.628,
      12542.729,
      12559.227,
      12545.7275,
      12585.141,
      12516.1035,
      12545.688
     ],
     "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": 16.38550000000032,
      "mean_ns": 15600.119071428573,
      "median_ns": 15600.5415,
      "min_ns": 15557.667,
      "ns_per_op_samples": [
       15608.396,
       15588.104,
       15608.854,
       15600.5415,
       15640.896,
       15557.667,
       15596.375
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 64100.33908117869,
      "q1_ns": 15592.2395,
      "q3_ns": 15608.625,
      "reps": 7,
      "sd_ns": 25.060929931583406
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.603553196719755,
      "ci95_low": 1.5528368193631172,
      "point": 1.5696049717248597
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8512352214571548,
      "ci95_low": 0.8408909217833787,
      "point": 0.8459348350183871
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 8,
     "msm_only_ns_per_sig_median": 20033.061,
     "msm_only_ns_per_sig_samples": [
      21291.2455,
      20030.8965,
      20058.728,
      20899.711,
      20027.7975,
      20031.398,
      20033.061
     ],
     "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": 529.4585000000006,
      "mean_ns": 23434.779714285716,
      "median_ns": 23098.896,
      "min_ns": 23083.083,
      "ns_per_op_samples": [
       24467.229,
       23083.083,
       23117.2085,
       24109.375,
       23083.208,
       23098.896,
       23084.4585
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 43292.11231567084,
      "q1_ns": 23083.83325,
      "q3_ns": 23613.29175,
      "reps": 7,
      "sd_ns": 592.272160841749
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0832242610325904,
      "ci95_low": 1.0091838340894361,
      "point": 1.0600804254887333
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5750279132603435,
      "ci95_low": 0.5458327932598833,
      "point": 0.5713278028525692
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 16,
     "msm_only_ns_per_sig_median": 9834.4355,
     "msm_only_ns_per_sig_samples": [
      9834.4355,
      9839.649,
      9883.5425,
      10002.167,
      9826.854,
      9829.899,
      9831.6215
     ],
     "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": 40.02049999999872,
      "mean_ns": 12923.282785714287,
      "median_ns": 12881.854,
      "min_ns": 12862.125,
      "ns_per_op_samples": [
       12873.396,
       12881.854,
       12932.1665,
       13135.2085,
       12878.4795,
       12862.125,
       12899.75
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 77628.57737713841,
      "q1_ns": 12875.937750000001,
      "q3_ns": 12915.95825,
      "reps": 7,
      "sd_ns": 96.17507091881006
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.9424280508422174,
      "ci95_low": 1.8788962576794126,
      "point": 1.900866715303558
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0307278898879328,
      "ci95_low": 1.017458361596155,
      "point": 1.0244675572320567
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 16,
     "msm_only_ns_per_sig_median": 21733.2095,
     "msm_only_ns_per_sig_samples": [
      21195.4365,
      21622.1445,
      21733.2095,
      21746.644,
      21266.4365,
      22656.455,
      22452.2025
     ],
     "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": 726.625250000001,
      "mean_ns": 24955.96128571429,
      "median_ns": 24855.0835,
      "min_ns": 24254.6665,
      "ns_per_op_samples": [
       24254.6665,
       24769.104,
       24875.896,
       24855.0835,
       24340.2915,
       25909.9375,
       25686.75
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 40233.21828711619,
      "q1_ns": 24554.69775,
      "q3_ns": 25281.323,
      "reps": 7,
      "sd_ns": 628.0245280126977
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0269537651182197,
      "ci95_low": 0.9472117531412109,
      "point": 0.9851782433158995
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5440815899842448,
      "ci95_low": 0.5123142281526468,
      "point": 0.5309594514136313
     },
     "window_bits": 5
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 16,
     "msm_only_ns_per_sig_median": 11788.519,
     "msm_only_ns_per_sig_samples": [
      11848.565,
      11811.581,
      11802.0815,
      11788.519,
      11785.71,
      11783.292,
      11783.0005
     ],
     "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": 23.35425000000032,
      "mean_ns": 14831.479214285715,
      "median_ns": 14817.521,
      "min_ns": 14811.0,
      "ns_per_op_samples": [
       14883.667,
       14849.1875,
       14828.25,
       14817.521,
       14814.2085,
       14816.5205,
       14811.0
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 67487.6721956392,
      "q1_ns": 14815.3645,
      "q3_ns": 14838.71875,
      "reps": 7,
      "sd_ns": 26.40658647139781
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.6876884747822565,
      "ci95_low": 1.6345348911705697,
      "point": 1.652549539157056
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8959058909951226,
      "ci95_low": 0.8851319946723316,
      "point": 0.8906376107042466
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 16,
     "msm_only_ns_per_sig_median": 19377.0215,
     "msm_only_ns_per_sig_samples": [
      19609.5175,
      19744.9145,
      19195.833,
      19377.0215,
      19345.582,
      19306.959,
      19571.6275
     ],
     "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": 319.8542500000003,
      "mean_ns": 22566.943428571427,
      "median_ns": 22480.7915,
      "min_ns": 22271.1875,
      "ns_per_op_samples": [
       22752.0835,
       22889.2915,
       22271.1875,
       22480.7915,
       22441.771,
       22402.0415,
       22731.4375
      ],
      "ops_per_rep": 2000,
      "ops_per_s": 44482.41958028924,
      "q1_ns": 22421.90625,
      "q3_ns": 22741.7605,
      "reps": 7,
      "sd_ns": 224.72128357152934
     },
     "sigs_per_rep": 2000,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.115806967860496,
      "ci95_low": 1.0662454585197263,
      "point": 1.089227107506424
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5914955642315395,
      "ci95_low": 0.577392366848775,
      "point": 0.5870363372214897
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 32,
     "msm_only_ns_per_sig_median": 9238.860119047618,
     "msm_only_ns_per_sig_samples": [
      9241.980654761905,
      9234.602182539682,
      9238.838789682539,
      9314.628968253968,
      9311.504960317461,
      9238.860119047618,
      9236.315972222223
     ],
     "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": 57.901289682538845,
      "mean_ns": 12301.540107709749,
      "median_ns": 12275.276785714286,
      "min_ns": 12263.434027777777,
      "ns_per_op_samples": [
       12280.753968253968,
       12275.276785714286,
       12263.434027777777,
       12378.927083333334,
       12373.71875,
       12265.45982142857,
       12273.210317460318
      ],
      "ops_per_rep": 2016,
      "ops_per_s": 81464.55818933381,
      "q1_ns": 12269.335069444445,
      "q3_ns": 12327.236359126984,
      "reps": 7,
      "sd_ns": 51.44052144019054
     },
     "sigs_per_rep": 2016,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.038704285371632,
      "ci95_low": 1.9663281501367564,
      "point": 1.994797178707783
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0815595640136326,
      "ci95_low": 1.0608760188421742,
      "point": 1.0750911552038032
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 32,
     "msm_only_ns_per_sig_median": 14947.916666666666,
     "msm_only_ns_per_sig_samples": [
      14932.250496031746,
      14950.74751984127,
      14956.970238095239,
      14920.738095238095,
      14938.928075396825,
      14947.916666666666,
      14963.271825396825
     ],
     "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": 23.974950396826898,
      "mean_ns": 18005.36196145125,
      "median_ns": 18007.089285714286,
      "min_ns": 17978.774305555555,
      "ns_per_op_samples": [
       17988.488095238095,
       18010.56150793651,
       18017.79513888889,
       17978.774305555555,
       17991.91865079365,
       18007.089285714286,
       18042.906746031746
      ],
      "ops_per_rep": 2016,
      "ops_per_s": 55533.683658321075,
      "q1_ns": 17990.203373015873,
      "q3_ns": 18014.1783234127,
      "reps": 7,
      "sd_ns": 21.473111448187893
     },
     "sigs_per_rep": 2016,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.3900915612034945,
      "ci95_low": 1.3457266165366155,
      "point": 1.359835957465165
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.7377872397958211,
      "ci95_low": 0.7287367744873682,
      "point": 0.7328803278867351
     },
     "window_bits": 5
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 32,
     "msm_only_ns_per_sig_median": 11845.693452380952,
     "msm_only_ns_per_sig_samples": [
      11735.740575396825,
      11667.96875,
      11725.983630952382,
      11845.693452380952,
      11968.914682539682,
      12049.996527777777,
      11992.602182539682
     ],
     "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": 282.65550595238165,
      "mean_ns": 14971.002905328798,
      "median_ns": 14977.595734126984,
      "min_ns": 14738.033234126984,
      "ns_per_op_samples": [
       14857.74255952381,
       14738.033234126984,
       14800.760416666666,
       14977.595734126984,
       15087.735615079366,
       15199.074404761905,
       15136.078373015873
      ],
      "ops_per_rep": 2016,
      "ops_per_s": 66766.39013039085,
      "q1_ns": 14829.251488095237,
      "q3_ns": 15111.906994047618,
      "reps": 7,
      "sd_ns": 177.49262349962018
     },
     "sigs_per_rep": 2016,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.688856065250026,
      "ci95_low": 1.6064234301518483,
      "point": 1.634887730625965
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8947583858655911,
      "ci95_low": 0.8693220681829901,
      "point": 0.8811188213559584
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 32,
     "msm_only_ns_per_sig_median": 19180.184523809523,
     "msm_only_ns_per_sig_samples": [
      19048.053075396827,
      19145.31994047619,
      19271.7435515873,
      19122.12400793651,
      19180.184523809523,
      20316.38839285714,
      19787.532738095237
     ],
     "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": 444.26884920634984,
      "mean_ns": 22596.55775226757,
      "median_ns": 22322.130952380954,
      "min_ns": 22171.833333333332,
      "ns_per_op_samples": [
       22171.833333333332,
       22286.685515873014,
       22423.218253968254,
       22273.29265873016,
       22322.130952380954,
       23673.445932539682,
       23025.29761904762
      ],
      "ops_per_rep": 2016,
      "ops_per_s": 44798.5903376907,
      "q1_ns": 22279.989087301587,
      "q3_ns": 22724.257936507936,
      "reps": 7,
      "sd_ns": 552.2340433744196
     },
     "sigs_per_rep": 2016,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1226739523039884,
      "ci95_low": 1.056698241323596,
      "point": 1.0969690820395517
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.5956115812082442,
      "ci95_low": 0.5715317003813094,
      "point": 0.5912088558280032
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 64,
     "msm_only_ns_per_sig_median": 9023.00927734375,
     "msm_only_ns_per_sig_samples": [
      9007.7724609375,
      9019.1630859375,
      9023.00927734375,
      9935.99365234375,
      9625.87548828125,
      9016.58154296875,
      9023.64013671875
     ],
     "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": 429.840087890625,
      "mean_ns": 12364.234584263393,
      "median_ns": 12078.2470703125,
      "min_ns": 12052.44970703125,
      "ns_per_op_samples": [
       12052.44970703125,
       12078.2470703125,
       12103.6376953125,
       13287.90283203125,
       12891.7236328125,
       12064.208984375,
       12071.47216796875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 82793.47112031937,
      "q1_ns": 12067.840576171875,
      "q3_ns": 12497.6806640625,
      "reps": 7,
      "sd_ns": 508.9273568978537
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.0719430534048366,
      "ci95_low": 1.8873187320020073,
      "point": 2.027337854363535
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0996345611617007,
      "ci95_low": 1.0207857284890491,
      "point": 1.092628874303906
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 64,
     "msm_only_ns_per_sig_median": 12919.73828125,
     "msm_only_ns_per_sig_samples": [
      12977.7236328125,
      12901.59228515625,
      12919.73828125,
      12925.02880859375,
      12989.0546875,
      12881.26611328125,
      12569.4580078125
     ],
     "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": 77.4638671875,
      "mean_ns": 16081.830775669643,
      "median_ns": 16124.6337890625,
      "min_ns": 15678.263671875,
      "ns_per_op_samples": [
       16213.31787109375,
       16124.6337890625,
       16114.82763671875,
       16129.35400390625,
       16239.501953125,
       16072.91650390625,
       15678.263671875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 62016.912326921185,
      "q1_ns": 16093.8720703125,
      "q3_ns": 16171.3359375,
      "reps": 7,
      "sd_ns": 187.2050017076318
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.555184710498873,
      "ci95_low": 1.5006670253087837,
      "point": 1.518588751864217
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8239391087971799,
      "ci95_low": 0.8116591313775462,
      "point": 0.8184397656802403
     },
     "window_bits": 6
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 64,
     "msm_only_ns_per_sig_median": 12128.51904296875,
     "msm_only_ns_per_sig_samples": [
      12093.32177734375,
      12453.61181640625,
      12220.37646484375,
      12128.51904296875,
      12067.34130859375,
      12271.36279296875,
      11746.62109375
     ],
     "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": 177.886962890625,
      "mean_ns": 15364.257742745536,
      "median_ns": 15343.017578125,
      "min_ns": 14851.806640625,
      "ns_per_op_samples": [
       15274.0068359375,
       15817.97265625,
       15437.41845703125,
       15343.017578125,
       15316.60986328125,
       15508.97216796875,
       14851.806640625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 65176.22722571406,
      "q1_ns": 15295.308349609375,
      "q3_ns": 15473.1953125,
      "reps": 7,
      "sd_ns": 290.2943336723436
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.6371372468660534,
      "ci95_low": 1.5688203729097714,
      "point": 1.5959499085050521
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8670353917114214,
      "ci95_low": 0.8485209308183032,
      "point": 0.8601333755111783
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 64,
     "msm_only_ns_per_sig_median": 18811.72900390625,
     "msm_only_ns_per_sig_samples": [
      18683.8984375,
      18811.25927734375,
      19072.875,
      18744.6904296875,
      18811.72900390625,
      19065.4697265625,
      18935.748046875
     ],
     "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": 287.577392578125,
      "mean_ns": 22025.739397321428,
      "median_ns": 21944.27490234375,
      "min_ns": 21799.5810546875,
      "ns_per_op_samples": [
       21799.5810546875,
       21923.48193359375,
       22254.39453125,
       21879.9033203125,
       21944.27490234375,
       22249.369140625,
       22129.1708984375
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 45569.97232536471,
      "q1_ns": 21901.692626953125,
      "q3_ns": 22189.27001953125,
      "reps": 7,
      "sd_ns": 183.71187491799188
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1424343898628793,
      "ci95_low": 1.093549724768355,
      "point": 1.1158576717148538
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.6054790037553155,
      "ci95_low": 0.591463399111474,
      "point": 0.6013888159316895
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 128,
     "msm_only_ns_per_sig_median": 9073.751953125,
     "msm_only_ns_per_sig_samples": [
      9017.3330078125,
      9073.751953125,
      9426.3310546875,
      9407.837890625,
      9112.91455078125,
      8979.77734375,
      8985.18896484375
     ],
     "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": 344.31982421875,
      "mean_ns": 12263.645717075893,
      "median_ns": 12170.87841796875,
      "min_ns": 12016.5,
      "ns_per_op_samples": [
       12091.9189453125,
       12170.87841796875,
       12731.791015625,
       12600.9521484375,
       12206.54296875,
       12016.5,
       12026.9365234375
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 82163.33822903263,
      "q1_ns": 12059.427734375,
      "q3_ns": 12403.74755859375,
      "reps": 7,
      "sd_ns": 286.18306402362794
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.078364174558362,
      "ci95_low": 1.9308692877638602,
      "point": 2.0119079871711256
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1011203455004932,
      "ci95_low": 1.0443407248103693,
      "point": 1.08431298438708
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 128,
     "msm_only_ns_per_sig_median": 9612.99609375,
     "msm_only_ns_per_sig_samples": [
      10118.5908203125,
      9614.64404296875,
      9282.4912109375,
      10044.39208984375,
      9558.0869140625,
      9612.99609375,
      9314.14794921875
     ],
     "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": 568.257568359375,
      "mean_ns": 12830.014229910714,
      "median_ns": 12765.58447265625,
      "min_ns": 12329.1826171875,
      "ns_per_op_samples": [
       13434.08203125,
       12779.70361328125,
       12329.1826171875,
       13429.17919921875,
       12713.8876953125,
       12765.58447265625,
       12358.47998046875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 78335.62201103989,
      "q1_ns": 12536.183837890625,
      "q3_ns": 13104.44140625,
      "reps": 7,
      "sd_ns": 450.4148357465976
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.0226074759601547,
      "ci95_low": 1.8117854515944993,
      "point": 1.9181798963024554
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0715803659454322,
      "ci95_low": 0.9799323774580037,
      "point": 1.0337984546080068
     },
     "window_bits": 6
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 128,
     "msm_only_ns_per_sig_median": 12079.447265625,
     "msm_only_ns_per_sig_samples": [
      11504.8212890625,
      11788.81884765625,
      12079.447265625,
      12004.59765625,
      12768.12646484375,
      12355.71240234375,
      12155.966796875
     ],
     "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": 454.65087890625,
      "mean_ns": 15267.458984375,
      "median_ns": 15261.41357421875,
      "min_ns": 14550.21142578125,
      "ns_per_op_samples": [
       14550.21142578125,
       14905.70068359375,
       15261.41357421875,
       15171.24462890625,
       15997.3955078125,
       15618.306640625,
       15367.9404296875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 65524.72974648361,
      "q1_ns": 15038.47265625,
      "q3_ns": 15493.12353515625,
      "reps": 7,
      "sd_ns": 469.1490176676787
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.67696605014434,
      "ci95_low": 1.5578379948510443,
      "point": 1.6044835808240983
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8884590386667486,
      "ci95_low": 0.8425253503969763,
      "point": 0.8647325777406286
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 128,
     "msm_only_ns_per_sig_median": 18683.67431640625,
     "msm_only_ns_per_sig_samples": [
      18973.572265625,
      18588.86669921875,
      18683.67431640625,
      19045.2265625,
      18641.5390625,
      18800.76025390625,
      18665.44580078125
     ],
     "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": 264.68896484375,
      "mean_ns": 21948.489188058036,
      "median_ns": 21892.1708984375,
      "min_ns": 21715.189453125,
      "ns_per_op_samples": [
       22159.72900390625,
       21715.189453125,
       21814.8193359375,
       22337.85009765625,
       21767.5986328125,
       21952.06689453125,
       21892.1708984375
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 45678.43018580549,
      "q1_ns": 21791.208984375,
      "q3_ns": 22055.89794921875,
      "reps": 7,
      "sd_ns": 225.25042216568508
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.148328505208676,
      "ci95_low": 1.097973332422569,
      "point": 1.118513445450386
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.6084949774547164,
      "ci95_low": 0.5938559762026083,
      "point": 0.6028201388169278
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 256,
     "msm_only_ns_per_sig_median": 9294.84033203125,
     "msm_only_ns_per_sig_samples": [
      9313.72119140625,
      9433.45068359375,
      9294.84033203125,
      9067.810546875,
      9048.42138671875,
      9052.71337890625,
      9853.71875
     ],
     "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": 345.3876953125,
      "mean_ns": 12433.782645089286,
      "median_ns": 12388.5498046875,
      "min_ns": 12140.29931640625,
      "ns_per_op_samples": [
       12388.5498046875,
       12611.26708984375,
       12475.7080078125,
       12194.4990234375,
       12201.70068359375,
       12140.29931640625,
       13024.45458984375
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 80719.69808941046,
      "q1_ns": 12198.099853515625,
      "q3_ns": 12543.487548828125,
      "reps": 7,
      "sd_ns": 311.3007583772197
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.0498057322369436,
      "ci95_low": 1.9292900012873688,
      "point": 1.9765580222097412
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0878981827384382,
      "ci95_low": 1.0434865431244345,
      "point": 1.0652612055534205
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 256,
     "msm_only_ns_per_sig_median": 8209.06494140625,
     "msm_only_ns_per_sig_samples": [
      8232.91015625,
      8022.6240234375,
      8093.5263671875,
      8134.19580078125,
      8319.53857421875,
      8324.5234375,
      8209.06494140625
     ],
     "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": 200.53125,
      "mean_ns": 11310.212681361607,
      "median_ns": 11349.3447265625,
      "min_ns": 11079.9970703125,
      "ns_per_op_samples": [
       11377.54345703125,
       11079.9970703125,
       11198.1201171875,
       11226.6640625,
       11448.30322265625,
       11491.51611328125,
       11349.3447265625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 88110.81380403897,
      "q1_ns": 11212.39208984375,
      "q3_ns": 11412.92333984375,
      "reps": 7,
      "sd_ns": 147.5065109084402
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.2321919874420884,
      "ci95_low": 2.125274901161706,
      "point": 2.1575419629901886
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1826185432386767,
      "ci95_low": 1.1494880284055469,
      "point": 1.162802066370675
     },
     "window_bits": 7
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 256,
     "msm_only_ns_per_sig_median": 11865.3154296875,
     "msm_only_ns_per_sig_samples": [
      12353.12841796875,
      11882.93408203125,
      11716.45068359375,
      11793.29443359375,
      11899.71923828125,
      11694.1728515625,
      11865.3154296875
     ],
     "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": 169.4541015625,
      "mean_ns": 15022.4638671875,
      "median_ns": 15002.33935546875,
      "min_ns": 14778.40185546875,
      "ns_per_op_samples": [
       15579.7119140625,
       15033.3251953125,
       14811.1572265625,
       14917.78564453125,
       15034.52587890625,
       14778.40185546875,
       15002.33935546875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 66656.27115250353,
      "q1_ns": 14864.471435546875,
      "q3_ns": 15033.925537109375,
      "reps": 7,
      "sd_ns": 266.57335904904926
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.6876705592707673,
      "ci95_low": 1.6121088350385178,
      "point": 1.6321912816266186
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8941303030832501,
      "ci95_low": 0.8729878551351319,
      "point": 0.8796655766348418
     },
     "window_bits": 0
    },
    {
     "algorithm": "k256_lincomb_ct",
     "batch_size": 256,
     "msm_only_ns_per_sig_median": 18714.68017578125,
     "msm_only_ns_per_sig_samples": [
      19003.54052734375,
      19322.896484375,
      18819.5390625,
      18617.25,
      18665.58935546875,
      18635.04931640625,
      18714.68017578125
     ],
     "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": 307.373046875,
      "mean_ns": 21985.674176897322,
      "median_ns": 21844.25830078125,
      "min_ns": 21740.29541015625,
      "ns_per_op_samples": [
       22195.9638671875,
       22566.67041015625,
       21985.65673828125,
       21740.29541015625,
       21809.7333984375,
       21757.14111328125,
       21844.25830078125
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 45778.62000305295,
      "q1_ns": 21783.437255859375,
      "q3_ns": 22090.810302734375,
      "reps": 7,
      "sd_ns": 301.4327136314583
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.1488804466475346,
      "ci95_low": 1.0961808933185566,
      "point": 1.1209667621960067
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.6086785221940758,
      "ci95_low": 0.5928865075985319,
      "point": 0.6041423479930199
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 512,
     "msm_only_ns_per_sig_median": 9581.11572265625,
     "msm_only_ns_per_sig_samples": [
      9373.27099609375,
      9673.62451171875,
      9581.11572265625,
      9621.17578125,
      9534.953125,
      9542.6435546875,
      9703.00244140625
     ],
     "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": 173.27880859375,
      "mean_ns": 12760.965890066964,
      "median_ns": 12847.615234375,
      "min_ns": 12441.162109375,
      "ns_per_op_samples": [
       12441.162109375,
       12869.07958984375,
       12852.0302734375,
       12847.615234375,
       12694.091796875,
       12680.46044921875,
       12942.32177734375
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 77835.4567565509,
      "q1_ns": 12687.276123046875,
      "q3_ns": 12860.554931640625,
      "reps": 7,
      "sd_ns": 170.10148402661002
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.971249711325746,
      "ci95_low": 1.8858726196820041,
      "point": 1.9059325060174257
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0468238163084869,
      "ci95_low": 1.0212361954302727,
      "point": 1.0271977529876577
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 512,
     "msm_only_ns_per_sig_median": 6513.04150390625,
     "msm_only_ns_per_sig_samples": [
      6513.04150390625,
      6459.14697265625,
      6465.73876953125,
      6501.09765625,
      6987.9560546875,
      6613.48486328125,
      7111.04345703125
     ],
     "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": 450.144775390625,
      "mean_ns": 9821.27748325893,
      "median_ns": 9614.15625,
      "min_ns": 9496.84619140625,
      "ns_per_op_samples": [
       9614.15625,
       9496.84619140625,
       9506.44921875,
       9548.2177734375,
       10227.9462890625,
       9727.01025390625,
       10628.31640625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 104013.28769750336,
      "q1_ns": 9527.33349609375,
      "q3_ns": 9977.478271484375,
      "reps": 7,
      "sd_ns": 437.3044250533576
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.6294101430320125,
      "ci95_low": 2.378854054603192,
      "point": 2.5469408716963593
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.3930652965441634,
      "ci95_low": 1.2866402626764504,
      "point": 1.3726676742953912
     },
     "window_bits": 7
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 512,
     "msm_only_ns_per_sig_median": 12672.7294921875,
     "msm_only_ns_per_sig_samples": [
      12324.46337890625,
      13232.8896484375,
      12837.44287109375,
      12335.77490234375,
      12562.052734375,
      13010.8642578125,
      12672.7294921875
     ],
     "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": 515.0654296875,
      "mean_ns": 15827.95933314732,
      "median_ns": 15830.4853515625,
      "min_ns": 15376.8310546875,
      "ns_per_op_samples": [
       15376.8310546875,
       16402.54736328125,
       16043.8232421875,
       15419.880859375,
       15657.9794921875,
       16064.16796875,
       15830.4853515625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 63169.257151126956,
      "q1_ns": 15538.93017578125,
      "q3_ns": 16053.99560546875,
      "reps": 7,
      "sd_ns": 372.26501371487205
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.6210471551602608,
      "ci95_low": 1.5106930333330797,
      "point": 1.5468058594667862
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8588331272318773,
      "ci95_low": 0.8180692533116236,
      "point": 0.8336473081475941
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 1024,
     "msm_only_ns_per_sig_median": 9625.30517578125,
     "msm_only_ns_per_sig_samples": [
      9888.08154296875,
      9625.30517578125,
      9624.08447265625,
      9613.9326171875,
      9634.1552734375,
      9589.25390625,
      9648.57958984375
     ],
     "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": 35.308837890625,
      "mean_ns": 12709.48716517857,
      "median_ns": 12660.8681640625,
      "min_ns": 12626.77001953125,
      "ns_per_op_samples": [
       13026.611328125,
       12660.8681640625,
       12655.47705078125,
       12635.29443359375,
       12674.9267578125,
       12626.77001953125,
       12686.46240234375
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 78983.52522447634,
      "q1_ns": 12645.3857421875,
      "q3_ns": 12680.694580078125,
      "reps": 7,
      "sd_ns": 141.3741392642088
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.978296123716881,
      "ci95_low": 1.910484675028265,
      "point": 1.9340448998201196
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.0488903695005756,
      "ci95_low": 1.0345640954704,
      "point": 1.0423488602037112
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 1024,
     "msm_only_ns_per_sig_median": 5581.09521484375,
     "msm_only_ns_per_sig_samples": [
      5576.23291015625,
      5582.07177734375,
      5581.09521484375,
      5568.96923828125,
      5586.873046875,
      5592.7939453125,
      5578.61328125
     ],
     "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": 8.910888671875,
      "mean_ns": 8619.78306361607,
      "median_ns": 8620.46337890625,
      "min_ns": 8608.33740234375,
      "ns_per_op_samples": [
       8620.46337890625,
       8616.55712890625,
       8623.98291015625,
       8608.33740234375,
       8626.0986328125,
       8627.33935546875,
       8615.70263671875
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 116003.04485335895,
      "q1_ns": 8616.1298828125,
      "q3_ns": 8625.040771484375,
      "reps": 7,
      "sd_ns": 6.74716237972142
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 2.902046040652679,
      "ci95_low": 2.8104522298457186,
      "point": 2.840530308372684
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.5405466245292536,
      "ci95_low": 1.5219137881805243,
      "point": 1.5308969970561395
     },
     "window_bits": 8
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 1024,
     "msm_only_ns_per_sig_median": 12786.1943359375,
     "msm_only_ns_per_sig_samples": [
      12847.73779296875,
      12723.2666015625,
      12846.76123046875,
      12841.67431640625,
      12742.6552734375,
      12781.90087890625,
      12786.1943359375
     ],
     "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": 84.177734375,
      "mean_ns": 15837.823939732143,
      "median_ns": 15835.65283203125,
      "min_ns": 15772.90869140625,
      "ns_per_op_samples": [
       15886.31201171875,
       15772.90869140625,
       15881.24609375,
       15889.4453125,
       15779.11376953125,
       15820.0888671875,
       15835.65283203125
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 63148.64379808011,
      "q1_ns": 15799.601318359375,
      "q3_ns": 15883.779052734375,
      "reps": 7,
      "sd_ns": 49.80204608917478
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.5843005549735723,
      "ci95_low": 1.526145910325231,
      "point": 1.5463011067324008
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.8392806271269703,
      "ci95_low": 0.8264438711245256,
      "point": 0.8333752728719809
     },
     "window_bits": 0
    },
    {
     "algorithm": "straus_wnaf5",
     "batch_size": 2048,
     "msm_only_ns_per_sig_median": 10377.62451171875,
     "msm_only_ns_per_sig_samples": [
      10435.1396484375,
      10377.62451171875,
      10408.8134765625,
      10866.65869140625,
      10361.87744140625,
      10319.580078125,
      10228.6376953125
     ],
     "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": 88.11474609375,
      "mean_ns": 13471.720424107143,
      "median_ns": 13424.2353515625,
      "min_ns": 13279.1953125,
      "ns_per_op_samples": [
       13482.177734375,
       13424.2353515625,
       13452.53515625,
       13905.416015625,
       13410.80712890625,
       13347.67626953125,
       13279.1953125
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 74492.138569636,
      "q1_ns": 13379.24169921875,
      "q3_ns": 13467.3564453125,
      "reps": 7,
      "sd_ns": 202.89054047006252
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.8727120358065017,
      "ci95_low": 1.7977282659761333,
      "point": 1.8240657183613738
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.9921655449668076,
      "ci95_low": 0.9735043372507832,
      "point": 0.9830758441272369
     },
     "window_bits": 5
    },
    {
     "algorithm": "pippenger",
     "batch_size": 2048,
     "msm_only_ns_per_sig_median": 4870.89013671875,
     "msm_only_ns_per_sig_samples": [
      4875.447265625,
      4870.76806640625,
      4866.47509765625,
      4870.89013671875,
      5023.49853515625,
      4862.99658203125,
      4929.5859375
     ],
     "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": 37.801025390625,
      "mean_ns": 7939.583844866072,
      "median_ns": 7911.19384765625,
      "min_ns": 7906.94140625,
      "ns_per_op_samples": [
       7911.19384765625,
       7908.14208984375,
       7907.16552734375,
       7912.55712890625,
       8052.734375,
       7906.94140625,
       7978.3525390625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 126403.17242337039,
      "q1_ns": 7907.65380859375,
      "q3_ns": 7945.454833984375,
      "reps": 7,
      "sd_ns": 56.19541722877636
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 3.1620126719920965,
      "ci95_low": 3.0472144867417086,
      "point": 3.0951949821396885
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.678549506216861,
      "ci95_low": 1.6458141148769065,
      "point": 1.6681479122028746
     },
     "window_bits": 8
    },
    {
     "algorithm": "k256_lincomb_vartime",
     "batch_size": 2048,
     "msm_only_ns_per_sig_median": 14036.9462890625,
     "msm_only_ns_per_sig_samples": [
      14012.61376953125,
      14299.458984375,
      14115.29541015625,
      13874.51171875,
      14104.57373046875,
      14036.9462890625,
      14002.9091796875
     ],
     "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": 108.40869140625,
      "mean_ns": 17105.881417410714,
      "median_ns": 17075.98876953125,
      "min_ns": 16918.64013671875,
      "ns_per_op_samples": [
       17044.291015625,
       17354.7158203125,
       17161.66162109375,
       16918.64013671875,
       17142.65966796875,
       17075.98876953125,
       17043.212890625
      ],
      "ops_per_rep": 2048,
      "ops_per_s": 58561.76257179928,
      "q1_ns": 17043.751953125,
      "q3_ns": 17152.16064453125,
      "reps": 7,
      "sd_ns": 135.4352368837525
     },
     "sigs_per_rep": 2048,
     "speedup_vs_k256_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 1.4670980140550636,
      "ci95_low": 1.4138583200883146,
      "point": 1.4339835795448452
     },
     "speedup_vs_libsecp256k1_single_verify": {
      "bootstrap_resamples": 2000,
      "ci95_high": 0.7788066976696858,
      "ci95_low": 0.7656313987568761,
      "point": 0.7728420109731818
     },
     "window_bits": 0
    }
   ],
   "single_verify_reference_ns": {
    "k256_verify_raw": 24486.6875,
    "libsecp256k1_schnorr_verify": 13197.0415
   },
   "sizes": [
    1,
    2,
    4,
    8,
    16,
    32,
    64,
    128,
    256,
    512,
    1024,
    2048
   ]
  },
  "python_baselines": {
   "seed": 34,
   "ops": 20,
   "reps": 7,
   "python": "3.12.13",
   "results": {
    "wp34_pure_python_ecdsa_sign": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      3801920.8,
      3812612.5,
      3854562.5,
      3812591.65,
      3804981.25,
      3800593.75,
      3900514.55
     ],
     "median_ns": 3812591.65,
     "q1_ns": 3803451.025,
     "q3_ns": 3833587.5,
     "iqr_ns": 30136.475000000093,
     "min_ns": 3800593.75,
     "mean_ns": 3826825.285714286,
     "sd_ns": 37393.29075653937,
     "ops_per_s": 262.2887767170135
    },
    "wp34_pure_python_ecdsa_verify": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      8599947.9,
      8206531.25,
      7140266.7,
      7175522.9,
      7237068.75,
      7099704.15,
      7252956.25
     ],
     "median_ns": 7237068.75,
     "q1_ns": 7157894.800000001,
     "q3_ns": 7729743.75,
     "iqr_ns": 571848.9499999993,
     "min_ns": 7099704.15,
     "mean_ns": 7530285.414285714,
     "sd_ns": 609336.3884085865,
     "ops_per_s": 138.17749071404083
    },
    "wp34_pure_python_ecdsa_verify_shamir": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      4504793.75,
      4374181.25,
      4508685.4,
      4517350.0,
      4376629.15,
      4327158.35,
      4389137.5
     ],
     "median_ns": 4389137.5,
     "q1_ns": 4375405.2,
     "q3_ns": 4506739.575,
     "iqr_ns": 131334.375,
     "min_ns": 4327158.35,
     "mean_ns": 4428276.485714286,
     "sd_ns": 79167.60234257094,
     "ops_per_s": 227.83519541139916
    },
    "wp34_pure_python_schnorr_sign": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      14907475.0,
      14713058.3,
      14788443.75,
      14512383.35,
      14396831.25,
      14651887.5,
      15177497.9
     ],
     "median_ns": 14713058.3,
     "q1_ns": 14582135.425,
     "q3_ns": 14847959.375,
     "iqr_ns": 265823.94999999925,
     "min_ns": 14396831.25,
     "mean_ns": 14735368.15,
     "sd_ns": 258106.1490264036,
     "ops_per_s": 67.96683460433239
    },
    "wp34_pure_python_schnorr_verify": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      7513406.25,
      7377645.85,
      7493079.2,
      7417233.35,
      7353604.15,
      7340768.75,
      7494881.25
     ],
     "median_ns": 7417233.35,
     "q1_ns": 7365625.0,
     "q3_ns": 7493980.225,
     "iqr_ns": 128355.22499999963,
     "min_ns": 7340768.75,
     "mean_ns": 7427231.257142857,
     "sd_ns": 72794.21829425759,
     "ops_per_s": 134.82115942867026
    },
    "wp34_pure_python_schnorr_batch_verify_per_sig": {
     "reps": 7,
     "ops_per_rep": 16,
     "ns_per_op_samples": [
      5586445.3125,
      5942755.1875,
      5719567.75,
      5673229.125,
      5656442.75,
      5712385.4375,
      5768197.875
     ],
     "median_ns": 5712385.4375,
     "q1_ns": 5664835.9375,
     "q3_ns": 5743882.8125,
     "iqr_ns": 79046.875,
     "min_ns": 5586445.3125,
     "mean_ns": 5722717.633928572,
     "sd_ns": 112556.11319446212,
     "ops_per_s": 175.05821533598152,
     "batch_size": 16
    },
    "python_ecdsa_pkg_ecdsa_sign": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      118562.5,
      118614.6,
      118029.2,
      117841.65,
      116395.85,
      118050.0,
      117793.75
     ],
     "median_ns": 118029.2,
     "q1_ns": 117817.7,
     "q3_ns": 118306.25,
     "iqr_ns": 488.5500000000029,
     "min_ns": 116395.85,
     "mean_ns": 117898.22142857143,
     "sd_ns": 737.7771698697045,
     "ops_per_s": 8472.47969146618
    },
    "python_ecdsa_pkg_ecdsa_verify": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      420854.15,
      419358.35,
      415862.5,
      414627.1,
      414229.2,
      442475.0,
      444735.4
     ],
     "median_ns": 419358.35,
     "q1_ns": 415244.8,
     "q3_ns": 431664.575,
     "iqr_ns": 16419.775000000023,
     "min_ns": 414229.2,
     "mean_ns": 424591.67142857146,
     "sd_ns": 13227.571538578595,
     "ops_per_s": 2384.5954182145174
    },
    "coincurve_ecdsa_sign_der": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      12095.8,
      11950.0,
      12045.85,
      11935.4,
      11945.85,
      11931.25,
      11933.35
     ],
     "median_ns": 11945.85,
     "q1_ns": 11934.375,
     "q3_ns": 11997.925,
     "iqr_ns": 63.54999999999927,
     "min_ns": 11931.25,
     "mean_ns": 11976.785714285714,
     "sd_ns": 66.18371976479365,
     "ops_per_s": 83711.0795799378
    },
    "coincurve_ecdsa_verify_der": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      13354.2,
      12802.05,
      12689.6,
      12606.25,
      12568.75,
      12677.05,
      12660.4
     ],
     "median_ns": 12677.05,
     "q1_ns": 12633.325,
     "q3_ns": 12745.825,
     "iqr_ns": 112.5,
     "min_ns": 12568.75,
     "mean_ns": 12765.471428571429,
     "sd_ns": 269.75449773380836,
     "ops_per_s": 78882.70536126307
    },
    "coincurve_schnorr_sign": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      28385.4,
      28341.65,
      28493.75,
      28347.9,
      28220.85,
      27952.1,
      27862.5
     ],
     "median_ns": 28341.65,
     "q1_ns": 28086.475,
     "q3_ns": 28366.65,
     "iqr_ns": 280.1750000000029,
     "min_ns": 27862.5,
     "mean_ns": 28229.164285714283,
     "sd_ns": 235.3872159412481,
     "ops_per_s": 35283.760825498866
    },
    "coincurve_schnorr_verify": {
     "reps": 7,
     "ops_per_rep": 20,
     "ns_per_op_samples": [
      12550.0,
      12658.35,
      12520.85,
      12516.65,
      12516.65,
      12504.15,
      12472.9
     ],
     "median_ns": 12516.65,
     "q1_ns": 12510.4,
     "q3_ns": 12535.425,
     "iqr_ns": 25.024999999999636,
     "min_ns": 12472.9,
     "mean_ns": 12534.221428571429,
     "sd_ns": 59.32646863713034,
     "ops_per_s": 79893.58174911019
    }
   },
   "versions": {
    "ecdsa": "0.19.2",
    "coincurve": "21.0.0"
   },
   "pure_python_batch_negative_control_rejected": true,
   "coincurve_schnorr_identical_to_wp34": 20
  },
  "rust_elapsed_s": 20.08,
  "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": 39.823,
 "label": "Laptop (Apple M5 Max)",
 "toolchain": {
  "rustc": "rustc 1.95.0 (59807616e 2026-04-14)",
  "cargo": "cargo 1.95.0 (f2d3ce0bd 2026-03-21)",
  "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"
}