lib25519: Speed

In the following speed table, smaller numbers are better. The numbers are interquartile means of single-core cycle counts on various microarchitectures. Overclocking is disabled.

The table reports cycle counts from lib25519 and, for comparison, OpenSSL and s2n-bignum. For comparability to OpenSSL's speed-testing utility, the OpenSSL cycle counts omit various OpenSSL overheads; see below for details. The s2n-bignum and lib25519 cycle counts include all overheads. There is also a lib25519+s2n line showing separate measurements of lib25519 after an optional pre-configuration ./use-s2n-bignum step (which is a supported option for lib25519); a lib25519+exp line showing separate measurements of lib25519 after an experimental pre-configuration mv skipcompilers/* compilers step (which is unsupported: it uses instructions not supported by valgrind); and a lib25519+s2n+exp line.

μarch software X key X dh X batch Ed key Ed sign Ed verif Ed MSM
Intel Redwood Cove (2023) OpenSSL 102655 103510 106608 103247 341443
lib25519 23202 94878 63162 24481 27407 96199 30320
lib25519+exp 23345 67631 62627 24132 27683 93290 29890
lib25519+s2n+exp 23642 67570 62662 24103 27934 93889 29463
lib25519+s2n 24140 94798 63032 24287 27932 94654 30479
s2n-bignum 24669 75760
AMD Zen 4 (2022) OpenSSL 111574 109143 114875 110739 378734
lib25519 27981 70915 45918 28641 31993 123236 38862
lib25519+exp 22731 53572 22362 23522 26680 111059 34695
lib25519+s2n+exp 22697 53535 22478 23463 26706 113579 34551
lib25519+s2n 27990 71140 45752 28720 31793 124290 38900
s2n-bignum 26471 87905
Intel Golden Cove (2021) OpenSSL 98110 104590 99827 98099 331861
lib25519 25446 83586 50346 24993 28114 96327 31080
lib25519+exp 23828 69036 49930 24981 29277 95024 30688
lib25519+s2n+exp 23926 67997 49888 25053 28602 96265 30279
lib25519+s2n 24968 83546 50257 25311 28601 95184 31114
s2n-bignum 24124 75653
AMD Zen 3 (2020) OpenSSL 112079 117092 114230 111564 369827
lib25519 28736 73082 71153 29047 32447 127996 40558
lib25519+exp 25731 73020 47919 26596 29986 112251 35542
lib25519+s2n+exp 25682 73039 47832 26555 29972 112717 35462
lib25519+s2n 28242 73092 50367 29084 32402 126450 40762
s2n-bignum 26507 88942
Intel Tiger Lake (2020) OpenSSL 116185 122224 118890 117272 390023
lib25519 29203 85377 61558 30114 33707 114388 34988
lib25519+exp 27477 64604 21678 28300 31917 108489 32574
lib25519+s2n+exp 27493 64623 21666 28302 31967 106086 32869
lib25519+s2n 29493 85129 62324 30348 33880 113989 35743
s2n-bignum 27351 83661
AMD Zen 2 (2019) OpenSSL 123476 118444 125486 120168 398495
lib25519 27763 112800 74459 28647 31844 129584 37850
lib25519+exp 27715 101021 74033 28425 31667 127971 38011
lib25519+s2n+exp 26759 95144 73685 27720 30967 127160 37956
lib25519+s2n 27820 112841 74279 28529 31682 129086 38009
s2n-bignum 26478 93099
ARM Neoverse N1 (2019) OpenSSL 99997 392328 103377 99389 328870
lib25519 50101 115215 115058 51010 55528 244068 72660
lib25519+exp 50219 115190 115062 51170 55601 244691 72905
lib25519+s2n+exp 49968 111647 111537 50974 55481 242377 73082
lib25519+s2n 50130 111624 111534 50982 55603 241601 72922
s2n-bignum 53028 111822
ARM Cortex-A76 (2018) OpenSSL 98208 392220 100316 98058 328523
lib25519 49290 115105 115061 50211 54872 242570 72591
lib25519+exp 49221 115111 115050 50182 54746 245004 72870
lib25519+s2n+exp 49223 111516 111522 50131 54766 242067 72938
lib25519+s2n 49165 111529 111522 50259 54687 243189 72746
s2n-bignum 49949 111541
Intel Goldmont Plus (2017) OpenSSL 216237 252134 222984 214318 711629
lib25519 84907 267290 265772 87040 95621 315405 88459
lib25519+exp 84047 267123 267303 86232 94734 314777 88729
lib25519+s2n+exp 68275 245750 245746 70395 78853 298975 87383
lib25519+s2n 69205 245752 245760 71299 79804 298539 87279
s2n-bignum 69563 245712
ARM Cortex-A72 (2016) OpenSSL 138448 423947 145529 129518 398640
lib25519 60844 129860 129863 62310 68159 288050 87706
lib25519+exp 60788 129858 129872 62275 68103 286528 88048
lib25519+s2n+exp 58798 128022 128019 60297 66010 284735 88262
lib25519+s2n 58670 128021 128013 60174 65913 282192 87552
s2n-bignum 60466 136537
Intel Skylake (2015) OpenSSL 123177 118572 125842 120298 392874
lib25519 33440 88172 62840 34288 37708 116074 37912
lib25519+exp 31381 83219 62875 32131 35645 103958 33935
lib25519+s2n+exp 31427 82614 62531 32282 35716 105701 33653
lib25519+s2n 33451 89870 62812 34328 37793 116623 37975
s2n-bignum 32049 83749
Intel Airmont (2015) OpenSSL 279700 618989 292772 277593 853353
lib25519 143379 449706 449742 147171 162917 539417 155486
lib25519+exp 143392 449634 449710 147073 162557 542105 155918
lib25519+s2n+exp 114744 421146 421219 118791 133576 503872 153471
lib25519+s2n 114866 421207 421231 118408 134106 512588 153505
s2n-bignum 115717 432248
Intel Broadwell (2014) OpenSSL 119594 121170 122805 119864 389886
lib25519 31437 93464 72452 32323 35905 122790 39757
lib25519+exp 28935 84915 74513 29754 33537 107474 33817
lib25519+s2n+exp 28994 84789 72117 29740 33541 106800 34289
lib25519+s2n 31479 93366 72458 32244 36909 121430 39834
s2n-bignum 30752 87489
Intel Haswell (2013) OpenSSL 125107 163247 128058 125087 407784
lib25519 45541 118265 76486 46374 50255 150229 50290
lib25519+exp 43488 115141 76684 44240 48268 152291 49855
lib25519+s2n+exp 43325 118224 76022 44084 47646 150462 50317
lib25519+s2n 44780 119746 76395 45812 49606 152249 50732
s2n-bignum 47493 154648
ARM Cortex-A53 (2012) OpenSSL 207910 508113 215419 198326 550366
lib25519 76118 141986 142046 77677 86313 313318 90121
lib25519+exp 75696 142140 142085 77510 86592 321606 90248
lib25519+s2n+exp 70959 137691 137752 72956 81821 318447 90308
lib25519+s2n 71063 137686 137765 73198 81939 315368 90476
s2n-bignum 111524 162789
Intel Core 2 (2006) OpenSSL 244742 340071 251269 238104 723314
lib25519 99033 321976 320969 101551 109521 369918 106251
lib25519+exp 99172 316731 316774 101260 109474 370317 105846
lib25519+s2n+exp 77185 262935 263006 79237 87534 348480 105398
lib25519+s2n 77151 262935 263009 79189 87219 349249 105126
s2n-bignum 71164 262728

Microarchitectures are listed in reverse chronological order of when they were introduced. Each library is assigned one foreground color in the table.

In the lib25519 distribution, command/lib25519-speed.c measures lib25519; benchmarks/*-* is the output of lib25519-speed on various machines; speedcomparison/openssl/* has code to measure OpenSSL, and measurements from various machines; speedcomparison/s2n/* has code to measure s2n-bignum, and measurements from various machines; and autogen/md-speed extracts the table from those measurements. OpenSSL benchmarks use version 4.0.1 (2026.06.09); s2n-bignum benchmarks use commit fce78c7c17baee6a60511efe821930d4d049a6c0 (2026.06.12).

The table reports only interquartile means of cycle counts, not the full distribution of cycle counts. See the full output files for differences between multiple measurements and the interquartile mean. The table reports the following major operations:


Version: This is version 2026.06.14 of the "Speed" web page.