Files
@ 0957647049ef
Branch filter:
Location: Shamira/performance.md - annotation
0957647049ef
1.2 KiB
text/markdown
merged FFT
8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 8cbbc92dd17c 05b690297fb5 05b690297fb5 05b690297fb5 05b690297fb5 05b690297fb5 05b690297fb5 05b690297fb5 05b690297fb5 05b690297fb5 05b690297fb5 05b690297fb5 05b690297fb5 8cbbc92dd17c | # Performance comparison #
## The base case ##
Let's assume we have a secret of length _m_. The splitting takes _n_ evaluations of a polynomial of order _k_ (over Galois field 256) for each byte, leading to _O(n\*k\*m)_ finite field multiplications. Reconstruction of the constant parameters during joining first precomputes parts of the Lagrange polynomial and then reuses them for each byte, taking _O(k\*k + k\*m)_ multiplications.
Benchmark results. The times for split and join mean _seconds per byte_ of the secret length:
<table>
<tr>
<th>Revision</th>
<th>Features</th>
<th>k / n parameters</th>
<th>Split</th>
<th>Join</th>
</tr>
<tr>
<td rowspan="2">a47ae3e113cc</td>
<td rowspan="2">-</td>
<td>2 / 3</td>
<td>5.02e-06</td>
<td>4.12e-05</td>
</tr>
<tr>
<td>254 / 254</td>
<td>0.0125</td>
<td>0.00175</td>
</tr>
<tr>
<td rowspan="2">c6815615a077</td>
<td rowspan="2">gfmul() caching</td>
<td>2 / 3</td>
<td>5.38e-06</td>
<td>4.28e-05</td>
</tr>
<tr>
<td>254 / 254</td>
<td>0.00741</td>
<td>0.00156</td>
</tr>
</table>
|