1{2 "generated_utc": "2026-11-01T05:51:15+00:00",3 "n_hosts": 2,4 "hosts": {5 "Laptop (Apple M5 Max)": {6 "file": "bench_MacBookPro-de-simon-pierre-2.json",7 "hostname": "MacBookPro-de-simon-pierre-2.local",8 "cpu": "Apple M5 Max",9 "cores": 18,10 "ram_gb": 48.0,11 "os": "Darwin 27.0.0 (27.0)",12 "timestamp_utc": "2026-11-01T05:49:56+00:00",13 "seed": 34,14 "rustc": "rustc 1.95.0 (59807616e 2026-04-14)",15 "crates": {16 "secp256k1": "0.33.1",17 "secp256k1-sys": "0.14.1",18 "k256": "0.14.0"19 },20 "correctness_gates": {21 "bip340_vectors_both_libraries": true,22 "cross_library_1000": true,23 "python_reference_200": true,24 "own_scalar_mult_agrees_with_k256": true,25 "batch_negative_controls_rejected": true,26 "all": true27 },28 "bip340_vectors": {29 "libsecp256k1": {30 "verify_pass": 19,31 "sign_pass": 8,32 "n": 1933 },34 "k256": {35 "verify_pass": 19,36 "sign_pass": 8,37 "n": 1938 }39 },40 "cross_library_checks": {41 "all_pass": true,42 "ecdsa_k256_sign_libsecp_verify_pass": 1000,43 "ecdsa_libsecp_sign_k256_verify_pass": 1000,44 "ecdsa_signatures_byte_identical": 1000,45 "n": 1000,46 "schnorr_k256_sign_libsecp_verify_pass": 1000,47 "schnorr_libsecp_sign_k256_verify_pass": 1000,48 "schnorr_signatures_byte_identical": 100049 },50 "python_reference_crosscheck": {51 "n": 200,52 "ecdsa_k256_sig_verified_by_python": 200,53 "ecdsa_libsecp_sig_verified_by_python": 200,54 "ecdsa_python_resign_identical": 200,55 "schnorr_k256_sig_verified_by_python": 200,56 "schnorr_libsecp_sig_verified_by_python": 200,57 "schnorr_python_resign_identical": 200,58 "tampered_sig_rejected_by_python": 200,59 "elapsed_s": 11.27,60 "resign_checked": true,61 "all_pass": true62 },63 "sign_verify_median_ns": {64 "ecdsa_sign_k256": 15267.4,65 "ecdsa_sign_libsecp256k1": 23630.8,66 "ecdsa_verify_k256": 25012.1,67 "ecdsa_verify_libsecp256k1": 12615.6,68 "schnorr_sign_k256": 11569.1,69 "schnorr_sign_libsecp256k1": 20548.2,70 "schnorr_verify_k256": 24486.7,71 "schnorr_verify_libsecp256k1": 13197.072 },73 "scalar_mult_median_ns": {74 "k256_generator_mul_ct_glv": 16409.7,75 "k256_mul_by_generator_precomputed_table": 8293.1,76 "k256_mul_by_generator_vartime_table": 6577.5,77 "k256_point_mul_ct_glv": 17153.2,78 "k256_point_mul_vartime_glv_wnaf": 13955.7,79 "libsecp256k1_generator_mul_ecmult_gen": 19804.6,80 "libsecp256k1_point_mul_tweak_ecmult_const": 11468.1,81 "own_wnaf5_point_mul_no_glv": 21122.082 },83 "single_verify_reference_ns": {84 "k256_verify_raw": 24486.6875,85 "libsecp256k1_schnorr_verify": 13197.041586 },87 "batch_verification": {88 "straus_wnaf5": {89 "1": {90 "ns_per_sig": 30351.3,91 "iqr_ns": 326.3,92 "msm_only_ns_per_sig": 27251.2,93 "speedup_vs_k256": [94 0.807,95 0.791,96 0.82497 ],98 "speedup_vs_libsecp256k1": [99 0.435,100 0.428,101 0.437102 ],103 "window_bits": 5,104 "ops_per_sig": {105 "adds": 107.0,106 "doublings": 259.0,107 "mixed_adds": 0.0,108 "total": 366.0109 }110 },111 "2": {112 "ns_per_sig": 21329.2,113 "iqr_ns": 350.1,114 "msm_only_ns_per_sig": 18207.7,115 "speedup_vs_k256": [116 1.148,117 1.13,118 1.19119 ],120 "speedup_vs_libsecp256k1": [121 0.619,122 0.612,123 0.631124 ],125 "window_bits": 5,126 "ops_per_sig": {127 "adds": 93.5,128 "doublings": 130.5,129 "mixed_adds": 0.0,130 "total": 224.0131 }132 },133 "4": {134 "ns_per_sig": 16338.0,135 "iqr_ns": 30.3,136 "msm_only_ns_per_sig": 13287.0,137 "speedup_vs_k256": [138 1.499,139 1.481,140 1.531141 ],142 "speedup_vs_libsecp256k1": [143 0.808,144 0.802,145 0.813146 ],147 "window_bits": 5,148 "ops_per_sig": {149 "adds": 86.2,150 "doublings": 66.2,151 "mixed_adds": 0.0,152 "total": 152.5153 }154 },155 "8": {156 "ns_per_sig": 14054.3,157 "iqr_ns": 271.9,158 "msm_only_ns_per_sig": 11011.5,159 "speedup_vs_k256": [160 1.742,161 1.695,162 1.782163 ],164 "speedup_vs_libsecp256k1": [165 0.939,166 0.914,167 0.945168 ],169 "window_bits": 5,170 "ops_per_sig": {171 "adds": 82.8,172 "doublings": 34.1,173 "mixed_adds": 0.0,174 "total": 116.9175 }176 },177 "16": {178 "ns_per_sig": 12881.9,179 "iqr_ns": 40.0,180 "msm_only_ns_per_sig": 9834.4,181 "speedup_vs_k256": [182 1.901,183 1.879,184 1.942185 ],186 "speedup_vs_libsecp256k1": [187 1.024,188 1.017,189 1.031190 ],191 "window_bits": 5,192 "ops_per_sig": {193 "adds": 81.0,194 "doublings": 18.1,195 "mixed_adds": 0.0,196 "total": 99.1197 }198 },199 "32": {200 "ns_per_sig": 12275.3,201 "iqr_ns": 57.9,202 "msm_only_ns_per_sig": 9238.9,203 "speedup_vs_k256": [204 1.995,205 1.966,206 2.039207 ],208 "speedup_vs_libsecp256k1": [209 1.075,210 1.061,211 1.082212 ],213 "window_bits": 5,214 "ops_per_sig": {215 "adds": 80.2,216 "doublings": 10.0,217 "mixed_adds": 0.0,218 "total": 90.2219 }220 },221 "64": {222 "ns_per_sig": 12078.2,223 "iqr_ns": 429.8,224 "msm_only_ns_per_sig": 9023.0,225 "speedup_vs_k256": [226 2.027,227 1.887,228 2.072229 ],230 "speedup_vs_libsecp256k1": [231 1.093,232 1.021,233 1.1234 ],235 "window_bits": 5,236 "ops_per_sig": {237 "adds": 79.0,238 "doublings": 6.0,239 "mixed_adds": 0.0,240 "total": 85.1241 }242 },243 "128": {244 "ns_per_sig": 12170.9,245 "iqr_ns": 344.3,246 "msm_only_ns_per_sig": 9073.8,247 "speedup_vs_k256": [248 2.012,249 1.931,250 2.078251 ],252 "speedup_vs_libsecp256k1": [253 1.084,254 1.044,255 1.101256 ],257 "window_bits": 5,258 "ops_per_sig": {259 "adds": 79.1,260 "doublings": 4.0,261 "mixed_adds": 0.0,262 "total": 83.1263 }264 },265 "256": {266 "ns_per_sig": 12388.5,267 "iqr_ns": 345.4,268 "msm_only_ns_per_sig": 9294.8,269 "speedup_vs_k256": [270 1.977,271 1.929,272 2.05273 ],274 "speedup_vs_libsecp256k1": [275 1.065,276 1.043,277 1.088278 ],279 "window_bits": 5,280 "ops_per_sig": {281 "adds": 79.0,282 "doublings": 3.0,283 "mixed_adds": 0.0,284 "total": 82.0285 }286 },287 "512": {288 "ns_per_sig": 12847.6,289 "iqr_ns": 173.3,290 "msm_only_ns_per_sig": 9581.1,291 "speedup_vs_k256": [292 1.906,293 1.886,294 1.971295 ],296 "speedup_vs_libsecp256k1": [297 1.027,298 1.021,299 1.047300 ],301 "window_bits": 5,302 "ops_per_sig": {303 "adds": 78.9,304 "doublings": 2.5,305 "mixed_adds": 0.0,306 "total": 81.4307 }308 },309 "1024": {310 "ns_per_sig": 12660.9,311 "iqr_ns": 35.3,312 "msm_only_ns_per_sig": 9625.3,313 "speedup_vs_k256": [314 1.934,315 1.91,316 1.978317 ],318 "speedup_vs_libsecp256k1": [319 1.042,320 1.035,321 1.049322 ],323 "window_bits": 5,324 "ops_per_sig": {325 "adds": 79.0,326 "doublings": 2.3,327 "mixed_adds": 0.0,328 "total": 81.2329 }330 },331 "2048": {332 "ns_per_sig": 13424.2,333 "iqr_ns": 88.1,334 "msm_only_ns_per_sig": 10377.6,335 "speedup_vs_k256": [336 1.824,337 1.798,338 1.873339 ],340 "speedup_vs_libsecp256k1": [341 0.983,342 0.974,343 0.992344 ],345 "window_bits": 5,346 "ops_per_sig": {347 "adds": 78.9,348 "doublings": 2.1,349 "mixed_adds": 0.0,350 "total": 81.0351 }352 }353 },354 "pippenger": {355 "1": {356 "ns_per_sig": 91869.8,357 "iqr_ns": 2179.1,358 "msm_only_ns_per_sig": 88626.9,359 "speedup_vs_k256": [360 0.267,361 0.263,362 0.279363 ],364 "speedup_vs_libsecp256k1": [365 0.144,366 0.142,367 0.148368 ],369 "window_bits": 3,370 "ops_per_sig": {371 "adds": 630.0,372 "doublings": 255.0,373 "mixed_adds": 154.0,374 "total": 1039.0375 }376 },377 "2": {378 "ns_per_sig": 58441.2,379 "iqr_ns": 411.7,380 "msm_only_ns_per_sig": 55311.6,381 "speedup_vs_k256": [382 0.419,383 0.413,384 0.429385 ],386 "speedup_vs_libsecp256k1": [387 0.226,388 0.223,389 0.227390 ],391 "window_bits": 3,392 "ops_per_sig": {393 "adds": 383.0,394 "doublings": 127.5,395 "mixed_adds": 127.0,396 "total": 637.5397 }398 },399 "4": {400 "ns_per_sig": 44337.9,401 "iqr_ns": 350.4,402 "msm_only_ns_per_sig": 41195.2,403 "speedup_vs_k256": [404 0.552,405 0.545,406 0.567407 ],408 "speedup_vs_libsecp256k1": [409 0.298,410 0.295,411 0.3412 ],413 "window_bits": 4,414 "ops_per_sig": {415 "adds": 306.0,416 "doublings": 63.0,417 "mixed_adds": 95.8,418 "total": 464.8419 }420 },421 "8": {422 "ns_per_sig": 30217.1,423 "iqr_ns": 209.3,424 "msm_only_ns_per_sig": 27119.5,425 "speedup_vs_k256": [426 0.81,427 0.802,428 0.834429 ],430 "speedup_vs_libsecp256k1": [431 0.437,432 0.433,433 0.442434 ],435 "window_bits": 4,436 "ops_per_sig": {437 "adds": 186.5,438 "doublings": 31.5,439 "mixed_adds": 93.1,440 "total": 311.1441 }442 },443 "16": {444 "ns_per_sig": 24855.1,445 "iqr_ns": 726.6,446 "msm_only_ns_per_sig": 21733.2,447 "speedup_vs_k256": [448 0.985,449 0.947,450 1.027451 ],452 "speedup_vs_libsecp256k1": [453 0.531,454 0.512,455 0.544456 ],457 "window_bits": 5,458 "ops_per_sig": {459 "adds": 151.8,460 "doublings": 15.9,461 "mixed_adds": 76.8,462 "total": 244.5463 }464 },465 "32": {466 "ns_per_sig": 18007.1,467 "iqr_ns": 24.0,468 "msm_only_ns_per_sig": 14947.9,469 "speedup_vs_k256": [470 1.36,471 1.346,472 1.39473 ],474 "speedup_vs_libsecp256k1": [475 0.733,476 0.729,477 0.738478 ],479 "window_bits": 5,480 "ops_per_sig": {481 "adds": 87.8,482 "doublings": 8.0,483 "mixed_adds": 75.6,484 "total": 171.4485 }486 },487 "64": {488 "ns_per_sig": 16124.6,489 "iqr_ns": 77.5,490 "msm_only_ns_per_sig": 12919.7,491 "speedup_vs_k256": [492 1.519,493 1.501,494 1.555495 ],496 "speedup_vs_libsecp256k1": [497 0.818,498 0.812,499 0.824500 ],501 "window_bits": 6,502 "ops_per_sig": {503 "adds": 73.6,504 "doublings": 3.9,505 "mixed_adds": 64.0,506 "total": 141.6507 }508 },509 "128": {510 "ns_per_sig": 12765.6,511 "iqr_ns": 568.3,512 "msm_only_ns_per_sig": 9613.0,513 "speedup_vs_k256": [514 1.918,515 1.812,516 2.023517 ],518 "speedup_vs_libsecp256k1": [519 1.034,520 0.98,521 1.072522 ],523 "window_bits": 6,524 "ops_per_sig": {525 "adds": 40.3,526 "doublings": 2.0,527 "mixed_adds": 63.9,528 "total": 106.2529 }530 },531 "256": {532 "ns_per_sig": 11349.3,533 "iqr_ns": 200.5,534 "msm_only_ns_per_sig": 8209.1,535 "speedup_vs_k256": [536 2.158,537 2.125,538 2.232539 ],540 "speedup_vs_libsecp256k1": [541 1.163,542 1.149,543 1.183544 ],545 "window_bits": 7,546 "ops_per_sig": {547 "adds": 34.6,548 "doublings": 1.0,549 "mixed_adds": 55.3,550 "total": 90.9551 }552 },553 "512": {554 "ns_per_sig": 9614.2,555 "iqr_ns": 450.1,556 "msm_only_ns_per_sig": 6513.0,557 "speedup_vs_k256": [558 2.547,559 2.379,560 2.629561 ],562 "speedup_vs_libsecp256k1": [563 1.373,564 1.287,565 1.393566 ],567 "window_bits": 7,568 "ops_per_sig": {569 "adds": 17.9,570 "doublings": 0.5,571 "mixed_adds": 55.3,572 "total": 73.7573 }574 },575 "1024": {576 "ns_per_sig": 8620.5,577 "iqr_ns": 8.9,578 "msm_only_ns_per_sig": 5581.1,579 "speedup_vs_k256": [580 2.841,581 2.81,582 2.902583 ],584 "speedup_vs_libsecp256k1": [585 1.531,586 1.522,587 1.541588 ],589 "window_bits": 8,590 "ops_per_sig": {591 "adds": 15.9,592 "doublings": 0.2,593 "mixed_adds": 47.8,594 "total": 64.0595 }596 },597 "2048": {598 "ns_per_sig": 7911.2,599 "iqr_ns": 37.8,600 "msm_only_ns_per_sig": 4870.9,601 "speedup_vs_k256": [602 3.095,603 3.047,604 3.162605 ],606 "speedup_vs_libsecp256k1": [607 1.668,608 1.646,609 1.679610 ],611 "window_bits": 8,612 "ops_per_sig": {613 "adds": 8.0,614 "doublings": 0.1,615 "mixed_adds": 47.8,616 "total": 55.9617 }618 }619 },620 "k256_lincomb_vartime": {621 "1": {622 "ns_per_sig": 25136.9,623 "iqr_ns": 160.4,624 "msm_only_ns_per_sig": 22011.5,625 "speedup_vs_k256": [626 0.974,627 0.964,628 1.004629 ],630 "speedup_vs_libsecp256k1": [631 0.525,632 0.522,633 0.532634 ],635 "window_bits": 0,636 "ops_per_sig": {637 "adds": 0.0,638 "doublings": 0.0,639 "mixed_adds": 0.0,640 "total": 0.0641 }642 },643 "2": {644 "ns_per_sig": 19563.7,645 "iqr_ns": 44.9,646 "msm_only_ns_per_sig": 16485.8,647 "speedup_vs_k256": [648 1.252,649 1.236,650 1.279651 ],652 "speedup_vs_libsecp256k1": [653 0.675,654 0.669,655 0.679656 ],657 "window_bits": 0,658 "ops_per_sig": {659 "adds": 0.0,660 "doublings": 0.0,661 "mixed_adds": 0.0,662 "total": 0.0663 }664 },665 "4": {666 "ns_per_sig": 16919.2,667 "iqr_ns": 31.2,668 "msm_only_ns_per_sig": 13860.9,669 "speedup_vs_k256": [670 1.447,671 1.432,672 1.48673 ],674 "speedup_vs_libsecp256k1": [675 0.78,676 0.775,677 0.785678 ],679 "window_bits": 0,680 "ops_per_sig": {681 "adds": 0.0,682 "doublings": 0.0,683 "mixed_adds": 0.0,684 "total": 0.0685 }686 },687 "8": {688 "ns_per_sig": 15600.5,689 "iqr_ns": 16.4,690 "msm_only_ns_per_sig": 12545.7,691 "speedup_vs_k256": [692 1.57,693 1.553,694 1.604695 ],696 "speedup_vs_libsecp256k1": [697 0.846,698 0.841,699 0.851700 ],701 "window_bits": 0,702 "ops_per_sig": {703 "adds": 0.0,704 "doublings": 0.0,705 "mixed_adds": 0.0,706 "total": 0.0707 }708 },709 "16": {710 "ns_per_sig": 14817.5,711 "iqr_ns": 23.4,712 "msm_only_ns_per_sig": 11788.5,713 "speedup_vs_k256": [714 1.653,715 1.635,716 1.688717 ],718 "speedup_vs_libsecp256k1": [719 0.891,720 0.885,721 0.896722 ],723 "window_bits": 0,724 "ops_per_sig": {725 "adds": 0.0,726 "doublings": 0.0,727 "mixed_adds": 0.0,728 "total": 0.0729 }730 },731 "32": {732 "ns_per_sig": 14977.6,733 "iqr_ns": 282.7,734 "msm_only_ns_per_sig": 11845.7,735 "speedup_vs_k256": [736 1.635,737 1.606,738 1.689739 ],740 "speedup_vs_libsecp256k1": [741 0.881,742 0.869,743 0.895744 ],745 "window_bits": 0,746 "ops_per_sig": {747 "adds": 0.0,748 "doublings": 0.0,749 "mixed_adds": 0.0,750 "total": 0.0751 }752 },753 "64": {754 "ns_per_sig": 15343.0,755 "iqr_ns": 177.9,756 "msm_only_ns_per_sig": 12128.5,757 "speedup_vs_k256": [758 1.596,759 1.569,760 1.637761 ],762 "speedup_vs_libsecp256k1": [763 0.86,764 0.849,765 0.867766 ],767 "window_bits": 0,768 "ops_per_sig": {769 "adds": 0.0,770 "doublings": 0.0,771 "mixed_adds": 0.0,772 "total": 0.0773 }774 },775 "128": {776 "ns_per_sig": 15261.4,777 "iqr_ns": 454.7,778 "msm_only_ns_per_sig": 12079.4,779 "speedup_vs_k256": [780 1.604,781 1.558,782 1.677783 ],784 "speedup_vs_libsecp256k1": [785 0.865,786 0.843,787 0.888788 ],789 "window_bits": 0,790 "ops_per_sig": {791 "adds": 0.0,792 "doublings": 0.0,793 "mixed_adds": 0.0,794 "total": 0.0795 }796 },797 "256": {798 "ns_per_sig": 15002.3,799 "iqr_ns": 169.5,800 "msm_only_ns_per_sig": 11865.3,801 "speedup_vs_k256": [802 1.632,803 1.612,804 1.688805 ],806 "speedup_vs_libsecp256k1": [807 0.88,808 0.873,809 0.894810 ],811 "window_bits": 0,812 "ops_per_sig": {813 "adds": 0.0,814 "doublings": 0.0,815 "mixed_adds": 0.0,816 "total": 0.0817 }818 },819 "512": {820 "ns_per_sig": 15830.5,821 "iqr_ns": 515.1,822 "msm_only_ns_per_sig": 12672.7,823 "speedup_vs_k256": [824 1.547,825 1.511,826 1.621827 ],828 "speedup_vs_libsecp256k1": [829 0.834,830 0.818,831 0.859832 ],833 "window_bits": 0,834 "ops_per_sig": {835 "adds": 0.0,836 "doublings": 0.0,837 "mixed_adds": 0.0,838 "total": 0.0839 }840 },841 "1024": {842 "ns_per_sig": 15835.7,843 "iqr_ns": 84.2,844 "msm_only_ns_per_sig": 12786.2,845 "speedup_vs_k256": [846 1.546,847 1.526,848 1.584849 ],850 "speedup_vs_libsecp256k1": [851 0.833,852 0.826,853 0.839854 ],855 "window_bits": 0,856 "ops_per_sig": {857 "adds": 0.0,858 "doublings": 0.0,859 "mixed_adds": 0.0,860 "total": 0.0861 }862 },863 "2048": {864 "ns_per_sig": 17076.0,865 "iqr_ns": 108.4,866 "msm_only_ns_per_sig": 14036.9,867 "speedup_vs_k256": [868 1.434,869 1.414,870 1.467871 ],872 "speedup_vs_libsecp256k1": [873 0.773,874 0.766,875 0.779876 ],877 "window_bits": 0,878 "ops_per_sig": {879 "adds": 0.0,880 "doublings": 0.0,881 "mixed_adds": 0.0,882 "total": 0.0883 }884 }885 },886 "k256_lincomb_ct": {887 "1": {888 "ns_per_sig": 38468.8,889 "iqr_ns": 579.9,890 "msm_only_ns_per_sig": 35306.4,891 "speedup_vs_k256": [892 0.637,893 0.624,894 0.654895 ],896 "speedup_vs_libsecp256k1": [897 0.343,898 0.338,899 0.347900 ],901 "window_bits": 0,902 "ops_per_sig": {903 "adds": 0.0,904 "doublings": 0.0,905 "mixed_adds": 0.0,906 "total": 0.0907 }908 },909 "2": {910 "ns_per_sig": 29666.7,911 "iqr_ns": 692.4,912 "msm_only_ns_per_sig": 26563.9,913 "speedup_vs_k256": [914 0.825,915 0.796,916 0.845917 ],918 "speedup_vs_libsecp256k1": [919 0.445,920 0.431,921 0.449922 ],923 "window_bits": 0,924 "ops_per_sig": {925 "adds": 0.0,926 "doublings": 0.0,927 "mixed_adds": 0.0,928 "total": 0.0929 }930 },931 "4": {932 "ns_per_sig": 25549.6,933 "iqr_ns": 489.6,934 "msm_only_ns_per_sig": 22442.4,935 "speedup_vs_k256": [936 0.958,937 0.942,938 0.99939 ],940 "speedup_vs_libsecp256k1": [941 0.517,942 0.51,943 0.525944 ],945 "window_bits": 0,946 "ops_per_sig": {947 "adds": 0.0,948 "doublings": 0.0,949 "mixed_adds": 0.0,950 "total": 0.0951 }952 },953 "8": {954 "ns_per_sig": 23098.9,955 "iqr_ns": 529.5,956 "msm_only_ns_per_sig": 20033.1,957 "speedup_vs_k256": [958 1.06,959 1.009,960 1.083961 ],962 "speedup_vs_libsecp256k1": [963 0.571,964 0.546,965 0.575966 ],967 "window_bits": 0,968 "ops_per_sig": {969 "adds": 0.0,970 "doublings": 0.0,971 "mixed_adds": 0.0,972 "total": 0.0973 }974 },975 "16": {976 "ns_per_sig": 22480.8,977 "iqr_ns": 319.9,978 "msm_only_ns_per_sig": 19377.0,979 "speedup_vs_k256": [980 1.089,981 1.066,982 1.116983 ],984 "speedup_vs_libsecp256k1": [985 0.587,986 0.577,987 0.591988 ],989 "window_bits": 0,990 "ops_per_sig": {991 "adds": 0.0,992 "doublings": 0.0,993 "mixed_adds": 0.0,994 "total": 0.0995 }996 },997 "32": {998 "ns_per_sig": 22322.1,999 "iqr_ns": 444.3,1000 "msm_only_ns_per_sig": 19180.2,1001 "speedup_vs_k256": [1002 1.097,1003 1.057,1004 1.1231005 ],1006 "speedup_vs_libsecp256k1": [1007 0.591,1008 0.572,1009 0.5961010 ],1011 "window_bits": 0,1012 "ops_per_sig": {1013 "adds": 0.0,1014 "doublings": 0.0,1015 "mixed_adds": 0.0,1016 "total": 0.01017 }1018 },1019 "64": {1020 "ns_per_sig": 21944.3,1021 "iqr_ns": 287.6,1022 "msm_only_ns_per_sig": 18811.7,1023 "speedup_vs_k256": [1024 1.116,1025 1.094,1026 1.1421027 ],1028 "speedup_vs_libsecp256k1": [1029 0.601,1030 0.591,1031 0.6051032 ],1033 "window_bits": 0,1034 "ops_per_sig": {1035 "adds": 0.0,1036 "doublings": 0.0,1037 "mixed_adds": 0.0,1038 "total": 0.01039 }1040 },1041 "128": {1042 "ns_per_sig": 21892.2,1043 "iqr_ns": 264.7,1044 "msm_only_ns_per_sig": 18683.7,1045 "speedup_vs_k256": [1046 1.119,1047 1.098,1048 1.1481049 ],1050 "speedup_vs_libsecp256k1": [1051 0.603,1052 0.594,1053 0.6081054 ],1055 "window_bits": 0,1056 "ops_per_sig": {1057 "adds": 0.0,1058 "doublings": 0.0,1059 "mixed_adds": 0.0,1060 "total": 0.01061 }1062 },1063 "256": {1064 "ns_per_sig": 21844.3,1065 "iqr_ns": 307.4,1066 "msm_only_ns_per_sig": 18714.7,1067 "speedup_vs_k256": [1068 1.121,1069 1.096,1070 1.1491071 ],1072 "speedup_vs_libsecp256k1": [1073 0.604,1074 0.593,1075 0.6091076 ],1077 "window_bits": 0,1078 "ops_per_sig": {1079 "adds": 0.0,1080 "doublings": 0.0,1081 "mixed_adds": 0.0,1082 "total": 0.01083 }1084 }1085 }1086 },1087 "best_batch_speedup_per_algorithm": {1088 "straus_wnaf5": {1089 "batch_size": 64,1090 "ns_per_sig": 12078.2,1091 "iqr_ns": 429.8,1092 "msm_only_ns_per_sig": 9023.0,1093 "speedup_vs_k256": [1094 2.027,1095 1.887,1096 2.0721097 ],1098 "speedup_vs_libsecp256k1": [1099 1.093,1100 1.021,1101 1.11102 ],1103 "window_bits": 5,1104 "ops_per_sig": {1105 "adds": 79.0,1106 "doublings": 6.0,1107 "mixed_adds": 0.0,1108 "total": 85.11109 }1110 },1111 "pippenger": {1112 "batch_size": 2048,1113 "ns_per_sig": 7911.2,1114 "iqr_ns": 37.8,1115 "msm_only_ns_per_sig": 4870.9,1116 "speedup_vs_k256": [1117 3.095,1118 3.047,1119 3.1621120 ],1121 "speedup_vs_libsecp256k1": [1122 1.668,1123 1.646,1124 1.6791125 ],1126 "window_bits": 8,1127 "ops_per_sig": {1128 "adds": 8.0,1129 "doublings": 0.1,1130 "mixed_adds": 47.8,1131 "total": 55.91132 }1133 },1134 "k256_lincomb_vartime": {1135 "batch_size": 16,1136 "ns_per_sig": 14817.5,1137 "iqr_ns": 23.4,1138 "msm_only_ns_per_sig": 11788.5,1139 "speedup_vs_k256": [1140 1.653,1141 1.635,1142 1.6881143 ],1144 "speedup_vs_libsecp256k1": [1145 0.891,1146 0.885,1147 0.8961148 ],1149 "window_bits": 0,1150 "ops_per_sig": {1151 "adds": 0.0,1152 "doublings": 0.0,1153 "mixed_adds": 0.0,1154 "total": 0.01155 }1156 },1157 "k256_lincomb_ct": {1158 "batch_size": 256,1159 "ns_per_sig": 21844.3,1160 "iqr_ns": 307.4,1161 "msm_only_ns_per_sig": 18714.7,1162 "speedup_vs_k256": [1163 1.121,1164 1.096,1165 1.1491166 ],1167 "speedup_vs_libsecp256k1": [1168 0.604,1169 0.593,1170 0.6091171 ],1172 "window_bits": 0,1173 "ops_per_sig": {1174 "adds": 0.0,1175 "doublings": 0.0,1176 "mixed_adds": 0.0,1177 "total": 0.01178 }1179 }1180 },1181 "negative_controls": true,1182 "python_baselines_median_ns": {1183 "wp34_pure_python_ecdsa_sign": 3812591.6,1184 "wp34_pure_python_ecdsa_verify": 7237068.8,1185 "wp34_pure_python_ecdsa_verify_shamir": 4389137.5,1186 "wp34_pure_python_schnorr_sign": 14713058.3,1187 "wp34_pure_python_schnorr_verify": 7417233.3,1188 "wp34_pure_python_schnorr_batch_verify_per_sig": 5712385.4,1189 "python_ecdsa_pkg_ecdsa_sign": 118029.2,1190 "python_ecdsa_pkg_ecdsa_verify": 419358.3,1191 "coincurve_ecdsa_sign_der": 11945.9,1192 "coincurve_ecdsa_verify_der": 12677.0,1193 "coincurve_schnorr_sign": 28341.7,1194 "coincurve_schnorr_verify": 12516.61195 },1196 "python_versions": {1197 "ecdsa": "0.19.2",1198 "coincurve": "21.0.0"1199 },1200 "rust_elapsed_s": 20.081201 },1202 "M3U96a (Apple M3 Ultra)": {1203 "file": "bench_MacStudnpierre2.json",1204 "hostname": "MacStudnpierre2",1205 "cpu": "Apple M3 Ultra",1206 "cores": 28,1207 "ram_gb": 96.0,1208 "os": "Darwin 25.6.0 (26.6)",1209 "timestamp_utc": "2026-11-01T05:50:10+00:00",1210 "seed": 34,1211 "rustc": "rustc 1.96.0 (ac68faa20 2026-05-25) (Homebrew)",1212 "crates": {1213 "secp256k1": "0.33.1",1214 "secp256k1-sys": "0.14.1",1215 "k256": "0.14.0"1216 },1217 "correctness_gates": {1218 "bip340_vectors_both_libraries": true,1219 "cross_library_1000": true,1220 "python_reference_200": true,1221 "own_scalar_mult_agrees_with_k256": true,1222 "batch_negative_controls_rejected": true,1223 "all": true1224 },1225 "bip340_vectors": {1226 "libsecp256k1": {1227 "verify_pass": 19,1228 "sign_pass": 8,1229 "n": 191230 },1231 "k256": {1232 "verify_pass": 19,1233 "sign_pass": 8,1234 "n": 191235 }1236 },1237 "cross_library_checks": {1238 "all_pass": true,1239 "ecdsa_k256_sign_libsecp_verify_pass": 1000,1240 "ecdsa_libsecp_sign_k256_verify_pass": 1000,1241 "ecdsa_signatures_byte_identical": 1000,1242 "n": 1000,1243 "schnorr_k256_sign_libsecp_verify_pass": 1000,1244 "schnorr_libsecp_sign_k256_verify_pass": 1000,1245 "schnorr_signatures_byte_identical": 10001246 },1247 "python_reference_crosscheck": {1248 "n": 200,1249 "ecdsa_k256_sig_verified_by_python": 200,1250 "ecdsa_libsecp_sig_verified_by_python": 200,1251 "ecdsa_python_resign_identical": 200,1252 "schnorr_k256_sig_verified_by_python": 200,1253 "schnorr_libsecp_sig_verified_by_python": 200,1254 "schnorr_python_resign_identical": 200,1255 "tampered_sig_rejected_by_python": 200,1256 "elapsed_s": 13.45,1257 "resign_checked": true,1258 "all_pass": true1259 },1260 "sign_verify_median_ns": {1261 "ecdsa_sign_k256": 18848.6,1262 "ecdsa_sign_libsecp256k1": 29199.2,1263 "ecdsa_verify_k256": 33524.1,1264 "ecdsa_verify_libsecp256k1": 16680.4,1265 "schnorr_sign_k256": 14838.0,1266 "schnorr_sign_libsecp256k1": 24717.3,1267 "schnorr_verify_k256": 32497.6,1268 "schnorr_verify_libsecp256k1": 16944.21269 },1270 "scalar_mult_median_ns": {1271 "k256_generator_mul_ct_glv": 22876.1,1272 "k256_mul_by_generator_precomputed_table": 10800.4,1273 "k256_mul_by_generator_vartime_table": 9426.2,1274 "k256_point_mul_ct_glv": 23236.7,1275 "k256_point_mul_vartime_glv_wnaf": 19015.3,1276 "libsecp256k1_generator_mul_ecmult_gen": 23797.5,1277 "libsecp256k1_point_mul_tweak_ecmult_const": 15607.7,1278 "own_wnaf5_point_mul_no_glv": 28983.91279 },1280 "single_verify_reference_ns": {1281 "k256_verify_raw": 32497.646,1282 "libsecp256k1_schnorr_verify": 16944.16651283 },1284 "batch_verification": {1285 "straus_wnaf5": {1286 "1": {1287 "ns_per_sig": 41422.2,1288 "iqr_ns": 42.1,1289 "msm_only_ns_per_sig": 37863.7,1290 "speedup_vs_k256": [1291 0.785,1292 0.774,1293 0.7861294 ],1295 "speedup_vs_libsecp256k1": [1296 0.409,1297 0.409,1298 0.4161299 ],1300 "window_bits": 5,1301 "ops_per_sig": {1302 "adds": 107.0,1303 "doublings": 259.0,1304 "mixed_adds": 0.0,1305 "total": 366.01306 }1307 },1308 "2": {1309 "ns_per_sig": 28542.0,1310 "iqr_ns": 17.8,1311 "msm_only_ns_per_sig": 24900.3,1312 "speedup_vs_k256": [1313 1.139,1314 1.124,1315 1.1411316 ],1317 "speedup_vs_libsecp256k1": [1318 0.594,1319 0.593,1320 0.6041321 ],1322 "window_bits": 5,1323 "ops_per_sig": {1324 "adds": 93.5,1325 "doublings": 130.5,1326 "mixed_adds": 0.0,1327 "total": 224.01328 }1329 },1330 "4": {1331 "ns_per_sig": 22009.6,1332 "iqr_ns": 26.2,1333 "msm_only_ns_per_sig": 18389.0,1334 "speedup_vs_k256": [1335 1.477,1336 1.458,1337 1.481338 ],1339 "speedup_vs_libsecp256k1": [1340 0.77,1341 0.769,1342 0.7831343 ],1344 "window_bits": 5,1345 "ops_per_sig": {1346 "adds": 86.2,1347 "doublings": 66.2,1348 "mixed_adds": 0.0,1349 "total": 152.51350 }1351 },1352 "8": {1353 "ns_per_sig": 18839.2,1354 "iqr_ns": 24.7,1355 "msm_only_ns_per_sig": 15227.7,1356 "speedup_vs_k256": [1357 1.725,1358 1.703,1359 1.7291360 ],1361 "speedup_vs_libsecp256k1": [1362 0.899,1363 0.899,1364 0.9161365 ],1366 "window_bits": 5,1367 "ops_per_sig": {1368 "adds": 82.8,1369 "doublings": 34.1,1370 "mixed_adds": 0.0,1371 "total": 116.91372 }1373 },1374 "16": {1375 "ns_per_sig": 17269.9,1376 "iqr_ns": 37.9,1377 "msm_only_ns_per_sig": 13652.0,1378 "speedup_vs_k256": [1379 1.882,1380 1.854,1381 1.8861382 ],1383 "speedup_vs_libsecp256k1": [1384 0.981,1385 0.979,1386 0.9991387 ],1388 "window_bits": 5,1389 "ops_per_sig": {1390 "adds": 81.0,1391 "doublings": 18.1,1392 "mixed_adds": 0.0,1393 "total": 99.11394 }1395 },1396 "32": {1397 "ns_per_sig": 16478.0,1398 "iqr_ns": 303.5,1399 "msm_only_ns_per_sig": 12876.1,1400 "speedup_vs_k256": [1401 1.972,1402 1.905,1403 1.9781404 ],1405 "speedup_vs_libsecp256k1": [1406 1.028,1407 1.004,1408 1.0471409 ],1410 "window_bits": 5,1411 "ops_per_sig": {1412 "adds": 80.2,1413 "doublings": 10.0,1414 "mixed_adds": 0.0,1415 "total": 90.21416 }1417 },1418 "64": {1419 "ns_per_sig": 16163.4,1420 "iqr_ns": 25.1,1421 "msm_only_ns_per_sig": 12562.4,1422 "speedup_vs_k256": [1423 2.011,1424 1.984,1425 2.0151426 ],1427 "speedup_vs_libsecp256k1": [1428 1.048,1429 1.047,1430 1.0671431 ],1432 "window_bits": 5,1433 "ops_per_sig": {1434 "adds": 79.0,1435 "doublings": 6.0,1436 "mixed_adds": 0.0,1437 "total": 85.11438 }1439 },1440 "128": {1441 "ns_per_sig": 16073.6,1442 "iqr_ns": 46.1,1443 "msm_only_ns_per_sig": 12476.3,1444 "speedup_vs_k256": [1445 2.022,1446 1.993,1447 2.0261448 ],1449 "speedup_vs_libsecp256k1": [1450 1.054,1451 1.051,1452 1.0731453 ],1454 "window_bits": 5,1455 "ops_per_sig": {1456 "adds": 79.1,1457 "doublings": 4.0,1458 "mixed_adds": 0.0,1459 "total": 83.11460 }1461 },1462 "256": {1463 "ns_per_sig": 16127.7,1464 "iqr_ns": 27.0,1465 "msm_only_ns_per_sig": 12508.3,1466 "speedup_vs_k256": [1467 2.015,1468 1.99,1469 2.0221470 ],1471 "speedup_vs_libsecp256k1": [1472 1.051,1473 1.05,1474 1.071475 ],1476 "window_bits": 5,1477 "ops_per_sig": {1478 "adds": 79.0,1479 "doublings": 3.0,1480 "mixed_adds": 0.0,1481 "total": 82.01482 }1483 },1484 "512": {1485 "ns_per_sig": 16138.7,1486 "iqr_ns": 22.3,1487 "msm_only_ns_per_sig": 12536.1,1488 "speedup_vs_k256": [1489 2.014,1490 1.988,1491 2.0181492 ],1493 "speedup_vs_libsecp256k1": [1494 1.05,1495 1.048,1496 1.0691497 ],1498 "window_bits": 5,1499 "ops_per_sig": {1500 "adds": 78.9,1501 "doublings": 2.5,1502 "mixed_adds": 0.0,1503 "total": 81.41504 }1505 },1506 "1024": {1507 "ns_per_sig": 16192.4,1508 "iqr_ns": 37.4,1509 "msm_only_ns_per_sig": 12596.3,1510 "speedup_vs_k256": [1511 2.007,1512 1.98,1513 2.0121514 ],1515 "speedup_vs_libsecp256k1": [1516 1.046,1517 1.044,1518 1.0651519 ],1520 "window_bits": 5,1521 "ops_per_sig": {1522 "adds": 79.0,1523 "doublings": 2.3,1524 "mixed_adds": 0.0,1525 "total": 81.21526 }1527 },1528 "2048": {1529 "ns_per_sig": 16211.3,1530 "iqr_ns": 34.6,1531 "msm_only_ns_per_sig": 12612.3,1532 "speedup_vs_k256": [1533 2.005,1534 1.977,1535 2.0091536 ],1537 "speedup_vs_libsecp256k1": [1538 1.045,1539 1.042,1540 1.0641541 ],1542 "window_bits": 5,1543 "ops_per_sig": {1544 "adds": 78.9,1545 "doublings": 2.1,1546 "mixed_adds": 0.0,1547 "total": 81.01548 }1549 }1550 },1551 "pippenger": {1552 "1": {1553 "ns_per_sig": 132033.2,1554 "iqr_ns": 4832.1,1555 "msm_only_ns_per_sig": 128403.0,1556 "speedup_vs_k256": [1557 0.246,1558 0.235,1559 0.251560 ],1561 "speedup_vs_libsecp256k1": [1562 0.128,1563 0.124,1564 0.1311565 ],1566 "window_bits": 3,1567 "ops_per_sig": {1568 "adds": 630.0,1569 "doublings": 255.0,1570 "mixed_adds": 154.0,1571 "total": 1039.01572 }1573 },1574 "2": {1575 "ns_per_sig": 84597.7,1576 "iqr_ns": 819.6,1577 "msm_only_ns_per_sig": 80944.3,1578 "speedup_vs_k256": [1579 0.384,1580 0.376,1581 0.3851582 ],1583 "speedup_vs_libsecp256k1": [1584 0.2,1585 0.198,1586 0.2041587 ],1588 "window_bits": 3,1589 "ops_per_sig": {1590 "adds": 383.0,1591 "doublings": 127.5,1592 "mixed_adds": 127.0,1593 "total": 637.51594 }1595 },1596 "4": {1597 "ns_per_sig": 62885.9,1598 "iqr_ns": 122.3,1599 "msm_only_ns_per_sig": 59259.0,1600 "speedup_vs_k256": [1601 0.517,1602 0.509,1603 0.5181604 ],1605 "speedup_vs_libsecp256k1": [1606 0.269,1607 0.269,1608 0.2741609 ],1610 "window_bits": 4,1611 "ops_per_sig": {1612 "adds": 306.0,1613 "doublings": 63.0,1614 "mixed_adds": 95.8,1615 "total": 464.81616 }1617 },1618 "8": {1619 "ns_per_sig": 43290.0,1620 "iqr_ns": 881.7,1621 "msm_only_ns_per_sig": 39667.8,1622 "speedup_vs_k256": [1623 0.751,1624 0.721,1625 0.7521626 ],1627 "speedup_vs_libsecp256k1": [1628 0.391,1629 0.38,1630 0.3981631 ],1632 "window_bits": 4,1633 "ops_per_sig": {1634 "adds": 186.5,1635 "doublings": 31.5,1636 "mixed_adds": 93.1,1637 "total": 311.11638 }1639 },1640 "16": {1641 "ns_per_sig": 35558.2,1642 "iqr_ns": 550.2,1643 "msm_only_ns_per_sig": 31886.1,1644 "speedup_vs_k256": [1645 0.914,1646 0.896,1647 0.9281648 ],1649 "speedup_vs_libsecp256k1": [1650 0.477,1651 0.473,1652 0.4871653 ],1654 "window_bits": 5,1655 "ops_per_sig": {1656 "adds": 151.8,1657 "doublings": 15.9,1658 "mixed_adds": 76.8,1659 "total": 244.51660 }1661 },1662 "32": {1663 "ns_per_sig": 25749.6,1664 "iqr_ns": 206.1,1665 "msm_only_ns_per_sig": 22151.8,1666 "speedup_vs_k256": [1667 1.262,1668 1.23,1669 1.2641670 ],1671 "speedup_vs_libsecp256k1": [1672 0.658,1673 0.648,1674 0.6691675 ],1676 "window_bits": 5,1677 "ops_per_sig": {1678 "adds": 87.8,1679 "doublings": 8.0,1680 "mixed_adds": 75.6,1681 "total": 171.41682 }1683 },1684 "64": {1685 "ns_per_sig": 21915.1,1686 "iqr_ns": 133.2,1687 "msm_only_ns_per_sig": 18316.4,1688 "speedup_vs_k256": [1689 1.483,1690 1.451,1691 1.4861692 ],1693 "speedup_vs_libsecp256k1": [1694 0.773,1695 0.765,1696 0.7871697 ],1698 "window_bits": 6,1699 "ops_per_sig": {1700 "adds": 73.6,1701 "doublings": 3.9,1702 "mixed_adds": 64.0,1703 "total": 141.61704 }1705 },1706 "128": {1707 "ns_per_sig": 17814.8,1708 "iqr_ns": 339.2,1709 "msm_only_ns_per_sig": 14093.9,1710 "speedup_vs_k256": [1711 1.824,1712 1.794,1713 1.8851714 ],1715 "speedup_vs_libsecp256k1": [1716 0.951,1717 0.947,1718 0.9831719 ],1720 "window_bits": 6,1721 "ops_per_sig": {1722 "adds": 40.3,1723 "doublings": 2.0,1724 "mixed_adds": 63.9,1725 "total": 106.21726 }1727 },1728 "256": {1729 "ns_per_sig": 15327.1,1730 "iqr_ns": 13.9,1731 "msm_only_ns_per_sig": 11731.1,1732 "speedup_vs_k256": [1733 2.12,1734 2.093,1735 2.1251736 ],1737 "speedup_vs_libsecp256k1": [1738 1.106,1739 1.105,1740 1.1251741 ],1742 "window_bits": 7,1743 "ops_per_sig": {1744 "adds": 34.6,1745 "doublings": 1.0,1746 "mixed_adds": 55.3,1747 "total": 90.91748 }1749 },1750 "512": {1751 "ns_per_sig": 13426.0,1752 "iqr_ns": 111.6,1753 "msm_only_ns_per_sig": 9719.9,1754 "speedup_vs_k256": [1755 2.42,1756 2.386,1757 2.4471758 ],1759 "speedup_vs_libsecp256k1": [1760 1.262,1761 1.258,1762 1.2961763 ],1764 "window_bits": 7,1765 "ops_per_sig": {1766 "adds": 17.9,1767 "doublings": 0.5,1768 "mixed_adds": 55.3,1769 "total": 73.71770 }1771 },1772 "1024": {1773 "ns_per_sig": 11799.3,1774 "iqr_ns": 5.7,1775 "msm_only_ns_per_sig": 8207.1,1776 "speedup_vs_k256": [1777 2.754,1778 2.719,1779 2.7591780 ],1781 "speedup_vs_libsecp256k1": [1782 1.436,1783 1.435,1784 1.4611785 ],1786 "window_bits": 8,1787 "ops_per_sig": {1788 "adds": 15.9,1789 "doublings": 0.2,1790 "mixed_adds": 47.8,1791 "total": 64.01792 }1793 },1794 "2048": {1795 "ns_per_sig": 10711.1,1796 "iqr_ns": 5.0,1797 "msm_only_ns_per_sig": 7116.5,1798 "speedup_vs_k256": [1799 3.034,1800 2.995,1801 3.041802 ],1803 "speedup_vs_libsecp256k1": [1804 1.582,1805 1.581,1806 1.6091807 ],1808 "window_bits": 8,1809 "ops_per_sig": {1810 "adds": 8.0,1811 "doublings": 0.1,1812 "mixed_adds": 47.8,1813 "total": 55.91814 }1815 }1816 },1817 "k256_lincomb_vartime": {1818 "1": {1819 "ns_per_sig": 34243.4,1820 "iqr_ns": 30.5,1821 "msm_only_ns_per_sig": 30657.8,1822 "speedup_vs_k256": [1823 0.949,1824 0.937,1825 0.9511826 ],1827 "speedup_vs_libsecp256k1": [1828 0.495,1829 0.495,1830 0.5041831 ],1832 "window_bits": 0,1833 "ops_per_sig": {1834 "adds": 0.0,1835 "doublings": 0.0,1836 "mixed_adds": 0.0,1837 "total": 0.01838 }1839 },1840 "2": {1841 "ns_per_sig": 26871.3,1842 "iqr_ns": 16.4,1843 "msm_only_ns_per_sig": 23211.2,1844 "speedup_vs_k256": [1845 1.209,1846 1.194,1847 1.2121848 ],1849 "speedup_vs_libsecp256k1": [1850 0.631,1851 0.63,1852 0.6421853 ],1854 "window_bits": 0,1855 "ops_per_sig": {1856 "adds": 0.0,1857 "doublings": 0.0,1858 "mixed_adds": 0.0,1859 "total": 0.01860 }1861 },1862 "4": {1863 "ns_per_sig": 23361.8,1864 "iqr_ns": 380.2,1865 "msm_only_ns_per_sig": 19676.4,1866 "speedup_vs_k256": [1867 1.391,1868 1.352,1869 1.4041870 ],1871 "speedup_vs_libsecp256k1": [1872 0.725,1873 0.713,1874 0.7421875 ],1876 "window_bits": 0,1877 "ops_per_sig": {1878 "adds": 0.0,1879 "doublings": 0.0,1880 "mixed_adds": 0.0,1881 "total": 0.01882 }1883 },1884 "8": {1885 "ns_per_sig": 21912.0,1886 "iqr_ns": 447.8,1887 "msm_only_ns_per_sig": 18167.6,1888 "speedup_vs_k256": [1889 1.483,1890 1.46,1891 1.5171892 ],1893 "speedup_vs_libsecp256k1": [1894 0.773,1895 0.771,1896 0.7991897 ],1898 "window_bits": 0,1899 "ops_per_sig": {1900 "adds": 0.0,1901 "doublings": 0.0,1902 "mixed_adds": 0.0,1903 "total": 0.01904 }1905 },1906 "16": {1907 "ns_per_sig": 21011.6,1908 "iqr_ns": 172.3,1909 "msm_only_ns_per_sig": 17277.2,1910 "speedup_vs_k256": [1911 1.547,1912 1.521,1913 1.5571914 ],1915 "speedup_vs_libsecp256k1": [1916 0.806,1917 0.803,1918 0.8231919 ],1920 "window_bits": 0,1921 "ops_per_sig": {1922 "adds": 0.0,1923 "doublings": 0.0,1924 "mixed_adds": 0.0,1925 "total": 0.01926 }1927 },1928 "32": {1929 "ns_per_sig": 20577.6,1930 "iqr_ns": 323.6,1931 "msm_only_ns_per_sig": 16860.3,1932 "speedup_vs_k256": [1933 1.579,1934 1.557,1935 1.6221936 ],1937 "speedup_vs_libsecp256k1": [1938 0.823,1939 0.822,1940 0.8471941 ],1942 "window_bits": 0,1943 "ops_per_sig": {1944 "adds": 0.0,1945 "doublings": 0.0,1946 "mixed_adds": 0.0,1947 "total": 0.01948 }1949 },1950 "64": {1951 "ns_per_sig": 20212.7,1952 "iqr_ns": 241.6,1953 "msm_only_ns_per_sig": 16553.3,1954 "speedup_vs_k256": [1955 1.608,1956 1.588,1957 1.6291958 ],1959 "speedup_vs_libsecp256k1": [1960 0.838,1961 0.837,1962 0.8621963 ],1964 "window_bits": 0,1965 "ops_per_sig": {1966 "adds": 0.0,1967 "doublings": 0.0,1968 "mixed_adds": 0.0,1969 "total": 0.01970 }1971 },1972 "128": {1973 "ns_per_sig": 19917.9,1974 "iqr_ns": 69.9,1975 "msm_only_ns_per_sig": 16316.4,1976 "speedup_vs_k256": [1977 1.632,1978 1.604,1979 1.6361980 ],1981 "speedup_vs_libsecp256k1": [1982 0.851,1983 0.846,1984 0.8661985 ],1986 "window_bits": 0,1987 "ops_per_sig": {1988 "adds": 0.0,1989 "doublings": 0.0,1990 "mixed_adds": 0.0,1991 "total": 0.01992 }1993 },1994 "256": {1995 "ns_per_sig": 19898.3,1996 "iqr_ns": 64.0,1997 "msm_only_ns_per_sig": 16294.8,1998 "speedup_vs_k256": [1999 1.633,2000 1.607,2001 1.6372002 ],2003 "speedup_vs_libsecp256k1": [2004 0.852,2005 0.847,2006 0.8672007 ],2008 "window_bits": 0,2009 "ops_per_sig": {2010 "adds": 0.0,2011 "doublings": 0.0,2012 "mixed_adds": 0.0,2013 "total": 0.02014 }2015 },2016 "512": {2017 "ns_per_sig": 19945.9,2018 "iqr_ns": 361.8,2019 "msm_only_ns_per_sig": 16351.6,2020 "speedup_vs_k256": [2021 1.629,2022 1.558,2023 1.6332024 ],2025 "speedup_vs_libsecp256k1": [2026 0.85,2027 0.821,2028 0.8642029 ],2030 "window_bits": 0,2031 "ops_per_sig": {2032 "adds": 0.0,2033 "doublings": 0.0,2034 "mixed_adds": 0.0,2035 "total": 0.02036 }2037 },2038 "1024": {2039 "ns_per_sig": 20192.8,2040 "iqr_ns": 338.0,2041 "msm_only_ns_per_sig": 16590.5,2042 "speedup_vs_k256": [2043 1.609,2044 1.58,2045 1.632046 ],2047 "speedup_vs_libsecp256k1": [2048 0.839,2049 0.834,2050 0.8632051 ],2052 "window_bits": 0,2053 "ops_per_sig": {2054 "adds": 0.0,2055 "doublings": 0.0,2056 "mixed_adds": 0.0,2057 "total": 0.02058 }2059 },2060 "2048": {2061 "ns_per_sig": 20122.7,2062 "iqr_ns": 706.1,2063 "msm_only_ns_per_sig": 16532.3,2064 "speedup_vs_k256": [2065 1.615,2066 1.544,2067 1.6312068 ],2069 "speedup_vs_libsecp256k1": [2070 0.842,2071 0.814,2072 0.8622073 ],2074 "window_bits": 0,2075 "ops_per_sig": {2076 "adds": 0.0,2077 "doublings": 0.0,2078 "mixed_adds": 0.0,2079 "total": 0.02080 }2081 }2082 },2083 "k256_lincomb_ct": {2084 "1": {2085 "ns_per_sig": 51239.4,2086 "iqr_ns": 247.9,2087 "msm_only_ns_per_sig": 47663.2,2088 "speedup_vs_k256": [2089 0.634,2090 0.623,2091 0.6352092 ],2093 "speedup_vs_libsecp256k1": [2094 0.331,2095 0.329,2096 0.3362097 ],2098 "window_bits": 0,2099 "ops_per_sig": {2100 "adds": 0.0,2101 "doublings": 0.0,2102 "mixed_adds": 0.0,2103 "total": 0.02104 }2105 },2106 "2": {2107 "ns_per_sig": 39937.9,2108 "iqr_ns": 978.0,2109 "msm_only_ns_per_sig": 36292.8,2110 "speedup_vs_k256": [2111 0.814,2112 0.786,2113 0.8162114 ],2115 "speedup_vs_libsecp256k1": [2116 0.424,2117 0.414,2118 0.4322119 ],2120 "window_bits": 0,2121 "ops_per_sig": {2122 "adds": 0.0,2123 "doublings": 0.0,2124 "mixed_adds": 0.0,2125 "total": 0.02126 }2127 },2128 "4": {2129 "ns_per_sig": 34094.9,2130 "iqr_ns": 16.2,2131 "msm_only_ns_per_sig": 30477.1,2132 "speedup_vs_k256": [2133 0.953,2134 0.941,2135 0.9552136 ],2137 "speedup_vs_libsecp256k1": [2138 0.497,2139 0.497,2140 0.5062141 ],2142 "window_bits": 0,2143 "ops_per_sig": {2144 "adds": 0.0,2145 "doublings": 0.0,2146 "mixed_adds": 0.0,2147 "total": 0.02148 }2149 },2150 "8": {2151 "ns_per_sig": 31232.3,2152 "iqr_ns": 14.1,2153 "msm_only_ns_per_sig": 27605.0,2154 "speedup_vs_k256": [2155 1.041,2156 1.028,2157 1.0422158 ],2159 "speedup_vs_libsecp256k1": [2160 0.543,2161 0.542,2162 0.5522163 ],2164 "window_bits": 0,2165 "ops_per_sig": {2166 "adds": 0.0,2167 "doublings": 0.0,2168 "mixed_adds": 0.0,2169 "total": 0.02170 }2171 },2172 "16": {2173 "ns_per_sig": 30383.2,2174 "iqr_ns": 1208.0,2175 "msm_only_ns_per_sig": 26715.4,2176 "speedup_vs_k256": [2177 1.07,2178 1.016,2179 1.0912180 ],2181 "speedup_vs_libsecp256k1": [2182 0.558,2183 0.536,2184 0.5752185 ],2186 "window_bits": 0,2187 "ops_per_sig": {2188 "adds": 0.0,2189 "doublings": 0.0,2190 "mixed_adds": 0.0,2191 "total": 0.02192 }2193 },2194 "32": {2195 "ns_per_sig": 29183.0,2196 "iqr_ns": 832.5,2197 "msm_only_ns_per_sig": 25570.6,2198 "speedup_vs_k256": [2199 1.114,2200 1.054,2201 1.1162202 ],2203 "speedup_vs_libsecp256k1": [2204 0.581,2205 0.556,2206 0.5912207 ],2208 "window_bits": 0,2209 "ops_per_sig": {2210 "adds": 0.0,2211 "doublings": 0.0,2212 "mixed_adds": 0.0,2213 "total": 0.02214 }2215 },2216 "64": {2217 "ns_per_sig": 28822.2,2218 "iqr_ns": 370.9,2219 "msm_only_ns_per_sig": 25216.5,2220 "speedup_vs_k256": [2221 1.128,2222 1.09,2223 1.132224 ],2225 "speedup_vs_libsecp256k1": [2226 0.588,2227 0.575,2228 0.5982229 ],2230 "window_bits": 0,2231 "ops_per_sig": {2232 "adds": 0.0,2233 "doublings": 0.0,2234 "mixed_adds": 0.0,2235 "total": 0.02236 }2237 },2238 "128": {2239 "ns_per_sig": 28822.7,2240 "iqr_ns": 616.1,2241 "msm_only_ns_per_sig": 25191.0,2242 "speedup_vs_k256": [2243 1.128,2244 1.096,2245 1.1382246 ],2247 "speedup_vs_libsecp256k1": [2248 0.588,2249 0.578,2250 0.6032251 ],2252 "window_bits": 0,2253 "ops_per_sig": {2254 "adds": 0.0,2255 "doublings": 0.0,2256 "mixed_adds": 0.0,2257 "total": 0.02258 }2259 },2260 "256": {2261 "ns_per_sig": 29308.9,2262 "iqr_ns": 1187.0,2263 "msm_only_ns_per_sig": 25624.5,2264 "speedup_vs_k256": [2265 1.109,2266 1.019,2267 1.1132268 ],2269 "speedup_vs_libsecp256k1": [2270 0.578,2271 0.537,2272 0.5892273 ],2274 "window_bits": 0,2275 "ops_per_sig": {2276 "adds": 0.0,2277 "doublings": 0.0,2278 "mixed_adds": 0.0,2279 "total": 0.02280 }2281 }2282 }2283 },2284 "best_batch_speedup_per_algorithm": {2285 "straus_wnaf5": {2286 "batch_size": 128,2287 "ns_per_sig": 16073.6,2288 "iqr_ns": 46.1,2289 "msm_only_ns_per_sig": 12476.3,2290 "speedup_vs_k256": [2291 2.022,2292 1.993,2293 2.0262294 ],2295 "speedup_vs_libsecp256k1": [2296 1.054,2297 1.051,2298 1.0732299 ],2300 "window_bits": 5,2301 "ops_per_sig": {2302 "adds": 79.1,2303 "doublings": 4.0,2304 "mixed_adds": 0.0,2305 "total": 83.12306 }2307 },2308 "pippenger": {2309 "batch_size": 2048,2310 "ns_per_sig": 10711.1,2311 "iqr_ns": 5.0,2312 "msm_only_ns_per_sig": 7116.5,2313 "speedup_vs_k256": [2314 3.034,2315 2.995,2316 3.042317 ],2318 "speedup_vs_libsecp256k1": [2319 1.582,2320 1.581,2321 1.6092322 ],2323 "window_bits": 8,2324 "ops_per_sig": {2325 "adds": 8.0,2326 "doublings": 0.1,2327 "mixed_adds": 47.8,2328 "total": 55.92329 }2330 },2331 "k256_lincomb_vartime": {2332 "batch_size": 256,2333 "ns_per_sig": 19898.3,2334 "iqr_ns": 64.0,2335 "msm_only_ns_per_sig": 16294.8,2336 "speedup_vs_k256": [2337 1.633,2338 1.607,2339 1.6372340 ],2341 "speedup_vs_libsecp256k1": [2342 0.852,2343 0.847,2344 0.8672345 ],2346 "window_bits": 0,2347 "ops_per_sig": {2348 "adds": 0.0,2349 "doublings": 0.0,2350 "mixed_adds": 0.0,2351 "total": 0.02352 }2353 },2354 "k256_lincomb_ct": {2355 "batch_size": 64,2356 "ns_per_sig": 28822.2,2357 "iqr_ns": 370.9,2358 "msm_only_ns_per_sig": 25216.5,2359 "speedup_vs_k256": [2360 1.128,2361 1.09,2362 1.132363 ],2364 "speedup_vs_libsecp256k1": [2365 0.588,2366 0.575,2367 0.5982368 ],2369 "window_bits": 0,2370 "ops_per_sig": {2371 "adds": 0.0,2372 "doublings": 0.0,2373 "mixed_adds": 0.0,2374 "total": 0.02375 }2376 }2377 },2378 "negative_controls": true,2379 "python_baselines_median_ns": {2380 "wp34_pure_python_ecdsa_sign": 4623656.2,2381 "wp34_pure_python_ecdsa_verify": 9114654.2,2382 "wp34_pure_python_ecdsa_verify_shamir": 5723125.0,2383 "wp34_pure_python_schnorr_sign": 18541975.0,2384 "wp34_pure_python_schnorr_verify": 9219837.5,2385 "wp34_pure_python_schnorr_batch_verify_per_sig": 7261630.22386 },2387 "python_versions": {2388 "ecdsa": null,2389 "coincurve": null2390 },2391 "rust_elapsed_s": 27.282392 }2393 },2394 "classification": {2395 "batch_verification_speedup": "known_reproduced",2396 "implementation_spread": "empirical_observation",2397 "bip340_vectors_and_cross_implementation_agreement": "known_reproduced"2398 }2399}