SPB Git

spb/wp34_uqo

Public
47.2 KB · 2,399 lines json
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}
Files · main
Menu

Theme