-r--r--r-- 54600 lib25519-20240928/doc/html/speed.html raw
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type="text/css"> html{overflow-y:scroll} body{font-family:"Noto Sans","Droid Sans","DejaVu Sans","Arial",sans-serif;line-height:1.5} tt,code{background-color:#f0f0f0;font-family:"Noto Sans Mono","Droid Sans Mono","DejaVu Sans Mono","Courier New",monospace,sans-serif;font-size:1em;} pre{margin-left:3em} p,ul,ol,blockquote,pre{font-size:1.0em;line-height:1.6} li p{font-size:1.0em} blockquote p{font-size:1.0em} h1{font-size:1.5em} h2{font-size:1.3em} h3{font-size:1.0em} h1 a{text-decoration:none} table{border-collapse:collapse} th,td{border:1px solid black} table a{text-decoration:none} table tr{font-size:1.0em;line-height:1.5} tbody tr:nth-child(12n+1){background-color:#f0ffff} tbody tr:nth-child(12n+2){background-color:#f0ffff} tbody tr:nth-child(12n+3){background-color:#f0ffff} tbody tr:nth-child(12n+4){background-color:#f0ffff} tbody tr:nth-child(12n+5){background-color:#f0ffff} tbody tr:nth-child(12n+6){background-color:#f0ffff} tbody tr:nth-child(12n+7){background-color:#fffff0} tbody tr:nth-child(12n+8){background-color:#fffff0} tbody tr:nth-child(12n+9){background-color:#fffff0} tbody tr:nth-child(12n+10){background-color:#fffff0} tbody tr:nth-child(12n+11){background-color:#fffff0} tbody tr:nth-child(12n+12){background-color:#fffff0} .links a:hover{text-decoration:underline} .links a:active{text-decoration:underline} .links img{width:200px;padding-left:1em} .links td{border:0px;padding-top:0.5em;padding-bottom:0.5em} .openssl{color:#004040} .s2n{color:#400040} .lib25519{color:#c25519} .headline{padding:0;font-weight:bold;font-size:1.5em;vertical-align:top;padding-bottom:0.5em;color:#c25519} .navt{display:inline-block;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box; min-width:16%;margin:0;padding:0;padding-left:0.5em;padding-right:0.5em;vertical-align:center; font-weight:bold;font-size:1.1em;text-align:center;border:1px solid black} .here{border-bottom:0px;background-color:#ffffff} .away{background-color:#c25519;} .away a{text-decoration:none;display:block;color:#ffffff} .away a:hover,.away a:active{text-decoration:underline} .main{margin:0;padding-top:0em;padding-bottom:1%;clear:both} </style> <title> lib25519: Speed</title> </head> <body> <div class=headline> lib25519</div> <div class=nav> <div class="navt away"><a href=index.html>Intro</a> </div><div class="navt away"><a href=download.html>Download</a> </div><div class="navt away"><a href=install.html>Install</a> </div><div class="navt away"><a href=test.html>Test</a> </div><div class="navt away"><a href=x25519-cli.html>X CLI</a> </div><div class="navt away"><a href=ed25519-cli.html>Ed CLI</a> </div><div class="navt away"><a href=api.html>API</a> </div><div class="navt away"><a href=security.html>Security</a> </div><div class="navt here">Speed </div><div class="navt away"><a href=internals.html>Internals</a> </div><div class="navt away"><a href=people.html>People</a> </div><div class="navt away"><a href=license.html>License</a> </div></div> <div class=main> <p>In the following speed table, smaller numbers are better. The numbers are median single-core cycle counts on various microarchitectures. Overclocking is disabled.</p> <p>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 <code>./use-s2n-bignum</code> step (which is a supported option for lib25519); a lib25519+exp line showing separate measurements of lib25519 after an experimental pre-configuration <code>mv skipcompilers/* compilers</code> step (which is not supported because it uses instructions not supported by <code>valgrind</code>); and a lib25519+s2n+exp line.</p> <table> <thead> <tr> <th style="text-align: left;">μarch</th> <th style="text-align: left;">software</th> <th style="text-align: right;">X key</th> <th style="text-align: right;">X dh</th> <th style="text-align: right;">X batch</th> <th style="text-align: right;">Ed key</th> <th style="text-align: right;">Ed sign</th> <th style="text-align: right;">Ed verif</th> <th style="text-align: right;">Ed MSM</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">Golden Cove (2021)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>99570</span></td> <td style="text-align: right;"><span class=openssl>103325</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>101362</span></td> <td style="text-align: right;"><span class=openssl>96222</span></td> <td style="text-align: right;"><span class=openssl>320673</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>23782</span></td> <td style="text-align: right;"><span class=lib25519>68511</span></td> <td style="text-align: right;"><span class=lib25519>51744</span></td> <td style="text-align: right;"><span class=lib25519>24757</span></td> <td style="text-align: right;"><span class=lib25519>28039</span></td> <td style="text-align: right;"><span class=lib25519>96607</span></td> <td style="text-align: right;"><span class=lib25519>30088</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>25266</span></td> <td style="text-align: right;"><span class=lib25519>68304</span></td> <td style="text-align: right;"><span class=lib25519>49799</span></td> <td style="text-align: right;"><span class=lib25519>24745</span></td> <td style="text-align: right;"><span class=lib25519>28676</span></td> <td style="text-align: right;"><span class=lib25519>93508</span></td> <td style="text-align: right;"><span class=lib25519>30620</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>24740</span></td> <td style="text-align: right;"><span class=lib25519>67850</span></td> <td style="text-align: right;"><span class=lib25519>49945</span></td> <td style="text-align: right;"><span class=lib25519>24800</span></td> <td style="text-align: right;"><span class=lib25519>28794</span></td> <td style="text-align: right;"><span class=lib25519>95780</span></td> <td style="text-align: right;"><span class=lib25519>30223</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>24290</span></td> <td style="text-align: right;"><span class=lib25519>68063</span></td> <td style="text-align: right;"><span class=lib25519>51735</span></td> <td style="text-align: right;"><span class=lib25519>25286</span></td> <td style="text-align: right;"><span class=lib25519>28948</span></td> <td style="text-align: right;"><span class=lib25519>94614</span></td> <td style="text-align: right;"><span class=lib25519>30367</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>24257</span></td> <td style="text-align: right;"><span class=s2n>75395</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Zen 3 (2020)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>116119</span></td> <td style="text-align: right;"><span class=openssl>112550</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>118697</span></td> <td style="text-align: right;"><span class=openssl>111383</span></td> <td style="text-align: right;"><span class=openssl>371930</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>28212</span></td> <td style="text-align: right;"><span class=lib25519>96632</span></td> <td style="text-align: right;"><span class=lib25519>71142</span></td> <td style="text-align: right;"><span class=lib25519>29031</span></td> <td style="text-align: right;"><span class=lib25519>32497</span></td> <td style="text-align: right;"><span class=lib25519>128179</span></td> <td style="text-align: right;"><span class=lib25519>40784</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>25626</span></td> <td style="text-align: right;"><span class=lib25519>73060</span></td> <td style="text-align: right;"><span class=lib25519>47915</span></td> <td style="text-align: right;"><span class=lib25519>26407</span></td> <td style="text-align: right;"><span class=lib25519>29771</span></td> <td style="text-align: right;"><span class=lib25519>113420</span></td> <td style="text-align: right;"><span class=lib25519>35826</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>25718</span></td> <td style="text-align: right;"><span class=lib25519>73005</span></td> <td style="text-align: right;"><span class=lib25519>48216</span></td> <td style="text-align: right;"><span class=lib25519>26376</span></td> <td style="text-align: right;"><span class=lib25519>29771</span></td> <td style="text-align: right;"><span class=lib25519>112841</span></td> <td style="text-align: right;"><span class=lib25519>35657</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>28378</span></td> <td style="text-align: right;"><span class=lib25519>96214</span></td> <td style="text-align: right;"><span class=lib25519>50510</span></td> <td style="text-align: right;"><span class=lib25519>29241</span></td> <td style="text-align: right;"><span class=lib25519>32596</span></td> <td style="text-align: right;"><span class=lib25519>129089</span></td> <td style="text-align: right;"><span class=lib25519>40643</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>26238</span></td> <td style="text-align: right;"><span class=s2n>89699</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Tiger Lake (2020)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>113314</span></td> <td style="text-align: right;"><span class=openssl>119132</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>116048</span></td> <td style="text-align: right;"><span class=openssl>111383</span></td> <td style="text-align: right;"><span class=openssl>369181</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>28303</span></td> <td style="text-align: right;"><span class=lib25519>86103</span></td> <td style="text-align: right;"><span class=lib25519>61087</span></td> <td style="text-align: right;"><span class=lib25519>29193</span></td> <td style="text-align: right;"><span class=lib25519>32873</span></td> <td style="text-align: right;"><span class=lib25519>114671</span></td> <td style="text-align: right;"><span class=lib25519>35021</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>26534</span></td> <td style="text-align: right;"><span class=lib25519>64591</span></td> <td style="text-align: right;"><span class=lib25519>21647</span></td> <td style="text-align: right;"><span class=lib25519>27423</span></td> <td style="text-align: right;"><span class=lib25519>31078</span></td> <td style="text-align: right;"><span class=lib25519>107330</span></td> <td style="text-align: right;"><span class=lib25519>32849</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>26582</span></td> <td style="text-align: right;"><span class=lib25519>64634</span></td> <td style="text-align: right;"><span class=lib25519>21657</span></td> <td style="text-align: right;"><span class=lib25519>27419</span></td> <td style="text-align: right;"><span class=lib25519>31072</span></td> <td style="text-align: right;"><span class=lib25519>107951</span></td> <td style="text-align: right;"><span class=lib25519>32682</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>28499</span></td> <td style="text-align: right;"><span class=lib25519>86021</span></td> <td style="text-align: right;"><span class=lib25519>62111</span></td> <td style="text-align: right;"><span class=lib25519>29107</span></td> <td style="text-align: right;"><span class=lib25519>32774</span></td> <td style="text-align: right;"><span class=lib25519>111938</span></td> <td style="text-align: right;"><span class=lib25519>35388</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>26474</span></td> <td style="text-align: right;"><span class=s2n>83168</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Zen 2 (2019)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>127047</span></td> <td style="text-align: right;"><span class=openssl>118791</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>129676</span></td> <td style="text-align: right;"><span class=openssl>121302</span></td> <td style="text-align: right;"><span class=openssl>395245</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>27664</span></td> <td style="text-align: right;"><span class=lib25519>109306</span></td> <td style="text-align: right;"><span class=lib25519>74116</span></td> <td style="text-align: right;"><span class=lib25519>28683</span></td> <td style="text-align: right;"><span class=lib25519>31853</span></td> <td style="text-align: right;"><span class=lib25519>128656</span></td> <td style="text-align: right;"><span class=lib25519>38028</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>27645</span></td> <td style="text-align: right;"><span class=lib25519>101031</span></td> <td style="text-align: right;"><span class=lib25519>73809</span></td> <td style="text-align: right;"><span class=lib25519>28456</span></td> <td style="text-align: right;"><span class=lib25519>31584</span></td> <td style="text-align: right;"><span class=lib25519>129403</span></td> <td style="text-align: right;"><span class=lib25519>37934</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>27592</span></td> <td style="text-align: right;"><span class=lib25519>93340</span></td> <td style="text-align: right;"><span class=lib25519>73833</span></td> <td style="text-align: right;"><span class=lib25519>28334</span></td> <td style="text-align: right;"><span class=lib25519>31676</span></td> <td style="text-align: right;"><span class=lib25519>127228</span></td> <td style="text-align: right;"><span class=lib25519>38191</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>27624</span></td> <td style="text-align: right;"><span class=lib25519>109307</span></td> <td style="text-align: right;"><span class=lib25519>74457</span></td> <td style="text-align: right;"><span class=lib25519>28410</span></td> <td style="text-align: right;"><span class=lib25519>31608</span></td> <td style="text-align: right;"><span class=lib25519>128845</span></td> <td style="text-align: right;"><span class=lib25519>38363</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>27058</span></td> <td style="text-align: right;"><span class=s2n>92075</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Ares (2019)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>124704</span></td> <td style="text-align: right;"><span class=openssl>469056</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>210912</span></td> <td style="text-align: right;"><span class=openssl>181248</span></td> <td style="text-align: right;"><span class=openssl>630432</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>80550</span></td> <td style="text-align: right;"><span class=lib25519>246336</span></td> <td style="text-align: right;"><span class=lib25519>248292</span></td> <td style="text-align: right;"><span class=lib25519>81600</span></td> <td style="text-align: right;"><span class=lib25519>85572</span></td> <td style="text-align: right;"><span class=lib25519>285540</span></td> <td style="text-align: right;"><span class=lib25519>82479</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>80526</span></td> <td style="text-align: right;"><span class=lib25519>245454</span></td> <td style="text-align: right;"><span class=lib25519>272732</span></td> <td style="text-align: right;"><span class=lib25519>81456</span></td> <td style="text-align: right;"><span class=lib25519>85506</span></td> <td style="text-align: right;"><span class=lib25519>280002</span></td> <td style="text-align: right;"><span class=lib25519>81794</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>80418</span></td> <td style="text-align: right;"><span class=lib25519>95616</span></td> <td style="text-align: right;"><span class=lib25519>95627</span></td> <td style="text-align: right;"><span class=lib25519>81432</span></td> <td style="text-align: right;"><span class=lib25519>85956</span></td> <td style="text-align: right;"><span class=lib25519>281484</span></td> <td style="text-align: right;"><span class=lib25519>82900</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>80688</span></td> <td style="text-align: right;"><span class=lib25519>95616</span></td> <td style="text-align: right;"><span class=lib25519>95670</span></td> <td style="text-align: right;"><span class=lib25519>81240</span></td> <td style="text-align: right;"><span class=lib25519>85902</span></td> <td style="text-align: right;"><span class=lib25519>282276</span></td> <td style="text-align: right;"><span class=lib25519>82598</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>115392</span></td> <td style="text-align: right;"><span class=s2n>254976</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Goldmont (2016)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>247078</span></td> <td style="text-align: right;"><span class=openssl>273628</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>258924</span></td> <td style="text-align: right;"><span class=openssl>228182</span></td> <td style="text-align: right;"><span class=openssl>753852</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>93747</span></td> <td style="text-align: right;"><span class=lib25519>281776</span></td> <td style="text-align: right;"><span class=lib25519>295259</span></td> <td style="text-align: right;"><span class=lib25519>96235</span></td> <td style="text-align: right;"><span class=lib25519>106167</span></td> <td style="text-align: right;"><span class=lib25519>338370</span></td> <td style="text-align: right;"><span class=lib25519>96798</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>93640</span></td> <td style="text-align: right;"><span class=lib25519>282472</span></td> <td style="text-align: right;"><span class=lib25519>282975</span></td> <td style="text-align: right;"><span class=lib25519>96694</span></td> <td style="text-align: right;"><span class=lib25519>106438</span></td> <td style="text-align: right;"><span class=lib25519>347507</span></td> <td style="text-align: right;"><span class=lib25519>97205</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>93581</span></td> <td style="text-align: right;"><span class=lib25519>255341</span></td> <td style="text-align: right;"><span class=lib25519>258170</span></td> <td style="text-align: right;"><span class=lib25519>96235</span></td> <td style="text-align: right;"><span class=lib25519>106085</span></td> <td style="text-align: right;"><span class=lib25519>343949</span></td> <td style="text-align: right;"><span class=lib25519>97197</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>93623</span></td> <td style="text-align: right;"><span class=lib25519>255308</span></td> <td style="text-align: right;"><span class=lib25519>257031</span></td> <td style="text-align: right;"><span class=lib25519>96114</span></td> <td style="text-align: right;"><span class=lib25519>106224</span></td> <td style="text-align: right;"><span class=lib25519>341928</span></td> <td style="text-align: right;"><span class=lib25519>96369</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>77436</span></td> <td style="text-align: right;"><span class=s2n>255312</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Cortex-A72 (2016)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>156925</span></td> <td style="text-align: right;"><span class=openssl>424557</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>163459</span></td> <td style="text-align: right;"><span class=openssl>134998</span></td> <td style="text-align: right;"><span class=openssl>425152</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>106344</span></td> <td style="text-align: right;"><span class=lib25519>330111</span></td> <td style="text-align: right;"><span class=lib25519>330312</span></td> <td style="text-align: right;"><span class=lib25519>107879</span></td> <td style="text-align: right;"><span class=lib25519>114955</span></td> <td style="text-align: right;"><span class=lib25519>389349</span></td> <td style="text-align: right;"><span class=lib25519>116928</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>106307</span></td> <td style="text-align: right;"><span class=lib25519>329851</span></td> <td style="text-align: right;"><span class=lib25519>330943</span></td> <td style="text-align: right;"><span class=lib25519>107802</span></td> <td style="text-align: right;"><span class=lib25519>114915</span></td> <td style="text-align: right;"><span class=lib25519>384273</span></td> <td style="text-align: right;"><span class=lib25519>116616</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>107041</span></td> <td style="text-align: right;"><span class=lib25519>136513</span></td> <td style="text-align: right;"><span class=lib25519>136610</span></td> <td style="text-align: right;"><span class=lib25519>108536</span></td> <td style="text-align: right;"><span class=lib25519>115674</span></td> <td style="text-align: right;"><span class=lib25519>389278</span></td> <td style="text-align: right;"><span class=lib25519>116234</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>107376</span></td> <td style="text-align: right;"><span class=lib25519>136513</span></td> <td style="text-align: right;"><span class=lib25519>136653</span></td> <td style="text-align: right;"><span class=lib25519>108857</span></td> <td style="text-align: right;"><span class=lib25519>116103</span></td> <td style="text-align: right;"><span class=lib25519>389088</span></td> <td style="text-align: right;"><span class=lib25519>117090</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>67271</span></td> <td style="text-align: right;"><span class=s2n>136516</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Skylake (2015)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>130113</span></td> <td style="text-align: right;"><span class=openssl>118411</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>133656</span></td> <td style="text-align: right;"><span class=openssl>125076</span></td> <td style="text-align: right;"><span class=openssl>410342</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>29774</span></td> <td style="text-align: right;"><span class=lib25519>87971</span></td> <td style="text-align: right;"><span class=lib25519>62755</span></td> <td style="text-align: right;"><span class=lib25519>30550</span></td> <td style="text-align: right;"><span class=lib25519>34193</span></td> <td style="text-align: right;"><span class=lib25519>116991</span></td> <td style="text-align: right;"><span class=lib25519>38727</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>27729</span></td> <td style="text-align: right;"><span class=lib25519>83396</span></td> <td style="text-align: right;"><span class=lib25519>62311</span></td> <td style="text-align: right;"><span class=lib25519>28469</span></td> <td style="text-align: right;"><span class=lib25519>32212</span></td> <td style="text-align: right;"><span class=lib25519>104229</span></td> <td style="text-align: right;"><span class=lib25519>34226</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>27835</span></td> <td style="text-align: right;"><span class=lib25519>83311</span></td> <td style="text-align: right;"><span class=lib25519>62409</span></td> <td style="text-align: right;"><span class=lib25519>28581</span></td> <td style="text-align: right;"><span class=lib25519>32040</span></td> <td style="text-align: right;"><span class=lib25519>105749</span></td> <td style="text-align: right;"><span class=lib25519>33645</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>29692</span></td> <td style="text-align: right;"><span class=lib25519>88037</span></td> <td style="text-align: right;"><span class=lib25519>62758</span></td> <td style="text-align: right;"><span class=lib25519>30465</span></td> <td style="text-align: right;"><span class=lib25519>34140</span></td> <td style="text-align: right;"><span class=lib25519>115452</span></td> <td style="text-align: right;"><span class=lib25519>38353</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>28806</span></td> <td style="text-align: right;"><span class=s2n>84561</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Airmont (2015)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>294239</span></td> <td style="text-align: right;"><span class=openssl>619002</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>307282</span></td> <td style="text-align: right;"><span class=openssl>276812</span></td> <td style="text-align: right;"><span class=openssl>853664</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>143556</span></td> <td style="text-align: right;"><span class=lib25519>449573</span></td> <td style="text-align: right;"><span class=lib25519>449669</span></td> <td style="text-align: right;"><span class=lib25519>147077</span></td> <td style="text-align: right;"><span class=lib25519>162570</span></td> <td style="text-align: right;"><span class=lib25519>542220</span></td> <td style="text-align: right;"><span class=lib25519>155193</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>143690</span></td> <td style="text-align: right;"><span class=lib25519>449577</span></td> <td style="text-align: right;"><span class=lib25519>449759</span></td> <td style="text-align: right;"><span class=lib25519>147559</span></td> <td style="text-align: right;"><span class=lib25519>163466</span></td> <td style="text-align: right;"><span class=lib25519>543578</span></td> <td style="text-align: right;"><span class=lib25519>157011</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>143577</span></td> <td style="text-align: right;"><span class=lib25519>431947</span></td> <td style="text-align: right;"><span class=lib25519>432389</span></td> <td style="text-align: right;"><span class=lib25519>147515</span></td> <td style="text-align: right;"><span class=lib25519>163011</span></td> <td style="text-align: right;"><span class=lib25519>535507</span></td> <td style="text-align: right;"><span class=lib25519>154742</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>143574</span></td> <td style="text-align: right;"><span class=lib25519>432101</span></td> <td style="text-align: right;"><span class=lib25519>432428</span></td> <td style="text-align: right;"><span class=lib25519>147600</span></td> <td style="text-align: right;"><span class=lib25519>163312</span></td> <td style="text-align: right;"><span class=lib25519>548012</span></td> <td style="text-align: right;"><span class=lib25519>154217</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>116864</span></td> <td style="text-align: right;"><span class=s2n>432414</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Broadwell (2014)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>160005</span></td> <td style="text-align: right;"><span class=openssl>121255</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>164427</span></td> <td style="text-align: right;"><span class=openssl>120150</span></td> <td style="text-align: right;"><span class=openssl>392515</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>31489</span></td> <td style="text-align: right;"><span class=lib25519>93339</span></td> <td style="text-align: right;"><span class=lib25519>75648</span></td> <td style="text-align: right;"><span class=lib25519>33817</span></td> <td style="text-align: right;"><span class=lib25519>36660</span></td> <td style="text-align: right;"><span class=lib25519>121583</span></td> <td style="text-align: right;"><span class=lib25519>41126</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>29045</span></td> <td style="text-align: right;"><span class=lib25519>84991</span></td> <td style="text-align: right;"><span class=lib25519>73245</span></td> <td style="text-align: right;"><span class=lib25519>29855</span></td> <td style="text-align: right;"><span class=lib25519>33706</span></td> <td style="text-align: right;"><span class=lib25519>107476</span></td> <td style="text-align: right;"><span class=lib25519>34567</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>28952</span></td> <td style="text-align: right;"><span class=lib25519>84915</span></td> <td style="text-align: right;"><span class=lib25519>72056</span></td> <td style="text-align: right;"><span class=lib25519>29741</span></td> <td style="text-align: right;"><span class=lib25519>34362</span></td> <td style="text-align: right;"><span class=lib25519>107526</span></td> <td style="text-align: right;"><span class=lib25519>33849</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>31826</span></td> <td style="text-align: right;"><span class=lib25519>95068</span></td> <td style="text-align: right;"><span class=lib25519>74803</span></td> <td style="text-align: right;"><span class=lib25519>32255</span></td> <td style="text-align: right;"><span class=lib25519>35937</span></td> <td style="text-align: right;"><span class=lib25519>126280</span></td> <td style="text-align: right;"><span class=lib25519>40088</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>31396</span></td> <td style="text-align: right;"><span class=s2n>87934</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Haswell (2013)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>129719</span></td> <td style="text-align: right;"><span class=openssl>163429</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>133869</span></td> <td style="text-align: right;"><span class=openssl>126120</span></td> <td style="text-align: right;"><span class=openssl>409113</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>43627</span></td> <td style="text-align: right;"><span class=lib25519>118326</span></td> <td style="text-align: right;"><span class=lib25519>78662</span></td> <td style="text-align: right;"><span class=lib25519>44597</span></td> <td style="text-align: right;"><span class=lib25519>48406</span></td> <td style="text-align: right;"><span class=lib25519>153211</span></td> <td style="text-align: right;"><span class=lib25519>49929</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>41369</span></td> <td style="text-align: right;"><span class=lib25519>115219</span></td> <td style="text-align: right;"><span class=lib25519>77087</span></td> <td style="text-align: right;"><span class=lib25519>42490</span></td> <td style="text-align: right;"><span class=lib25519>46522</span></td> <td style="text-align: right;"><span class=lib25519>153486</span></td> <td style="text-align: right;"><span class=lib25519>51755</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>41567</span></td> <td style="text-align: right;"><span class=lib25519>115115</span></td> <td style="text-align: right;"><span class=lib25519>76679</span></td> <td style="text-align: right;"><span class=lib25519>42414</span></td> <td style="text-align: right;"><span class=lib25519>46467</span></td> <td style="text-align: right;"><span class=lib25519>150762</span></td> <td style="text-align: right;"><span class=lib25519>51108</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>43637</span></td> <td style="text-align: right;"><span class=lib25519>118327</span></td> <td style="text-align: right;"><span class=lib25519>78579</span></td> <td style="text-align: right;"><span class=lib25519>44500</span></td> <td style="text-align: right;"><span class=lib25519>48368</span></td> <td style="text-align: right;"><span class=lib25519>151548</span></td> <td style="text-align: right;"><span class=lib25519>50688</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>45860</span></td> <td style="text-align: right;"><span class=s2n>160318</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Cortex-A53 (2012)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>220649</span></td> <td style="text-align: right;"><span class=openssl>513705</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>228344</span></td> <td style="text-align: right;"><span class=openssl>194443</span></td> <td style="text-align: right;"><span class=openssl>537285</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>149030</span></td> <td style="text-align: right;"><span class=lib25519>463869</span></td> <td style="text-align: right;"><span class=lib25519>464098</span></td> <td style="text-align: right;"><span class=lib25519>151808</span></td> <td style="text-align: right;"><span class=lib25519>160892</span></td> <td style="text-align: right;"><span class=lib25519>520120</span></td> <td style="text-align: right;"><span class=lib25519>154072</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>149449</span></td> <td style="text-align: right;"><span class=lib25519>464134</span></td> <td style="text-align: right;"><span class=lib25519>464208</span></td> <td style="text-align: right;"><span class=lib25519>152091</span></td> <td style="text-align: right;"><span class=lib25519>161586</span></td> <td style="text-align: right;"><span class=lib25519>517634</span></td> <td style="text-align: right;"><span class=lib25519>153442</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>149814</span></td> <td style="text-align: right;"><span class=lib25519>163680</span></td> <td style="text-align: right;"><span class=lib25519>164640</span></td> <td style="text-align: right;"><span class=lib25519>151726</span></td> <td style="text-align: right;"><span class=lib25519>160924</span></td> <td style="text-align: right;"><span class=lib25519>523501</span></td> <td style="text-align: right;"><span class=lib25519>154787</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>149992</span></td> <td style="text-align: right;"><span class=lib25519>163661</span></td> <td style="text-align: right;"><span class=lib25519>164625</span></td> <td style="text-align: right;"><span class=lib25519>151849</span></td> <td style="text-align: right;"><span class=lib25519>160395</span></td> <td style="text-align: right;"><span class=lib25519>514915</span></td> <td style="text-align: right;"><span class=lib25519>154407</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>120158</span></td> <td style="text-align: right;"><span class=s2n>163155</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;">Core 2 (2006)</td> <td style="text-align: left;"><span class=openssl>OpenSSL</span></td> <td style="text-align: right;"><span class=openssl>260681</span></td> <td style="text-align: right;"><span class=openssl>337177</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"><span class=openssl>267882</span></td> <td style="text-align: right;"><span class=openssl>241408</span></td> <td style="text-align: right;"><span class=openssl>741945</span></td> <td style="text-align: right;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519</span></td> <td style="text-align: right;"><span class=lib25519>93212</span></td> <td style="text-align: right;"><span class=lib25519>298639</span></td> <td style="text-align: right;"><span class=lib25519>304039</span></td> <td style="text-align: right;"><span class=lib25519>96710</span></td> <td style="text-align: right;"><span class=lib25519>106278</span></td> <td style="text-align: right;"><span class=lib25519>354754</span></td> <td style="text-align: right;"><span class=lib25519>102007</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+exp</span></td> <td style="text-align: right;"><span class=lib25519>93670</span></td> <td style="text-align: right;"><span class=lib25519>298781</span></td> <td style="text-align: right;"><span class=lib25519>299398</span></td> <td style="text-align: right;"><span class=lib25519>97202</span></td> <td style="text-align: right;"><span class=lib25519>106574</span></td> <td style="text-align: right;"><span class=lib25519>355622</span></td> <td style="text-align: right;"><span class=lib25519>102093</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n+exp</span></td> <td style="text-align: right;"><span class=lib25519>93628</span></td> <td style="text-align: right;"><span class=lib25519>262775</span></td> <td style="text-align: right;"><span class=lib25519>262519</span></td> <td style="text-align: right;"><span class=lib25519>96884</span></td> <td style="text-align: right;"><span class=lib25519>106284</span></td> <td style="text-align: right;"><span class=lib25519>354495</span></td> <td style="text-align: right;"><span class=lib25519>102237</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=lib25519>lib25519+s2n</span></td> <td style="text-align: right;"><span class=lib25519>93270</span></td> <td style="text-align: right;"><span class=lib25519>262946</span></td> <td style="text-align: right;"><span class=lib25519>262832</span></td> <td style="text-align: right;"><span class=lib25519>96706</span></td> <td style="text-align: right;"><span class=lib25519>106564</span></td> <td style="text-align: right;"><span class=lib25519>349492</span></td> <td style="text-align: right;"><span class=lib25519>103118</td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;"><span class=s2n>s2n-bignum</span></td> <td style="text-align: right;"><span class=s2n>78529</span></td> <td style="text-align: right;"><span class=s2n>262932</span></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> <td style="text-align: right;"></td> </tr> </tbody> </table> <p>Microarchitectures are listed in reverse chronological order of when they were introduced. Each library is assigned one foreground color in the table.</p> <p>In the lib25519 distribution, <code>command/lib25519-speed.c</code> measures lib25519; <code>benchmarks/*-*</code> is the output of <code>lib25519-speed</code> on various machines; <code>speedcomparison/openssl/*</code> has code to measure OpenSSL, and measurements from various machines; <code>speedcomparison/s2n/*</code> has code to measure s2n-bignum, and measurements from various machines; and <code>autogen/md-speed</code> extracts the table from those measurements. OpenSSL benchmarks use version 3.3.2 (2024.09.03); s2n-bignum benchmarks use commit acbb18e6343f12a7944de72c1ec0991739600f8c (2024.03.18).</p> <p>The table reports only median cycle counts; see the full output files for differences between multiple measurements and the median. The table reports the following major operations:</p> <ul> <li> <p>"X key": Generating an X25519 public key and secret key. This is <code>dh_x25519_keypair selected 32</code> in the <code>lib25519-speed</code> output (<code>lib25519_dh_keypair</code> in the stable API).</p> <p>For s2n-bignum, this is <code>x25519-keygen</code> in the <code>s2n25519speed</code> output, measuring the cost of <code>curve25519_x25519base_byte_alt</code>, or <code>curve25519_x25519base_byte</code> on machines where that works and is faster.</p> <p>For OpenSSL, this is <code>x25519-keygen-main</code> in the <code>openssl25519speed</code> output, measuring the cost of <code>EVP_PKEY_Q_keygen(0,0,"X25519")</code>. This does not include small OpenSSL overheads for converting the public key and secret key to storage format.</p> </li> <li> <p>"X dh": Generating an X25519 shared secret. This is <code>dh_x25519 selected 32</code> in the <code>lib25519-speed</code> output (<code>lib25519_dh</code> in the stable API).</p> <p>For s2n-bignum, this is <code>x25519-dh</code> in the <code>s2n25519speed</code> output, measuring the cost of <code>curve25519_x25519_byte_alt</code>, or <code>curve25519_x25519_byte</code> on machines where that works and is faster.</p> <p>For OpenSSL, this is <code>x25519-dh-main</code> in the <code>openssl25519speed</code> output, measuring the cost of <code>EVP_PKEY_derive</code> (as in OpenSSL's speed-testing utility). This does not include the cost of <code>EVP_PKEY_new_raw_public_key</code> to decode the public key (<code>x25519-dh-pkdecode</code>, 6836 cycles on Tiger Lake), <code>EVP_PKEY_CTX_new</code> and <code>EVP_PKEY_derive_init</code> and <code>EVP_PKEY_derive_set_peer</code> for initialization (together <code>x25519-dh-init</code>, 2423 cycles on Tiger Lake), and <code>EVP_PKEY_new_raw_private_key</code> to decode the secret key if it is not decoded already (<code>x25519-dh-skdecode</code>, 112114 cycles on Tiger Lake).</p> </li> <li> <p>"X batch": Cost <em>per secret</em> of generating 16 separate shared secrets. This is <code>nPbatch_montgomery25519 selected 16</code> in the <code>lib25519-speed</code> output <em>divided by 16</em>.</p> </li> <li> <p>"Ed key": Generating an Ed25519 public key and secret key. This is <code>sign_ed25519_keypair selected 32</code> in the <code>lib25519-speed</code> output (<code>lib25519_sign_keypair</code> in the stable API).</p> <p>For OpenSSL, this is <code>ed25519-keygen-main</code> in the <code>openssl25519speed</code> output, measuring the cost of <code>EVP_PKEY_Q_keygen(0,0,"ED25519")</code>. This does not include small OpenSSL overheads for converting the public key and secret key to storage format.</p> </li> <li> <p>"Ed sign": Generating an Ed25519 signature of a 59-byte message. This is <code>sign_ed25519 selected 59</code> in the <code>lib25519-speed</code> output (<code>lib25519_sign</code> in the stable API).</p> <p>For OpenSSL, this is <code>ed25519-sign-main</code> in the <code>openssl25519speed</code> output, measuring the cost of <code>EVP_DigestSign</code> (as in OpenSSL's speed-testing utility). This does not include the cost of <code>EVP_MD_CTX_new</code> and <code>EVP_DigestSignInit</code> (<code>ed25519-sign-init</code>, 2808 cycles on Tiger Lake), and <code>EVP_PKEY_new_raw_private_key</code> to decode the secret key if it is not decoded already (<code>ed25519-sign-skdecode</code>, 114894 cycles on Tiger Lake).</p> </li> <li> <p>"Ed verif": Verifying an Ed25519 signature and recovering a 59-byte message. This is <code>sign_ed25519_open selected 59</code> in the <code>lib25519-speed</code> output (<code>lib25519_sign_open</code> in the stable API).</p> <p>For OpenSSL, this is <code>ed25519-verify-main</code> in the <code>openssl25519speed</code> output, measuring the cost of <code>EVP_DigestVerify</code> (as in OpenSSL's speed-testing utility). This does not include the cost of <code>EVP_MD_CTX_new</code> and <code>EVP_DigestVerifyInit</code> (together <code>ed25519-verify-init</code>, 2579 cycles on Tiger Lake), and <code>EVP_PKEY_new_raw_public_key</code> to decode the public key being used for verification (<code>ed25519-verify-pkdecode</code>, 7401 cycles on Tiger Lake).</p> </li> <li> <p>"Ed MSM": Cost <em>per point</em> of multi-scalar multiplication with 16 points and 16 full-size scalars. This is <code>multiscalar_ed25519 selected 16</code> in the <code>lib25519-speed</code> output <em>divided by 16</em>.</p> </li> </ul><hr><font size=1><b>Version:</b> This is version 2024.09.28 of the "Speed" web page. </font> </div> </body> </html>