-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>