Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Benchmark run Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3

Run Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3 started 2026-10-09T15:12:32Z on Intel(R) Xeon(R) W-1390P @ 3.50GHz (?, x86_64) and timed commit ef9e82d39fbf06c605e1740360370f0003dc4ca4, built by rustc 1.98.1 (48a229cea 2026-09-01) with RUSTFLAGS -C target-cpu=x86-64, in the full profile.

690 benchmarks from run Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3. Reading a run report explains the values, colours and tags.

Families compared

Each family’s nominal rho, this run’s costs (addition at throughput; hashing, preparation, encoding and decoding batched), the two regimes of Cost in repeated reconciliation for a set of items, a set difference of and a sketch of cells, in which a new item updates cells on average, and the mean time over seeds to find a curve and verify its certificate. Dominance is as defined in Measurement methodology. Additions are 95 to 100% of each rebuilt estimate.

curvesecurityper cellper new itemper party and roundcurve selectiondominated by
rhoaddencodedecodehash + preparesums retained, sums rebuilt, , available tools
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas62.8307 ns (11.43× the best)214 ns (13.42× the best)167 ns (1.02× the best)402 ns (1.25× the best)4.57 µs (2.76× the best)418 ms (10.83× the best)Rust (AGM), PARIgf2_127-lambda
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators; hashed straight to : no prepare62.8249 ns (9.24× the best)172 ns (10.81× the best)163 ns (best)322 ns (best)3.69 µs (2.23× the best)338 ms (8.76× the best)Rust (AGM), PARInone
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine; Pornin x1: hash to addend; output already an addend62.8249 ns (9.24× the best)148 ns (9.31× the best)170 ns (1.04× the best)360 ns (1.12× the best)3.73 µs (2.25× the best)338 ms (8.76× the best)Rust (AGM), PARInone
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes; Pornin x1: hash to addend; output already an addend62.8220 ns (8.17× the best)150 ns (9.40× the best)227 ns (1.39× the best)426 ns (1.33× the best)3.41 µs (2.06× the best)299 ms (7.75× the best)Rust (AGM), PARInone
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended60.3390 ns (14.49× the best)286 ns (17.91× the best)256 ns (1.57× the best)572 ns (1.78× the best)5.86 µs (3.54× the best)530 ms (13.73× the best)Rust (AGM), PARIgf2_122-w, gf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
gf2_122-lambdaincompleteλ-projective; hashed straight to : no prepare60.3307 ns (11.42× the best)234 ns (14.66× the best)256 ns (1.57× the best)485 ns (1.51× the best)4.65 µs (2.81× the best)418 ms (10.83× the best)Rust (AGM), PARIgf2_127-lambda, gf2_127-u, gf2_127-w
gf2_122-wincompleteλ-projective, w codec60.3307 ns (11.42× the best)200 ns (12.53× the best)216 ns (1.32× the best)460 ns (1.43× the best)4.62 µs (2.79× the best)418 ms (10.82× the best)Rust (AGM), PARIgf2_127-lambda, gf2_127-w
gf2_122-uunscaled (X:S:Z), w codec60.3277 ns (10.31× the best)202 ns (12.68× the best)309 ns (1.90× the best)556 ns (1.73× the best)4.32 µs (2.61× the best)378 ms (9.78× the best)Rust (AGM), PARIgf2_127-lambda, gf2_127-u, gf2_127-w
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended59.8370 ns (13.76× the best)270 ns (16.95× the best)229 ns (1.41× the best)517 ns (1.61× the best)5.54 µs (3.34× the best)503 ms (13.04× the best)Rust (AGM), PARIgf2_122-gls-w, gf2_122-w, gf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
gf2_122-gls-lambdaincompleteλ-projective; hashed straight to : no prepare59.8310 ns (11.54× the best)242 ns (15.17× the best)228 ns (1.40× the best)468 ns (1.45× the best)4.68 µs (2.82× the best)422 ms (10.93× the best)Rust (AGM), PARIgf2_122-w, gf2_127, gf2_127-lambda, gf2_127-w
gf2_122-gls-wincompleteλ-projective, w codec59.8310 ns (11.51× the best)198 ns (12.42× the best)203 ns (1.25× the best)445 ns (1.38× the best)4.65 µs (2.81× the best)421 ms (10.91× the best)Rust (AGM), PARIgf2_127-lambda, gf2_127-w
gf2_122-gls-uunscaled (X:S:Z), w codec59.8276 ns (10.25× the best)200 ns (12.55× the best)272 ns (1.67× the best)514 ns (1.60× the best)4.26 µs (2.57× the best)375 ms (9.72× the best)Rust (AGM), PARIgf2_127-lambda, gf2_127-u, gf2_127-w
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended53.8676 ns (25.13× the best)500 ns (31.33× the best)421 ns (2.58× the best)974 ns (3.03× the best)10.1 µs (6.12× the best)919 ms (23.81× the best)Rust (AGM), PARIgf2_109-w, gf2_122, gf2_122-gls, gf2_122-gls-lambda, gf2_122-gls-u, gf2_122-gls-w, gf2_122-lambda, gf2_122-u, gf2_122-w, gf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
gf2_109-lambdaincompleteλ-projective; hashed straight to : no prepare53.8545 ns (20.26× the best)371 ns (23.29× the best)424 ns (2.60× the best)834 ns (2.59× the best)8.23 µs (4.97× the best)741 ms (19.20× the best)Rust (AGM), PARIgf2_109-w, gf2_122, gf2_122-gls, gf2_122-gls-lambda, gf2_122-gls-u, gf2_122-gls-w, gf2_122-lambda, gf2_122-u, gf2_122-w, gf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
gf2_109-wincompleteλ-projective, w codec53.8541 ns (20.14× the best)343 ns (21.53× the best)400 ns (2.46× the best)807 ns (2.51× the best)8.15 µs (4.92× the best)737 ms (19.09× the best)Rust (AGM), PARIgf2_122, gf2_122-gls, gf2_122-gls-lambda, gf2_122-gls-u, gf2_122-gls-w, gf2_122-lambda, gf2_122-u, gf2_122-w, gf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
gf2_109-uunscaled (X:S:Z), w codec53.8488 ns (18.15× the best)343 ns (21.53× the best)519 ns (3.19× the best)928 ns (2.88× the best)7.55 µs (4.56× the best)664 ms (17.21× the best)Rust (AGM), PARIgf2_122, gf2_122-gls, gf2_122-gls-lambda, gf2_122-gls-u, gf2_122-gls-w, gf2_122-lambda, gf2_122-u, gf2_122-w, gf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached62.326.9 ns (best)30.1 ns (1.89× the best)576 ns (3.54× the best)1.29 µs (4.01× the best)1.66 µs (best)38.6 ms (best)PARInone
weier127short Weierstrass, projective += affine63.358.1 ns (2.16× the best)15.9 ns (best)573 ns (3.52× the best)1.23 µs (3.81× the best)2.01 µs (1.22× the best)80.8 ms (2.09× the best)PARInone
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine63.347.3 ns (1.76× the best)22.5 ns (1.41× the best)574 ns (3.52× the best)1.22 µs (3.80× the best)1.86 µs (1.13× the best)66.3 ms (1.72× the best)PARInone

bold: the best of its column; italic, dotted: tied with the best within the confidence intervals; shading: ratio to the best, pale yellow at 1× to purple at 16× or more; grey: baseline, not compared.

Machine

Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3
CPUIntel(R) Xeon(R) W-1390P @ 3.50GHz, 16 cores, 126 GiB
OS? (Linux 6.18.48, x86_64)
rustcrustc 1.98.1 (48a229cea 2026-09-01)
RUSTFLAGS-C target-cpu=x86-64
field backend featuresnone: portable multiplies
commitef9e82d39fbf06c605e1740360370f0003dc4ca4
suitescompare compare109 compare122 group riblt
profilefull
criterion arguments–warm-up-time 3 –measurement-time 5 –sample-size 100 –nresamples 100000 binary|gf2|xor|edwards.?127|weier(-jacobian)?.?127|fp127|riblt.mapping
run2026-10-09T15:12:32Z .. 2026-10-09T17:16:48Z

Load averages by phase while the run timed (Measurement methodology).

phaseseconds1-minute average, meanrunnable, meanrunnable, most
idle before251.170.000.0
compare5451.441.223.0
compare1092701.271.525.0
compare1224401.301.263.0
group25501.311.2618.0
group wide6301.521.4221.0
riblt mapping3401.371.132.0
riblt plan751.061.132.0
riblt25401.141.1618.0
idle after300.920.171.0

Group benchmark plan

Which families the group suite’s second pass timed. Its first pass timed every family’s core rows; from them and the comparison maps, bench-run chose the families whose modeled insertion at was within 50% of the cheapest (lead) and, if none of them was over a field of odd characteristic, the cheapest that was (contrast). The second pass added the batch sweep, subtraction, equality on pure cells and the hashes of IDs (The group plan).

familyrole
edwards.127lead
weier-jacobian.127lead
weier.127lead

RIBLT benchmark plan

Which RIBLT benchmarks this run generated. Before the RIBLT suite ran, bench-run chose from this run’s group and hash-to-curve results, for each family below, the hash its RIBLT benchmarks use and their scope: every sweep (full), each axis’s endpoints and middle (buffer), or one point of each benchmark (spot); and for full and buffer scope, the field whose projection hashes the family’s IDs cheapest and the one whose projection seeds mappings cheapest, under which it also encodes and peels cells keyed by IDs. The plan records what was measured, not a result; the XOR checksums and ristretto255 are timed in full regardless (The RIBLT plan).

familyhashscopeprojectionmapping projection
binary-lambda.109ti-addendspot
binary-lambda.122ti-addendspot
binary-lambda.122-glsti-addendspot
binary-lambda.127ti-addendspot
binary-u.109tispot
binary-u.122tispot
binary-u.122-glstispot
binary-u.127pornin-addendspot
binary-w.109tispot
binary-w.122tispot
binary-w.122-glstispot
binary-w.127pornin-addendspot
binary.109tispot
binary.122tispot
binary.122-glstispot
binary.127tispot
edwards.127tifullfp127fp127
weier-jacobian.127tifullfp127fp127
weier.127tibufferfp127fp127

Insertion

Modeled insertion per item into a sketch of cells: a hash, a prepare, and an addition to each of the cells the item maps to on average (: ; : ; : ; : ; : ), by compatible recipes (Reading a run report). Each total also counts, the same for every family, the salted SHA-256 map digest and the xoshiro256pp walk through the item’s indices below (riblt.mapping): 79.7 ns at , 110 ns at , 156 ns at , 197 ns at , 241 ns at . The key XOR and count of each cell are not modelled; riblt.cells measures them with the rest of the cell updates.

curveper item, onceper cellper item, into k cells
hash (batched)prepare (batched)add (throughput): : : : :
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas347 ns (1.08× the best)55.2 ns (63.32× the best)307 ns (11.43× the best)1.37 µs (1.22× the best)2.14 µs (1.38× the best)3.38 µs (2.00× the best)4.77 µs (2.57× the best)6.16 µs (3.06× the best)
gf2_127compare suitePornin x1: hash to addend; output already an addend454 ns (1.41× the best)in the hash307 ns (11.43× the best)1.42 µs (1.27× the best)2.19 µs (1.42× the best)3.43 µs (2.03× the best)4.82 µs (2.60× the best)6.21 µs (3.08× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators347 ns (1.08× the best)120 ns (137.18× the best)249 ns (9.24× the best)1.27 µs (1.13× the best)1.89 µs (1.23× the best)2.91 µs (1.72× the best)4.04 µs (2.18× the best)5.17 µs (2.57× the best)
gf2_127-lambdaincompletecompare suitehashed straight to : no prepare322 ns (best)in the hash249 ns (9.24× the best)1.12 µs (best)1.75 µs (1.13× the best)2.76 µs (1.63× the best)3.89 µs (2.10× the best)5.03 µs (2.49× the best)
gf2_127-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend365 ns (1.13× the best)in the hash249 ns (9.24× the best)1.17 µs (1.04× the best)1.79 µs (1.16× the best)2.81 µs (1.66× the best)3.94 µs (2.12× the best)5.07 µs (2.52× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine391 ns (1.21× the best)1.28 ns (1.47× the best)249 ns (9.24× the best)1.19 µs (1.06× the best)1.82 µs (1.18× the best)2.83 µs (1.67× the best)3.96 µs (2.14× the best)5.10 µs (2.53× the best)
gf2_127-wincompletecompare suitePornin x1: hash to addend; output already an addend360 ns (1.12× the best)in the hash249 ns (9.24× the best)1.16 µs (1.03× the best)1.79 µs (1.16× the best)2.80 µs (1.65× the best)3.93 µs (2.12× the best)5.07 µs (2.51× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes452 ns (1.40× the best)1.32 ns (1.52× the best)220 ns (8.17× the best)1.17 µs (1.04× the best)1.73 µs (1.12× the best)2.63 µs (1.55× the best)3.63 µs (1.96× the best)4.64 µs (2.30× the best)
gf2_127-ucompare suitePornin x1: hash to addend; output already an addend426 ns (1.33× the best)in the hash220 ns (8.17× the best)1.14 µs (1.02× the best)1.70 µs (1.10× the best)2.60 µs (1.54× the best)3.61 µs (1.95× the best)4.61 µs (2.29× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended488 ns (1.52× the best)84.3 ns (96.68× the best)390 ns (14.49× the best)1.78 µs (1.59× the best)2.74 µs (1.78× the best)4.31 µs (2.54× the best)6.06 µs (3.27× the best)7.81 µs (3.88× the best)
gf2_122compare suitePornin x1: hash to addend; output already an addend623 ns (1.94× the best)in the hash390 ns (14.49× the best)1.83 µs (1.63× the best)2.79 µs (1.81× the best)4.36 µs (2.57× the best)6.11 µs (3.29× the best)7.86 µs (3.90× the best)
gf2_122-lambdaincompleteλ-projective487 ns (1.51× the best)152 ns (173.86× the best)307 ns (11.42× the best)1.61 µs (1.43× the best)2.37 µs (1.54× the best)3.62 µs (2.14× the best)5.00 µs (2.70× the best)6.40 µs (3.17× the best)
gf2_122-lambdaincompletecompare suitehashed straight to : no prepare485 ns (1.51× the best)in the hash307 ns (11.42× the best)1.45 µs (1.30× the best)2.22 µs (1.44× the best)3.46 µs (2.04× the best)4.85 µs (2.62× the best)6.24 µs (3.10× the best)
gf2_122-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend498 ns (1.55× the best)in the hash307 ns (11.42× the best)1.47 µs (1.31× the best)2.23 µs (1.45× the best)3.48 µs (2.05× the best)4.86 µs (2.62× the best)6.26 µs (3.10× the best)
gf2_122-wincompleteλ-projective, w codec458 ns (1.42× the best)1.25 ns (1.43× the best)307 ns (11.42× the best)1.43 µs (1.27× the best)2.19 µs (1.42× the best)3.44 µs (2.03× the best)4.82 µs (2.60× the best)6.21 µs (3.08× the best)
gf2_122-wincompletecompare suitePornin x1: hash to addend; output already an addend501 ns (1.56× the best)in the hash307 ns (11.42× the best)1.47 µs (1.31× the best)2.24 µs (1.45× the best)3.48 µs (2.05× the best)4.86 µs (2.62× the best)6.26 µs (3.10× the best)
gf2_122-uunscaled (X:S:Z), w codec555 ns (1.72× the best)1.31 ns (1.51× the best)277 ns (10.31× the best)1.44 µs (1.28× the best)2.13 µs (1.38× the best)3.26 µs (1.92× the best)4.52 µs (2.44× the best)5.78 µs (2.87× the best)
gf2_122-ucompare suitePornin x1: hash to addend; output already an addend585 ns (1.82× the best)in the hash277 ns (10.31× the best)1.47 µs (1.31× the best)2.16 µs (1.40× the best)3.29 µs (1.94× the best)4.55 µs (2.45× the best)5.81 µs (2.88× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended456 ns (1.42× the best)61.2 ns (70.16× the best)370 ns (13.76× the best)1.67 µs (1.49× the best)2.59 µs (1.67× the best)4.07 µs (2.41× the best)5.74 µs (3.09× the best)7.40 µs (3.67× the best)
gf2_122-glscompare suitePornin x1: hash to addend; output already an addend599 ns (1.86× the best)in the hash370 ns (13.76× the best)1.75 µs (1.56× the best)2.67 µs (1.73× the best)4.16 µs (2.45× the best)5.82 µs (3.14× the best)7.49 µs (3.71× the best)
gf2_122-gls-lambdaincompleteλ-projective455 ns (1.42× the best)153 ns (175.74× the best)310 ns (11.54× the best)1.59 µs (1.41× the best)2.36 µs (1.53× the best)3.62 µs (2.13× the best)5.02 µs (2.71× the best)6.42 µs (3.19× the best)
gf2_122-gls-lambdaincompletecompare suitehashed straight to : no prepare468 ns (1.45× the best)in the hash310 ns (11.54× the best)1.45 µs (1.29× the best)2.22 µs (1.44× the best)3.48 µs (2.05× the best)4.87 µs (2.63× the best)6.28 µs (3.12× the best)
gf2_122-gls-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend505 ns (1.57× the best)in the hash310 ns (11.54× the best)1.48 µs (1.32× the best)2.26 µs (1.46× the best)3.51 µs (2.07× the best)4.91 µs (2.65× the best)6.32 µs (3.13× the best)
gf2_122-gls-wincompleteλ-projective, w codec444 ns (1.38× the best)1.27 ns (1.46× the best)310 ns (11.51× the best)1.42 µs (1.27× the best)2.19 µs (1.42× the best)3.45 µs (2.03× the best)4.84 µs (2.61× the best)6.25 µs (3.10× the best)
gf2_122-gls-wincompletecompare suitePornin x1: hash to addend; output already an addend509 ns (1.58× the best)in the hash310 ns (11.51× the best)1.49 µs (1.32× the best)2.26 µs (1.46× the best)3.51 µs (2.07× the best)4.91 µs (2.65× the best)6.31 µs (3.13× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec513 ns (1.59× the best)1.29 ns (1.48× the best)276 ns (10.25× the best)1.39 µs (1.24× the best)2.08 µs (1.35× the best)3.20 µs (1.89× the best)4.45 µs (2.40× the best)5.71 µs (2.83× the best)
gf2_122-gls-ucompare suitePornin x1: hash to addend; output already an addend580 ns (1.80× the best)in the hash276 ns (10.25× the best)1.46 µs (1.30× the best)2.15 µs (1.39× the best)3.27 µs (1.93× the best)4.52 µs (2.44× the best)5.77 µs (2.86× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended814 ns (2.53× the best)160 ns (183.04× the best)676 ns (25.13× the best)3.01 µs (2.68× the best)4.66 µs (3.02× the best)7.34 µs (4.33× the best)10.3 µs (5.58× the best)13.4 µs (6.63× the best)
gf2_109compare suitePornin x1: hash to addend; output already an addend1.05 µs (3.27× the best)in the hash676 ns (25.13× the best)3.09 µs (2.75× the best)4.74 µs (3.07× the best)7.42 µs (4.38× the best)10.4 µs (5.62× the best)13.4 µs (6.66× the best)
gf2_109-lambdaincompleteλ-projective814 ns (2.53× the best)245 ns (281.47× the best)545 ns (20.26× the best)2.72 µs (2.42× the best)4.05 µs (2.62× the best)6.22 µs (3.67× the best)8.65 µs (4.67× the best)11.1 µs (5.50× the best)
gf2_109-lambdaincompletecompare suitehashed straight to : no prepare834 ns (2.59× the best)in the hash545 ns (20.26× the best)2.49 µs (2.22× the best)3.83 µs (2.48× the best)6.00 µs (3.54× the best)8.42 µs (4.54× the best)10.9 µs (5.39× the best)
gf2_109-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend854 ns (2.65× the best)in the hash545 ns (20.26× the best)2.51 µs (2.24× the best)3.85 µs (2.49× the best)6.02 µs (3.55× the best)8.44 µs (4.56× the best)10.9 µs (5.40× the best)
gf2_109-wincompleteλ-projective, w codec805 ns (2.50× the best)1.24 ns (1.42× the best)541 ns (20.14× the best)2.46 µs (2.19× the best)3.78 µs (2.45× the best)5.94 µs (3.51× the best)8.35 µs (4.51× the best)10.8 µs (5.35× the best)
gf2_109-wincompletecompare suitePornin x1: hash to addend; output already an addend852 ns (2.65× the best)in the hash541 ns (20.14× the best)2.50 µs (2.23× the best)3.83 µs (2.48× the best)5.99 µs (3.53× the best)8.40 µs (4.53× the best)10.8 µs (5.37× the best)
gf2_109-uunscaled (X:S:Z), w codec927 ns (2.88× the best)1.26 ns (1.44× the best)488 ns (18.15× the best)2.42 µs (2.16× the best)3.62 µs (2.34× the best)5.57 µs (3.29× the best)7.75 µs (4.18× the best)9.93 µs (4.93× the best)
gf2_109-ucompare suitePornin x1: hash to addend; output already an addend986 ns (3.06× the best)in the hash488 ns (18.15× the best)2.48 µs (2.21× the best)3.68 µs (2.38× the best)5.63 µs (3.32× the best)7.81 µs (4.21× the best)9.99 µs (4.96× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.25 µs (3.90× the best)38.0 ns (43.55× the best)26.9 ns (best)1.45 µs (1.29× the best)1.54 µs (best)1.69 µs (best)1.85 µs (best)2.02 µs (best)
weier127short Weierstrass, projective += affine1.23 µs (3.81× the best)0.87 ns (tied for the best, within noise)58.1 ns (2.16× the best)1.47 µs (1.31× the best)1.64 µs (1.06× the best)1.92 µs (1.13× the best)2.21 µs (1.19× the best)2.51 µs (1.25× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.22 µs (3.79× the best)0.88 ns (tied for the best, within noise, 1.01×)47.3 ns (1.76× the best)1.44 µs (1.28× the best)1.58 µs (1.02× the best)1.81 µs (1.07× the best)2.06 µs (1.11× the best)2.31 µs (1.15× the best)

bold: the best of its column; italic, dotted: tied with the best within the confidence intervals; shading: ratio to the best, pale yellow at 1× to purple at 16× or more; grey: baseline, not compared.

The cost of inserting an item into a RIBLT as stacked bars of hash, prepare, the map digest and the mapping's indices below m, the same for every family, and k point additions, a panel per number of coded symbols m, k = 2(H_(m+1) - 1) being the number of symbols an item is added to on average; the lowest compatible batched recipe per family is shown. Preparation already included in a map has no separate segment. All recipes and individual hashing are in the grids.The cost of inserting an item into a RIBLT as stacked bars of hash, prepare, the map digest and the mapping's indices below m, the same for every family, and k point additions, a panel per number of coded symbols m, k = 2(H_(m+1) - 1) being the number of symbols an item is added to on average; the lowest compatible batched recipe per family is shown. Preparation already included in a map has no separate segment. All recipes and individual hashing are in the grids.

Hashing and preparing one item at a time
curveper item, onceper cellper item, into k cells
hash (alone)prepare (alone)add (throughput): : : : :
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas1.29 µs (1.46× the best)57.5 ns (105.07× the best)307 ns (11.43× the best)2.32 µs (1.62× the best)3.09 µs (1.96× the best)4.33 µs (2.40× the best)5.72 µs (2.78× the best)7.11 µs (3.08× the best)
gf2_127compare suitePornin x1: hash to addend; output already an addend966 ns (1.09× the best)in the hash307 ns (11.43× the best)1.94 µs (1.35× the best)2.70 µs (1.71× the best)3.95 µs (2.18× the best)5.33 µs (2.59× the best)6.72 µs (2.91× the best)
gf2_127compare suitePornin x2: hash to addend; output already an addend2.25 µs (2.53× the best)in the hash307 ns (11.43× the best)3.22 µs (2.24× the best)3.98 µs (2.52× the best)5.23 µs (2.89× the best)6.61 µs (3.22× the best)8.01 µs (3.47× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators1.30 µs (1.46× the best)618 ns (1128.57× the best)249 ns (9.24× the best)2.72 µs (1.90× the best)3.34 µs (2.12× the best)4.36 µs (2.41× the best)5.49 µs (2.67× the best)6.62 µs (2.87× the best)
gf2_127-lambdaincompletecompare suitehashed straight to : no prepare1.26 µs (1.41× the best)in the hash249 ns (9.24× the best)2.06 µs (1.44× the best)2.68 µs (1.70× the best)3.70 µs (2.05× the best)4.83 µs (2.35× the best)5.96 µs (2.58× the best)
gf2_127-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend889 ns (tied for the best, within noise)in the hash249 ns (9.24× the best)1.69 µs (1.18× the best)2.31 µs (1.47× the best)3.33 µs (1.84× the best)4.46 µs (2.17× the best)5.59 µs (2.42× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine1.41 µs (1.59× the best)0.55 ns (tied for the best, within noise, 1.01×)249 ns (9.24× the best)2.21 µs (1.54× the best)2.84 µs (1.80× the best)3.85 µs (2.13× the best)4.98 µs (2.42× the best)6.12 µs (2.65× the best)
gf2_127-wincompletecompare suitePornin x1: hash to addend; output already an addend892 ns (tied for the best, within noise, 1.00×)in the hash249 ns (9.24× the best)1.69 µs (1.18× the best)2.32 µs (1.47× the best)3.33 µs (1.84× the best)4.46 µs (2.17× the best)5.60 µs (2.43× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes1.51 µs (1.69× the best)0.56 ns (1.02× the best)220 ns (8.17× the best)2.22 µs (1.55× the best)2.78 µs (1.76× the best)3.68 µs (2.04× the best)4.69 µs (2.28× the best)5.70 µs (2.47× the best)
gf2_127-ucompare suitePornin x1: hash to addend; output already an addend939 ns (1.06× the best)in the hash220 ns (8.17× the best)1.66 µs (1.15× the best)2.21 µs (1.40× the best)3.11 µs (1.72× the best)4.12 µs (2.00× the best)5.13 µs (2.22× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended1.27 µs (1.42× the best)85.1 ns (155.45× the best)390 ns (14.49× the best)2.56 µs (1.79× the best)3.52 µs (2.23× the best)5.09 µs (2.82× the best)6.84 µs (3.32× the best)8.59 µs (3.72× the best)
gf2_122compare suitePornin x1: hash to addend; output already an addend1.08 µs (1.22× the best)in the hash390 ns (14.49× the best)2.29 µs (1.60× the best)3.25 µs (2.06× the best)4.82 µs (2.67× the best)6.57 µs (3.19× the best)8.32 µs (3.61× the best)
gf2_122-lambdaincompleteλ-projective1.27 µs (1.43× the best)542 ns (989.75× the best)307 ns (11.42× the best)2.78 µs (1.94× the best)3.54 µs (2.25× the best)4.79 µs (2.65× the best)6.17 µs (3.00× the best)7.57 µs (3.28× the best)
gf2_122-lambdaincompletecompare suitehashed straight to : no prepare1.24 µs (1.40× the best)in the hash307 ns (11.42× the best)2.21 µs (1.54× the best)2.98 µs (1.89× the best)4.22 µs (2.34× the best)5.61 µs (2.73× the best)7.00 µs (3.03× the best)
gf2_122-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend925 ns (1.04× the best)in the hash307 ns (11.42× the best)1.90 µs (1.32× the best)2.66 µs (1.69× the best)3.90 µs (2.16× the best)5.29 µs (2.57× the best)6.68 µs (2.90× the best)
gf2_122-wincompleteλ-projective, w codec1.24 µs (1.39× the best)0.55 ns (tied for the best, within noise)307 ns (11.42× the best)2.21 µs (1.54× the best)2.97 µs (1.89× the best)4.22 µs (2.33× the best)5.60 µs (2.73× the best)6.99 µs (3.03× the best)
gf2_122-wincompletecompare suitePornin x1: hash to addend; output already an addend929 ns (1.04× the best)in the hash307 ns (11.42× the best)1.90 µs (1.32× the best)2.66 µs (1.69× the best)3.91 µs (2.16× the best)5.29 µs (2.57× the best)6.68 µs (2.90× the best)
gf2_122-uunscaled (X:S:Z), w codec1.38 µs (1.55× the best)0.57 ns (1.04× the best)277 ns (10.31× the best)2.27 µs (1.58× the best)2.96 µs (1.88× the best)4.09 µs (2.26× the best)5.34 µs (2.60× the best)6.60 µs (2.86× the best)
gf2_122-ucompare suitePornin x1: hash to addend; output already an addend1.00 µs (1.13× the best)in the hash277 ns (10.31× the best)1.89 µs (1.32× the best)2.58 µs (1.64× the best)3.71 µs (2.05× the best)4.97 µs (2.41× the best)6.23 µs (2.70× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended1.27 µs (1.43× the best)60.9 ns (111.27× the best)370 ns (13.76× the best)2.48 µs (1.73× the best)3.40 µs (2.15× the best)4.89 µs (2.70× the best)6.55 µs (3.18× the best)8.22 µs (3.56× the best)
gf2_122-glscompare suitePornin x1: hash to addend; output already an addend1.02 µs (1.15× the best)in the hash370 ns (13.76× the best)2.17 µs (1.52× the best)3.09 µs (1.96× the best)4.58 µs (2.53× the best)6.24 µs (3.03× the best)7.91 µs (3.43× the best)
gf2_122-gls-lambdaincompleteλ-projective1.26 µs (1.42× the best)546 ns (997.93× the best)310 ns (11.54× the best)2.79 µs (1.95× the best)3.56 µs (2.26× the best)4.82 µs (2.67× the best)6.22 µs (3.02× the best)7.62 µs (3.30× the best)
gf2_122-gls-lambdaincompletecompare suitehashed straight to : no prepare1.29 µs (1.45× the best)in the hash310 ns (11.54× the best)2.27 µs (1.59× the best)3.05 µs (1.93× the best)4.30 µs (2.38× the best)5.70 µs (2.77× the best)7.11 µs (3.08× the best)
gf2_122-gls-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend941 ns (1.06× the best)in the hash310 ns (11.54× the best)1.92 µs (1.34× the best)2.69 µs (1.71× the best)3.95 µs (2.19× the best)5.35 µs (2.60× the best)6.75 µs (2.93× the best)
gf2_122-gls-wincompleteλ-projective, w codec1.24 µs (1.40× the best)0.56 ns (1.02× the best)310 ns (11.51× the best)2.22 µs (1.55× the best)2.99 µs (1.90× the best)4.24 µs (2.35× the best)5.64 µs (2.74× the best)7.04 µs (3.05× the best)
gf2_122-gls-wincompletecompare suitePornin x1: hash to addend; output already an addend949 ns (1.07× the best)in the hash310 ns (11.51× the best)1.93 µs (1.34× the best)2.70 µs (1.71× the best)3.95 µs (2.19× the best)5.35 µs (2.60× the best)6.75 µs (2.93× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec1.31 µs (1.47× the best)0.55 ns (tied for the best, within noise, 1.01×)276 ns (10.25× the best)2.19 µs (1.53× the best)2.88 µs (1.83× the best)4.00 µs (2.21× the best)5.25 µs (2.55× the best)6.50 µs (2.82× the best)
gf2_122-gls-ucompare suitePornin x1: hash to addend; output already an addend1.01 µs (1.14× the best)in the hash276 ns (10.25× the best)1.89 µs (1.32× the best)2.58 µs (1.64× the best)3.70 µs (2.05× the best)4.95 µs (2.41× the best)6.21 µs (2.69× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended9.10 µs (10.24× the best)162 ns (295.04× the best)676 ns (25.13× the best)11.3 µs (7.89× the best)12.9 µs (8.21× the best)15.6 µs (8.65× the best)18.6 µs (9.06× the best)21.6 µs (9.38× the best)
gf2_109compare suitePornin x1: hash to addend; output already an addend5.27 µs (5.92× the best)in the hash676 ns (25.13× the best)7.30 µs (5.10× the best)8.95 µs (5.67× the best)11.6 µs (6.44× the best)14.6 µs (7.12× the best)17.6 µs (7.65× the best)
gf2_109-lambdaincompleteλ-projective9.08 µs (10.21× the best)4.43 µs (8096.43× the best)545 ns (20.26× the best)15.2 µs (10.58× the best)16.5 µs (10.46× the best)18.7 µs (10.33× the best)21.1 µs (10.26× the best)23.5 µs (10.20× the best)
gf2_109-lambdaincompletecompare suitehashed straight to : no prepare9.10 µs (10.24× the best)in the hash545 ns (20.26× the best)10.8 µs (7.51× the best)12.1 µs (7.67× the best)14.3 µs (7.89× the best)16.7 µs (8.12× the best)19.1 µs (8.29× the best)
gf2_109-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend5.09 µs (5.72× the best)in the hash545 ns (20.26× the best)6.75 µs (4.71× the best)8.08 µs (5.12× the best)10.3 µs (5.67× the best)12.7 µs (6.17× the best)15.1 µs (6.55× the best)
gf2_109-wincompleteλ-projective, w codec8.98 µs (10.10× the best)0.55 ns (tied for the best, within noise)541 ns (20.14× the best)10.6 µs (7.42× the best)12.0 µs (7.58× the best)14.1 µs (7.81× the best)16.5 µs (8.04× the best)18.9 µs (8.21× the best)
gf2_109-wincompletecompare suitePornin x1: hash to addend; output already an addend5.11 µs (5.75× the best)in the hash541 ns (20.14× the best)6.76 µs (4.72× the best)8.09 µs (5.13× the best)10.2 µs (5.67× the best)12.7 µs (6.16× the best)15.1 µs (6.53× the best)
gf2_109-uunscaled (X:S:Z), w codec9.08 µs (10.21× the best)0.55 ns (tied for the best, within noise, 1.01×)488 ns (18.15× the best)10.6 µs (7.38× the best)11.8 µs (7.46× the best)13.7 µs (7.59× the best)15.9 µs (7.73× the best)18.1 µs (7.84× the best)
gf2_109-ucompare suitePornin x1: hash to addend; output already an addend5.19 µs (5.84× the best)in the hash488 ns (18.15× the best)6.69 µs (4.67× the best)7.89 µs (5.00× the best)9.84 µs (5.44× the best)12.0 µs (5.84× the best)14.2 µs (6.15× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.25 µs (1.40× the best)635 ns (1160.61× the best)26.9 ns (tied for the best, within noise)2.04 µs (1.42× the best)2.14 µs (1.35× the best)2.29 µs (1.26× the best)2.45 µs (1.19× the best)2.61 µs (1.13× the best)
edwards127compare suiteElligator 2 x1: hash + prepare1.52 µs (1.71× the best)635 ns (1160.61× the best)26.9 ns (tied for the best, within noise)2.32 µs (1.62× the best)2.41 µs (1.53× the best)2.56 µs (1.42× the best)2.72 µs (1.32× the best)2.88 µs (1.25× the best)
weier127short Weierstrass, projective += affine1.22 µs (1.37× the best)0.79 ns (1.45× the best)58.1 ns (2.16× the best)1.47 µs (1.02× the best)1.64 µs (1.04× the best)1.91 µs (1.06× the best)2.20 µs (1.07× the best)2.50 µs (1.08× the best)
weier127compare suiteSSWU x1: hash + prepare1.33 µs (1.49× the best)0.79 ns (1.45× the best)58.1 ns (2.16× the best)1.58 µs (1.10× the best)1.75 µs (1.11× the best)2.02 µs (1.12× the best)2.31 µs (1.12× the best)2.61 µs (1.13× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.22 µs (1.37× the best)0.80 ns (1.46× the best)47.3 ns (1.76× the best)1.43 µs (best)1.58 µs (best)1.81 µs (best)2.06 µs (best)2.31 µs (best)

bold: the best of its column; italic, dotted: tied with the best within the confidence intervals; shading: ratio to the best, pale yellow at 1× to purple at 16× or more; grey: baseline, not compared.

Batching

Batched against individual time per element. The inversions-shared column divides the saving by the difference between individual and batched field inversion; it also absorbs allocation and control flow.

curvehash to curveprepareencodedecode
alonebatchedfaster byinversions sharedalonebatchedfaster byinversions sharedalonebatchedfaster byinversions sharedalonebatchedfaster byinversions shared
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas1.29 µs347 ns (best)3.7×257.5 ns55.2 ns (63.32× the best)1.0×0709 ns214 ns (13.42× the best)3.3×1659 ns167 ns (1.02× the best)4.0×1
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators1.30 µs347 ns (1.00× the best)3.7×2618 ns120 ns (137.18× the best)5.2×1671 ns172 ns (10.81× the best)3.9×1678 ns163 ns (best)4.2×1.1
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine1.41 µs391 ns (1.13× the best)3.6×2.10.55 ns1.28 ns (1.47× the best)0.4×0655 ns148 ns (9.31× the best)4.4×1.1683 ns170 ns (1.04× the best)4.0×1.1
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes1.51 µs452 ns (1.30× the best)3.3×2.20.56 ns1.32 ns (1.52× the best)0.4×0638 ns150 ns (9.40× the best)4.3×1731 ns227 ns (1.39× the best)3.2×1.1
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended1.27 µs488 ns (1.41× the best)2.6×285.1 ns84.3 ns (96.68× the best)1.0×0672 ns286 ns (17.91× the best)2.4×1645 ns256 ns (1.57× the best)2.5×1
gf2_122-lambdaincompleteλ-projective1.27 µs487 ns (1.40× the best)2.6×2542 ns152 ns (173.86× the best)3.6×1624 ns234 ns (14.66× the best)2.7×1644 ns256 ns (1.57× the best)2.5×1
gf2_122-wincompleteλ-projective, w codec1.24 µs458 ns (1.32× the best)2.7×20.55 ns1.25 ns (1.43× the best)0.4×0590 ns200 ns (12.53× the best)3.0×1613 ns216 ns (1.32× the best)2.8×1
gf2_122-uunscaled (X:S:Z), w codec1.38 µs555 ns (1.60× the best)2.5×2.10.57 ns1.31 ns (1.51× the best)0.4×0610 ns202 ns (12.68× the best)3.0×1707 ns309 ns (1.90× the best)2.3×1
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended1.27 µs456 ns (1.32× the best)2.8×2.160.9 ns61.2 ns (70.16× the best)1.0×0654 ns270 ns (16.95× the best)2.4×1649 ns229 ns (1.41× the best)2.8×1.1
gf2_122-gls-lambdaincompleteλ-projective1.26 µs455 ns (1.31× the best)2.8×2.1546 ns153 ns (175.74× the best)3.6×1639 ns242 ns (15.17× the best)2.6×1633 ns228 ns (1.40× the best)2.8×1
gf2_122-gls-wincompleteλ-projective, w codec1.24 µs444 ns (1.28× the best)2.8×20.56 ns1.27 ns (1.46× the best)0.4×0595 ns198 ns (12.42× the best)3.0×1598 ns203 ns (1.25× the best)2.9×1
gf2_122-gls-uunscaled (X:S:Z), w codec1.31 µs513 ns (1.48× the best)2.6×20.55 ns1.29 ns (1.48× the best)0.4×0598 ns200 ns (12.55× the best)3.0×1673 ns272 ns (1.67× the best)2.5×1
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended9.10 µs814 ns (2.35× the best)11.2×2162 ns160 ns (183.04× the best)1.0×04.70 µs500 ns (31.33× the best)9.4×14.60 µs421 ns (2.58× the best)10.9×1
gf2_109-lambdaincompleteλ-projective9.08 µs814 ns (2.35× the best)11.2×24.43 µs245 ns (281.47× the best)18.1×14.57 µs371 ns (23.29× the best)12.3×14.61 µs424 ns (2.60× the best)10.9×1
gf2_109-wincompleteλ-projective, w codec8.98 µs805 ns (2.32× the best)11.1×1.90.55 ns1.24 ns (1.42× the best)0.4×04.57 µs343 ns (21.53× the best)13.3×14.60 µs400 ns (2.46× the best)11.5×1
gf2_109-uunscaled (X:S:Z), w codec9.08 µs927 ns (2.67× the best)9.8×1.90.55 ns1.26 ns (1.44× the best)0.4×04.53 µs343 ns (21.53× the best)13.2×14.74 µs519 ns (3.19× the best)9.1×1
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.25 µs1.25 µs (3.62× the best)1.0×0635 ns38.0 ns (43.55× the best)16.7×1.1602 ns30.1 ns (1.89× the best)20.0×1575 ns576 ns (3.54× the best)1.0×0
weier127short Weierstrass, projective += affine1.22 µs1.23 µs (3.54× the best)1.0×00.79 ns0.87 ns (best)0.9×0587 ns15.9 ns (best)36.8×1574 ns573 ns (3.52× the best)1.0×0
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.22 µs1.22 µs (3.52× the best)1.0×00.80 ns0.88 ns (1.01× the best)0.9×0593 ns22.5 ns (1.41× the best)26.3×1574 ns574 ns (3.52× the best)1.0×0

bold: the best of its column; italic, dotted: tied with the best within the confidence intervals; shading: ratio to the best, pale yellow at 1× to purple at 16× or more; grey: baseline, not compared.

Time per element against batch size.

curvehash to curveprepareencodedecode
alonealonealonealone
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas1.29 µs (1.07× the best)347 ns (tied for the best, within noise)57.5 ns (105.07× the best)55.2 ns (63.32× the best)709 ns (1.21× the best)214 ns (13.42× the best)659 ns (1.15× the best)167 ns (1.02× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators1.30 µs (1.07× the best)347 ns (tied for the best, within noise, 1.00×)618 ns (1128.57× the best)120 ns (137.18× the best)671 ns (1.14× the best)172 ns (10.81× the best)678 ns (1.18× the best)163 ns (best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine1.41 µs (1.16× the best)391 ns (1.13× the best)0.55 ns (tied for the best, within noise, 1.01×)1.28 ns (1.47× the best)655 ns (1.12× the best)148 ns (9.31× the best)683 ns (1.19× the best)170 ns (1.04× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes1.51 µs (1.24× the best)452 ns (1.30× the best)0.56 ns (1.02× the best)1.32 ns (1.52× the best)638 ns (1.09× the best)150 ns (9.40× the best)731 ns (1.27× the best)227 ns (1.39× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended1.27 µs (1.04× the best)488 ns (1.41× the best)85.1 ns (155.45× the best)84.3 ns (96.68× the best)672 ns (1.15× the best)286 ns (17.91× the best)645 ns (1.12× the best)256 ns (1.57× the best)
gf2_122-lambdaincompleteλ-projective1.27 µs (1.04× the best)487 ns (1.40× the best)542 ns (989.75× the best)152 ns (173.86× the best)624 ns (1.06× the best)234 ns (14.66× the best)644 ns (1.12× the best)256 ns (1.57× the best)
gf2_122-wincompleteλ-projective, w codec1.24 µs (1.02× the best)458 ns (1.32× the best)0.55 ns (tied for the best, within noise)1.25 ns (1.43× the best)590 ns (1.01× the best)200 ns (12.53× the best)613 ns (1.07× the best)216 ns (1.32× the best)
gf2_122-uunscaled (X:S:Z), w codec1.38 µs (1.14× the best)555 ns (1.60× the best)0.57 ns (1.04× the best)1.31 ns (1.51× the best)610 ns (1.04× the best)202 ns (12.68× the best)707 ns (1.23× the best)309 ns (1.90× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended1.27 µs (1.04× the best)456 ns (1.32× the best)60.9 ns (111.27× the best)61.2 ns (70.16× the best)654 ns (1.11× the best)270 ns (16.95× the best)649 ns (1.13× the best)229 ns (1.41× the best)
gf2_122-gls-lambdaincompleteλ-projective1.26 µs (1.04× the best)455 ns (1.31× the best)546 ns (997.93× the best)153 ns (175.74× the best)639 ns (1.09× the best)242 ns (15.17× the best)633 ns (1.10× the best)228 ns (1.40× the best)
gf2_122-gls-wincompleteλ-projective, w codec1.24 µs (1.02× the best)444 ns (1.28× the best)0.56 ns (1.02× the best)1.27 ns (1.46× the best)595 ns (1.01× the best)198 ns (12.42× the best)598 ns (1.04× the best)203 ns (1.25× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec1.31 µs (1.08× the best)513 ns (1.48× the best)0.55 ns (tied for the best, within noise, 1.01×)1.29 ns (1.48× the best)598 ns (1.02× the best)200 ns (12.55× the best)673 ns (1.17× the best)272 ns (1.67× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended9.10 µs (7.49× the best)814 ns (2.35× the best)162 ns (295.04× the best)160 ns (183.04× the best)4.70 µs (8.00× the best)500 ns (31.33× the best)4.60 µs (8.02× the best)421 ns (2.58× the best)
gf2_109-lambdaincompleteλ-projective9.08 µs (7.47× the best)814 ns (2.35× the best)4.43 µs (8096.43× the best)245 ns (281.47× the best)4.57 µs (7.79× the best)371 ns (23.29× the best)4.61 µs (8.04× the best)424 ns (2.60× the best)
gf2_109-wincompleteλ-projective, w codec8.98 µs (7.39× the best)805 ns (2.32× the best)0.55 ns (tied for the best, within noise)1.24 ns (1.42× the best)4.57 µs (7.78× the best)343 ns (21.53× the best)4.60 µs (8.02× the best)400 ns (2.46× the best)
gf2_109-uunscaled (X:S:Z), w codec9.08 µs (7.47× the best)927 ns (2.67× the best)0.55 ns (tied for the best, within noise, 1.01×)1.26 ns (1.44× the best)4.53 µs (7.72× the best)343 ns (21.53× the best)4.74 µs (8.26× the best)519 ns (3.19× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.25 µs (1.03× the best)1.26 µs (1.03× the best)1.26 µs (1.02× the best)1.25 µs (3.62× the best)635 ns (1160.61× the best)124 ns (94.01× the best)50.4 ns (44.83× the best)38.0 ns (43.55× the best)602 ns (1.03× the best)114 ns (1.13× the best)42.7 ns (1.52× the best)30.1 ns (1.89× the best)575 ns (tied for the best, within noise, 1.00×)575 ns (tied for the best, within noise)573 ns (best)576 ns (3.54× the best)
weier127short Weierstrass, projective += affine1.22 µs (tied for the best, within noise, 1.00×)1.23 µs (tied for the best, within noise)1.28 µs (1.05× the best)1.23 µs (3.54× the best)0.79 ns (1.45× the best)1.33 ns (tied for the best, within noise, 1.01×)1.13 ns (1.01× the best)0.87 ns (tied for the best, within noise)587 ns (best)101 ns (best)28.0 ns (best)15.9 ns (best)574 ns (tied for the best, within noise)577 ns (1.00× the best)576 ns (1.01× the best)573 ns (3.52× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.22 µs (tied for the best, within noise)1.23 µs (tied for the best, within noise)1.23 µs (best)1.22 µs (3.52× the best)0.80 ns (1.46× the best)1.32 ns (tied for the best, within noise)1.12 ns (best)0.88 ns (tied for the best, within noise, 1.01×)593 ns (1.01× the best)107 ns (1.06× the best)35.1 ns (1.25× the best)22.5 ns (1.41× the best)574 ns (tied for the best, within noise, 1.00×)576 ns (tied for the best, within noise, 1.00×)579 ns (1.01× the best)574 ns (3.52× the best)

bold: the best of its column; italic, dotted: tied with the best within the confidence intervals; shading: ratio to the best, pale yellow at 1× to purple at 16× or more; grey: baseline, not compared.

Costs by lifetime

What an insertion into cells keyed by IDs costs by how long each part stays valid, for each family the RIBLT suite timed so (proj=): the ID once per item; the curve and each hash’s keys once per salt; the hash to the addend, the mapping’s seed and its walk once per salt and item; and the addition, encoding and decoding of each cell. Salted SHA-256 hashes the ID anew under each salt; each projection, the checksum’s and the mapping’s in fields chosen apart, multiplies its halves by the salt’s keys. The last row is the measured encoding of n = 3500 items into m = 1350 cells, per item: by salted SHA-256 of the items themselves, and by projections of their IDs, computed beforehand (Costs by lifetime).

edwards.127, ti, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25654.2 ns54.2 ns
per saltaccept the curvenot timednot timed
per saltchecksum keys119 ns374 ns
per saltmapping keys119 ns374 ns
per salt and itemhash to the addend1.31 µs1.25 µs
per salt and itemmapping seed50.2 ns14.0 ns
per salt and itemmapping walk below m = 1350146 ns146 ns
per celladd26.9 ns26.9 ns
per cellencode30.1 ns30.1 ns
per celldecode576 ns576 ns
measuredinsertion per item, k = 13.57 cells1.88 µs1.81 µs

weier.127, ti, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25654.2 ns54.2 ns
per saltaccept the curvenot timednot timed
per saltchecksum keys119 ns374 ns
per saltmapping keys119 ns374 ns
per salt and itemhash to the addend1.21 µs1.18 µs
per salt and itemmapping seed50.2 ns14.0 ns
per salt and itemmapping walk below m = 1350146 ns146 ns
per celladd58.1 ns58.1 ns
per cellencode15.9 ns15.9 ns
per celldecode573 ns573 ns
measuredinsertion per item, k = 13.57 cells2.24 µs2.12 µs

weier-jacobian.127, ti, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25654.2 ns54.2 ns
per saltaccept the curvenot timednot timed
per saltchecksum keys119 ns374 ns
per saltmapping keys119 ns374 ns
per salt and itemhash to the addend1.20 µs1.18 µs
per salt and itemmapping seed50.2 ns14.0 ns
per salt and itemmapping walk below m = 1350146 ns146 ns
per celladd47.3 ns47.3 ns
per cellencode22.5 ns22.5 ns
per celldecode574 ns574 ns
measuredinsertion per item, k = 13.57 cells2.03 µs1.93 µs

Group operations

The fastest measurement of each operation and mode per family, the hashes over every construction; rows grouped by field.

curvehash to curvehash to addendprepareaddsubtractnegateis identityequals addendencodedecode
alonebatchedalonebatchedalonebatchedthroughputlatencymatchmismatchalonebatchedalonebatched
baseline
xorSHA-256 digests XORed: no group, 32 bytes0.51 ns0.21 ns
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas966 ns (best)347 ns (tied for the best, within noise)57.5 ns (105.07× the best)55.2 ns (63.32× the best)307 ns (11.43× the best)307 ns (9.43× the best)0.63 ns (1.14× the best)0.87 ns (2.17× the best)54.7 ns (17.31× the best)709 ns (1.21× the best)214 ns (13.42× the best)659 ns (1.15× the best)167 ns (1.02× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators1.30 µs (1.35× the best)347 ns (tied for the best, within noise, 1.00×)889 ns (tied for the best, within noise)322 ns (best)618 ns (1128.57× the best)120 ns (137.18× the best)249 ns (9.24× the best)253 ns (7.78× the best)0.56 ns (1.02× the best)0.81 ns (2.04× the best)30.6 ns (9.68× the best)671 ns (1.14× the best)172 ns (10.81× the best)678 ns (1.18× the best)163 ns (best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine1.41 µs (1.46× the best)391 ns (1.13× the best)892 ns (tied for the best, within noise, 1.00×)360 ns (1.12× the best)0.55 ns (tied for the best, within noise, 1.01×)1.28 ns (1.47× the best)249 ns (9.24× the best)253 ns (7.78× the best)0.57 ns (1.02× the best)0.80 ns (2.01× the best)30.0 ns (9.49× the best)655 ns (1.12× the best)148 ns (9.31× the best)683 ns (1.19× the best)170 ns (1.04× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes1.51 µs (1.56× the best)452 ns (1.30× the best)939 ns (1.06× the best)426 ns (1.33× the best)0.56 ns (1.02× the best)1.32 ns (1.52× the best)220 ns (8.17× the best)222 ns (6.84× the best)0.62 ns (1.11× the best)0.79 ns (1.97× the best)89.9 ns (28.43× the best)638 ns (1.09× the best)150 ns (9.40× the best)731 ns (1.27× the best)227 ns (1.39× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended1.08 µs (1.12× the best)488 ns (1.41× the best)85.1 ns (155.45× the best)84.3 ns (96.68× the best)390 ns (14.49× the best)393 ns (12.08× the best)0.63 ns (1.14× the best)0.99 ns (2.49× the best)76.5 ns (24.17× the best)672 ns (1.15× the best)286 ns (17.91× the best)645 ns (1.12× the best)256 ns (1.57× the best)
gf2_122-lambdaincompleteλ-projective1.27 µs (1.31× the best)487 ns (1.40× the best)925 ns (1.04× the best)485 ns (1.51× the best)542 ns (989.75× the best)152 ns (173.86× the best)307 ns (11.42× the best)309 ns (9.49× the best)0.55 ns (tied for the best, within noise)0.98 ns (2.47× the best)42.8 ns (13.53× the best)624 ns (1.06× the best)234 ns (14.66× the best)644 ns (1.12× the best)256 ns (1.57× the best)
gf2_122-wincompleteλ-projective, w codec1.24 µs (1.28× the best)458 ns (1.32× the best)929 ns (1.04× the best)501 ns (1.56× the best)0.55 ns (tied for the best, within noise)1.25 ns (1.43× the best)307 ns (11.42× the best)310 ns (9.52× the best)0.56 ns (tied for the best, within noise, 1.00×)0.99 ns (2.49× the best)42.9 ns (13.55× the best)590 ns (1.01× the best)200 ns (12.53× the best)613 ns (1.07× the best)216 ns (1.32× the best)
gf2_122-uunscaled (X:S:Z), w codec1.38 µs (1.43× the best)555 ns (1.60× the best)1.00 µs (1.13× the best)585 ns (1.82× the best)0.57 ns (1.04× the best)1.31 ns (1.51× the best)277 ns (10.31× the best)280 ns (8.61× the best)0.62 ns (1.12× the best)1.00 ns (2.52× the best)119 ns (37.62× the best)610 ns (1.04× the best)202 ns (12.68× the best)707 ns (1.23× the best)309 ns (1.90× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended1.02 µs (1.06× the best)456 ns (1.32× the best)60.9 ns (111.27× the best)61.2 ns (70.16× the best)370 ns (13.76× the best)373 ns (11.45× the best)1.24 ns (2.23× the best)0.99 ns (2.49× the best)77.1 ns (24.37× the best)654 ns (1.11× the best)270 ns (16.95× the best)649 ns (1.13× the best)229 ns (1.41× the best)
gf2_122-gls-lambdaincompleteλ-projective1.26 µs (1.31× the best)455 ns (1.31× the best)941 ns (1.06× the best)468 ns (1.45× the best)546 ns (997.93× the best)153 ns (175.74× the best)310 ns (11.54× the best)313 ns (9.61× the best)0.58 ns (1.04× the best)1.02 ns (2.57× the best)43.8 ns (13.84× the best)639 ns (1.09× the best)242 ns (15.17× the best)633 ns (1.10× the best)228 ns (1.40× the best)
gf2_122-gls-wincompleteλ-projective, w codec1.24 µs (1.29× the best)444 ns (1.28× the best)949 ns (1.07× the best)509 ns (1.58× the best)0.56 ns (1.02× the best)1.27 ns (1.46× the best)310 ns (11.51× the best)313 ns (9.62× the best)0.56 ns (1.02× the best)0.99 ns (2.48× the best)43.0 ns (13.59× the best)595 ns (1.01× the best)198 ns (12.42× the best)598 ns (1.04× the best)203 ns (1.25× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec1.31 µs (1.36× the best)513 ns (1.48× the best)1.01 µs (1.14× the best)580 ns (1.80× the best)0.55 ns (tied for the best, within noise, 1.01×)1.29 ns (1.48× the best)276 ns (10.25× the best)281 ns (8.65× the best)0.62 ns (1.12× the best)1.01 ns (2.54× the best)116 ns (36.77× the best)598 ns (1.02× the best)200 ns (12.55× the best)673 ns (1.17× the best)272 ns (1.67× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended5.27 µs (5.45× the best)814 ns (2.35× the best)162 ns (295.04× the best)160 ns (183.04× the best)676 ns (25.13× the best)676 ns (20.78× the best)0.63 ns (1.13× the best)0.95 ns (2.39× the best)122 ns (38.42× the best)4.70 µs (8.00× the best)500 ns (31.33× the best)4.60 µs (8.02× the best)421 ns (2.58× the best)
gf2_109-lambdaincompleteλ-projective9.08 µs (9.40× the best)814 ns (2.35× the best)5.09 µs (5.72× the best)834 ns (2.59× the best)4.43 µs (8096.43× the best)245 ns (281.47× the best)545 ns (20.26× the best)549 ns (16.88× the best)0.56 ns (tied for the best, within noise, 1.01×)0.89 ns (2.23× the best)62.5 ns (19.77× the best)4.57 µs (7.79× the best)371 ns (23.29× the best)4.61 µs (8.04× the best)424 ns (2.60× the best)
gf2_109-wincompleteλ-projective, w codec8.98 µs (9.30× the best)805 ns (2.32× the best)5.11 µs (5.75× the best)852 ns (2.65× the best)0.55 ns (tied for the best, within noise)1.24 ns (1.42× the best)541 ns (20.14× the best)550 ns (16.90× the best)0.56 ns (tied for the best, within noise, 1.00×)0.89 ns (2.24× the best)62.4 ns (19.73× the best)4.57 µs (7.78× the best)343 ns (21.53× the best)4.60 µs (8.02× the best)400 ns (2.46× the best)
gf2_109-uunscaled (X:S:Z), w codec9.08 µs (9.40× the best)927 ns (2.67× the best)5.19 µs (5.84× the best)986 ns (3.06× the best)0.55 ns (tied for the best, within noise, 1.01×)1.26 ns (1.44× the best)488 ns (18.15× the best)494 ns (15.19× the best)0.62 ns (1.11× the best)0.89 ns (2.23× the best)184 ns (58.01× the best)4.53 µs (7.72× the best)343 ns (21.53× the best)4.74 µs (8.26× the best)519 ns (3.19× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.25 µs (1.29× the best)1.25 µs (3.62× the best)635 ns (1160.61× the best)38.0 ns (43.55× the best)26.9 ns (best)32.5 ns (best)28.8 ns (best)2.16 ns (3.91× the best)1.12 ns (2.82× the best)5.59 ns (best)3.16 ns (best)602 ns (1.03× the best)30.1 ns (1.89× the best)575 ns (tied for the best, within noise, 1.00×)576 ns (3.54× the best)
weier127short Weierstrass, projective += affine1.22 µs (1.26× the best)1.23 µs (3.54× the best)0.79 ns (1.45× the best)0.87 ns (tied for the best, within noise)58.1 ns (2.16× the best)63.2 ns (1.94× the best)58.8 ns (2.04× the best)1.18 ns (2.13× the best)0.40 ns (tied for the best, within noise)5.93 ns (1.06× the best)3.35 ns (1.06× the best)587 ns (best)15.9 ns (best)574 ns (tied for the best, within noise)573 ns (3.52× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.22 µs (1.26× the best)1.22 µs (3.52× the best)0.80 ns (1.46× the best)0.88 ns (tied for the best, within noise, 1.01×)47.3 ns (1.76× the best)55.3 ns (1.70× the best)48.6 ns (1.69× the best)1.18 ns (2.13× the best)0.40 ns (tied for the best, within noise)13.3 ns (2.39× the best)6.62 ns (2.09× the best)593 ns (1.01× the best)22.5 ns (1.41× the best)574 ns (tied for the best, within noise, 1.00×)574 ns (3.52× the best)

bold: the best of its column; italic, dotted: tied with the best within the confidence intervals; shading: ratio to the best, pale yellow at 1× to purple at 16× or more; grey: baseline, not compared.

Group operations and hash to curve, time per operation, on log scales: a panel per operation with a bar per field or curve and its 95% confidence-interval box with an estimate line, two variants of an operation as a dark and a light bar of the family's colour; each panel shows the three fastest, the representative families and the XOR baseline, and the grid above lists the rest.Group operations and hash to curve, time per operation, on log scales: a panel per operation with a bar per field or curve and its 95% confidence-interval box with an estimate line, two variants of an operation as a dark and a light bar of the family's colour; each panel shows the three fastest, the representative families and the XOR baseline, and the grid above lists the rest.

Field operations

Per field; batched inversion per element of a batch of 1024.

fieldmulsquareaddsqrtsqrt ratiohalftraceinvertpackunpack
throughputlatencythroughputlatencyalonebatched
binary
gf2_127F_2[z]/(z^127 + z^63 + 1)29.5 ns (11.54× the best)25.4 ns (6.03× the best)4.10 ns (1.84× the best)4.91 ns (1.15× the best)xor5.49 ns (1.35× the best)4.14 ns (1.06× the best)559 ns (1.11× the best)83.6 ns (8.80× the best)
gf2_122GF(2^61)[u]/(u^2 + u + 1)37.9 ns (14.82× the best)39.9 ns (9.45× the best)4.98 ns (2.24× the best)9.06 ns (2.12× the best)xor4.07 ns (best)3.89 ns (tied for the best, within noise)504 ns (best)113 ns (11.84× the best)
gf2_109F_2[z]/(z^109 + z^5 + z^4 + z^2 + 1)61.0 ns (23.81× the best)64.6 ns (15.32× the best)37.9 ns (17.00× the best)41.6 ns (9.71× the best)xor35.2 ns (8.67× the best)3.90 ns (tied for the best, within noise, 1.00×)4.39 µs (8.71× the best)185 ns (19.44× the best)
prime
fp127p = 2^127 − 12.56 ns (best)4.22 ns (best)2.23 ns (best)4.28 ns (best)0.98 ns (best)560 ns (137.67× the best)587 ns (best)576 ns (1.14× the best)9.51 ns (best)0.37 ns (best)0.74 ns (best)

bold: the best of its column; italic, dotted: tied with the best within the confidence intervals; shading: ratio to the best, pale yellow at 1× to purple at 16× or more; grey: baseline, not compared.

Field operations, time per operation, on log scales: a panel per operation with a bar per field or curve and its 95% confidence-interval box with an estimate line, two variants of an operation as a dark and a light bar of the family's colour; each panel shows the three fastest, the representative families and the XOR baseline, and the grid above lists the rest.Field operations, time per operation, on log scales: a panel per operation with a bar per field or curve and its 95% confidence-interval box with an estimate line, two variants of an operation as a dark and a light bar of the family's colour; each panel shows the three fastest, the representative families and the XOR baseline, and the grid above lists the rest.

Which bench each cell is
operationcurvebenchtime95% CI
field mul, throughputgf2_127field/gf2_127/mul throughput (8 chains)29.5 ns29.5 ns .. 29.6 ns
field mul, throughputgf2_109field/gf2_109/mul throughput (8 chains)61.0 ns60.6 ns .. 61.3 ns
field mul, throughputgf2_122field/gf2_122/mul throughput (8 chains)37.9 ns37.8 ns .. 38.0 ns
field mul, throughputfp127field/fp127/mul throughput (8 chains)2.56 ns2.55 ns .. 2.57 ns
field mul, latencygf2_127field/gf2_127/mul latency (dependent chain)25.4 ns25.2 ns .. 25.7 ns
field mul, latencygf2_109field/gf2_109/mul latency (dependent chain)64.6 ns64.4 ns .. 64.9 ns
field mul, latencygf2_122field/gf2_122/mul latency (dependent chain)39.9 ns39.8 ns .. 40.0 ns
field mul, latencyfp127field/fp127/mul latency (dependent chain)4.22 ns4.20 ns .. 4.24 ns
field square, throughputgf2_127field/gf2_127/square throughput (8 chains)4.10 ns4.09 ns .. 4.12 ns
field square, throughputgf2_109field/gf2_109/square throughput (8 chains)37.9 ns37.6 ns .. 38.1 ns
field square, throughputgf2_122field/gf2_122/square throughput (8 chains)4.98 ns4.97 ns .. 4.99 ns
field square, throughputfp127field/fp127/square throughput (8 chains)2.23 ns2.22 ns .. 2.24 ns
field square, latencygf2_127field/gf2_127/square latency (dependent chain)4.91 ns4.87 ns .. 4.94 ns
field square, latencygf2_109field/gf2_109/square latency (dependent chain)41.6 ns41.3 ns .. 41.8 ns
field square, latencygf2_122field/gf2_122/square latency (dependent chain)9.06 ns9.03 ns .. 9.08 ns
field square, latencyfp127field/fp127/square latency (dependent chain)4.28 ns4.26 ns .. 4.31 ns
field addfp127field/fp127/add0.98 ns0.98 ns .. 0.99 ns
field sqrtgf2_127field/gf2_127/sqrt5.49 ns5.48 ns .. 5.50 ns
field sqrtgf2_109field/gf2_109/sqrt35.2 ns35.1 ns .. 35.3 ns
field sqrtgf2_122field/gf2_122/sqrt4.07 ns4.06 ns .. 4.08 ns
field sqrtfp127field/fp127/sqrt (x^(2^125))560 ns559 ns .. 561 ns
field sqrt ratiofp127field/fp127/sqrt_ratio587 ns586 ns .. 589 ns
field halftracegf2_127field/gf2_127/halftrace (byte tables)4.14 ns4.13 ns .. 4.14 ns
field halftracegf2_109field/gf2_109/halftrace (byte tables)3.90 ns3.89 ns .. 3.92 ns
field halftracegf2_122field/gf2_122/qsolve (z^2 + z = c, 2 base halftraces)3.89 ns3.88 ns .. 3.90 ns
field invert, one at a timegf2_127field/gf2_127/invert559 ns558 ns .. 560 ns
field invert, one at a timegf2_109field/gf2_109/invert4.39 µs4.38 µs .. 4.40 µs
field invert, one at a timegf2_122field/gf2_122/invert504 ns503 ns .. 505 ns
field invert, one at a timefp127field/fp127/invert576 ns575 ns .. 577 ns
field invert, batchedgf2_127field/gf2_127/batch invert (product tree)83.6 ns83.5 ns .. 83.8 ns
field invert, batchedgf2_109field/gf2_109/batch invert (product tree)185 ns184 ns .. 186 ns
field invert, batchedgf2_122field/gf2_122/batch invert (product tree)113 ns112 ns .. 113 ns
field invert, batchedfp127field/fp127/batch invert (product tree)9.51 ns9.45 ns .. 9.57 ns
field packfp127field/fp127/pack0.37 ns0.36 ns .. 0.38 ns
field unpackfp127field/fp127/unpack0.74 ns0.73 ns .. 0.75 ns
point add, throughputxoradd/xor-sha256/xor 32B, 8 accumulators0.51 ns0.50 ns .. 0.51 ns
point add, throughputgf2_127group.add/binary.127/mode=throughput307 ns307 ns .. 308 ns
point add, throughputgf2_127-lambdagroup.add/binary-lambda.127/mode=throughput249 ns247 ns .. 250 ns
point add, throughputgf2_127-wgroup.add/binary-w.127/mode=throughput249 ns247 ns .. 250 ns
point add, throughputgf2_127-ugroup.add/binary-u.127/mode=throughput220 ns219 ns .. 220 ns
point add, throughputgf2_109group.add/binary.109/mode=throughput676 ns675 ns .. 677 ns
point add, throughputgf2_109-lambdagroup.add/binary-lambda.109/mode=throughput545 ns543 ns .. 546 ns
point add, throughputgf2_109-wgroup.add/binary-w.109/mode=throughput541 ns541 ns .. 542 ns
point add, throughputgf2_109-ugroup.add/binary-u.109/mode=throughput488 ns487 ns .. 489 ns
point add, throughputgf2_122group.add/binary.122/mode=throughput390 ns389 ns .. 390 ns
point add, throughputgf2_122-lambdagroup.add/binary-lambda.122/mode=throughput307 ns306 ns .. 308 ns
point add, throughputgf2_122-wgroup.add/binary-w.122/mode=throughput307 ns307 ns .. 307 ns
point add, throughputgf2_122-ugroup.add/binary-u.122/mode=throughput277 ns276 ns .. 278 ns
point add, throughputgf2_122-glsgroup.add/binary.122-gls/mode=throughput370 ns369 ns .. 371 ns
point add, throughputgf2_122-gls-lambdagroup.add/binary-lambda.122-gls/mode=throughput310 ns309 ns .. 311 ns
point add, throughputgf2_122-gls-wgroup.add/binary-w.122-gls/mode=throughput310 ns309 ns .. 311 ns
point add, throughputgf2_122-gls-ugroup.add/binary-u.122-gls/mode=throughput276 ns275 ns .. 277 ns
point add, throughputedwards127group.add/edwards.127/mode=throughput26.9 ns26.8 ns .. 27.0 ns
point add, throughputweier127group.add/weier.127/mode=throughput58.1 ns57.9 ns .. 58.2 ns
point add, throughputweier127-jacobiangroup.add/weier-jacobian.127/mode=throughput47.3 ns47.3 ns .. 47.4 ns
point add, latencyxoradd/xor-sha256/xor 32B, 1 accumulator0.21 ns0.20 ns .. 0.21 ns
point add, latencygf2_127group.add/binary.127/mode=latency307 ns306 ns .. 307 ns
point add, latencygf2_127-lambdagroup.add/binary-lambda.127/mode=latency253 ns251 ns .. 256 ns
point add, latencygf2_127-wgroup.add/binary-w.127/mode=latency253 ns252 ns .. 255 ns
point add, latencygf2_127-ugroup.add/binary-u.127/mode=latency222 ns222 ns .. 223 ns
point add, latencygf2_109group.add/binary.109/mode=latency676 ns675 ns .. 677 ns
point add, latencygf2_109-lambdagroup.add/binary-lambda.109/mode=latency549 ns549 ns .. 550 ns
point add, latencygf2_109-wgroup.add/binary-w.109/mode=latency550 ns549 ns .. 551 ns
point add, latencygf2_109-ugroup.add/binary-u.109/mode=latency494 ns494 ns .. 495 ns
point add, latencygf2_122group.add/binary.122/mode=latency393 ns393 ns .. 394 ns
point add, latencygf2_122-lambdagroup.add/binary-lambda.122/mode=latency309 ns308 ns .. 309 ns
point add, latencygf2_122-wgroup.add/binary-w.122/mode=latency310 ns309 ns .. 311 ns
point add, latencygf2_122-ugroup.add/binary-u.122/mode=latency280 ns279 ns .. 281 ns
point add, latencygf2_122-glsgroup.add/binary.122-gls/mode=latency373 ns372 ns .. 374 ns
point add, latencygf2_122-gls-lambdagroup.add/binary-lambda.122-gls/mode=latency313 ns312 ns .. 314 ns
point add, latencygf2_122-gls-wgroup.add/binary-w.122-gls/mode=latency313 ns312 ns .. 314 ns
point add, latencygf2_122-gls-ugroup.add/binary-u.122-gls/mode=latency281 ns279 ns .. 284 ns
point add, latencyedwards127group.add/edwards.127/mode=latency32.5 ns32.4 ns .. 32.7 ns
point add, latencyweier127group.add/weier.127/mode=latency63.2 ns63.0 ns .. 63.5 ns
point add, latencyweier127-jacobiangroup.add/weier-jacobian.127/mode=latency55.3 ns55.2 ns .. 55.4 ns
point subtractedwards127group.sub/edwards.127/mode=throughput28.8 ns28.8 ns .. 28.9 ns
point subtractweier127group.sub/weier.127/mode=throughput58.8 ns58.6 ns .. 58.9 ns
point subtractweier127-jacobiangroup.sub/weier-jacobian.127/mode=throughput48.6 ns48.5 ns .. 48.7 ns
point negategf2_127negate/gf2_127/affine (y += x)0.63 ns0.62 ns .. 0.63 ns
point negategf2_127-lambdagroup.neg/binary-lambda.1270.56 ns0.56 ns .. 0.57 ns
point negategf2_127-wgroup.neg/binary-w.1270.57 ns0.56 ns .. 0.57 ns
point negategf2_127-ugroup.neg/binary-u.1270.62 ns0.61 ns .. 0.62 ns
point negategf2_109negate/gf2_109/affine (y += x)0.63 ns0.62 ns .. 0.63 ns
point negategf2_109-lambdagroup.neg/binary-lambda.1090.56 ns0.55 ns .. 0.56 ns
point negategf2_109-wgroup.neg/binary-w.1090.56 ns0.55 ns .. 0.56 ns
point negategf2_109-ugroup.neg/binary-u.1090.62 ns0.62 ns .. 0.62 ns
point negategf2_122negate/gf2_122/affine (y += x)0.63 ns0.63 ns .. 0.64 ns
point negategf2_122-lambdagroup.neg/binary-lambda.1220.55 ns0.55 ns .. 0.56 ns
point negategf2_122-wgroup.neg/binary-w.1220.56 ns0.55 ns .. 0.56 ns
point negategf2_122-ugroup.neg/binary-u.1220.62 ns0.62 ns .. 0.62 ns
point negategf2_122-glsgroup.neg/binary.122-gls1.24 ns1.23 ns .. 1.24 ns
point negategf2_122-gls-lambdagroup.neg/binary-lambda.122-gls0.58 ns0.57 ns .. 0.58 ns
point negategf2_122-gls-wgroup.neg/binary-w.122-gls0.56 ns0.56 ns .. 0.57 ns
point negategf2_122-gls-ugroup.neg/binary-u.122-gls0.62 ns0.62 ns .. 0.62 ns
point negateedwards127group.neg/edwards.1272.16 ns2.16 ns .. 2.17 ns
point negateweier127group.neg/weier.1271.18 ns1.18 ns .. 1.18 ns
point negateweier127-jacobiangroup.neg/weier-jacobian.1271.18 ns1.18 ns .. 1.18 ns
point prepare, one at a timegf2_127group.prepare/binary.127/mode=indep57.5 ns57.2 ns .. 57.9 ns
point prepare, one at a timegf2_127-lambdagroup.prepare/binary-lambda.127/mode=indep618 ns614 ns .. 622 ns
point prepare, one at a timegf2_127-wgroup.prepare/binary-w.127/mode=indep0.55 ns0.55 ns .. 0.56 ns
point prepare, one at a timegf2_127-ugroup.prepare/binary-u.127/mode=indep0.56 ns0.55 ns .. 0.56 ns
point prepare, one at a timegf2_109group.prepare/binary.109/mode=indep162 ns161 ns .. 162 ns
point prepare, one at a timegf2_109-lambdagroup.prepare/binary-lambda.109/mode=indep4.43 µs4.43 µs .. 4.44 µs
point prepare, one at a timegf2_109-wgroup.prepare/binary-w.109/mode=indep0.55 ns0.54 ns .. 0.55 ns
point prepare, one at a timegf2_109-ugroup.prepare/binary-u.109/mode=indep0.55 ns0.55 ns .. 0.56 ns
point prepare, one at a timegf2_122group.prepare/binary.122/mode=indep85.1 ns85.0 ns .. 85.3 ns
point prepare, one at a timegf2_122-lambdagroup.prepare/binary-lambda.122/mode=indep542 ns541 ns .. 543 ns
point prepare, one at a timegf2_122-wgroup.prepare/binary-w.122/mode=indep0.55 ns0.54 ns .. 0.55 ns
point prepare, one at a timegf2_122-ugroup.prepare/binary-u.122/mode=indep0.57 ns0.56 ns .. 0.58 ns
point prepare, one at a timegf2_122-glsgroup.prepare/binary.122-gls/mode=indep60.9 ns60.7 ns .. 61.1 ns
point prepare, one at a timegf2_122-gls-lambdagroup.prepare/binary-lambda.122-gls/mode=indep546 ns545 ns .. 548 ns
point prepare, one at a timegf2_122-gls-wgroup.prepare/binary-w.122-gls/mode=indep0.56 ns0.56 ns .. 0.56 ns
point prepare, one at a timegf2_122-gls-ugroup.prepare/binary-u.122-gls/mode=indep0.55 ns0.55 ns .. 0.56 ns
point prepare, one at a timeedwards127group.prepare/edwards.127/mode=indep635 ns634 ns .. 637 ns
point prepare, one at a timeweier127group.prepare/weier.127/mode=indep0.79 ns0.79 ns .. 0.80 ns
point prepare, one at a timeweier127-jacobiangroup.prepare/weier-jacobian.127/mode=indep0.80 ns0.79 ns .. 0.80 ns
point prepare, batchedgf2_127group.prepare/binary.127/mode=batch,n=102455.2 ns55.1 ns .. 55.3 ns
point prepare, batchedgf2_127-lambdagroup.prepare/binary-lambda.127/mode=batch,n=1024120 ns119 ns .. 120 ns
point prepare, batchedgf2_127-wgroup.prepare/binary-w.127/mode=batch,n=10241.28 ns1.27 ns .. 1.30 ns
point prepare, batchedgf2_127-ugroup.prepare/binary-u.127/mode=batch,n=10241.32 ns1.31 ns .. 1.33 ns
point prepare, batchedgf2_109group.prepare/binary.109/mode=batch,n=1024160 ns159 ns .. 160 ns
point prepare, batchedgf2_109-lambdagroup.prepare/binary-lambda.109/mode=batch,n=1024245 ns245 ns .. 246 ns
point prepare, batchedgf2_109-wgroup.prepare/binary-w.109/mode=batch,n=10241.24 ns1.23 ns .. 1.26 ns
point prepare, batchedgf2_109-ugroup.prepare/binary-u.109/mode=batch,n=10241.26 ns1.24 ns .. 1.28 ns
point prepare, batchedgf2_122group.prepare/binary.122/mode=batch,n=102484.3 ns84.2 ns .. 84.4 ns
point prepare, batchedgf2_122-lambdagroup.prepare/binary-lambda.122/mode=batch,n=1024152 ns151 ns .. 152 ns
point prepare, batchedgf2_122-wgroup.prepare/binary-w.122/mode=batch,n=10241.25 ns1.23 ns .. 1.27 ns
point prepare, batchedgf2_122-ugroup.prepare/binary-u.122/mode=batch,n=10241.31 ns1.29 ns .. 1.34 ns
point prepare, batchedgf2_122-glsgroup.prepare/binary.122-gls/mode=batch,n=102461.2 ns61.0 ns .. 61.4 ns
point prepare, batchedgf2_122-gls-lambdagroup.prepare/binary-lambda.122-gls/mode=batch,n=1024153 ns153 ns .. 154 ns
point prepare, batchedgf2_122-gls-wgroup.prepare/binary-w.122-gls/mode=batch,n=10241.27 ns1.26 ns .. 1.28 ns
point prepare, batchedgf2_122-gls-ugroup.prepare/binary-u.122-gls/mode=batch,n=10241.29 ns1.28 ns .. 1.30 ns
point prepare, batchededwards127group.prepare/edwards.127/mode=batch,n=102438.0 ns37.9 ns .. 38.1 ns
point prepare, batchedweier127group.prepare/weier.127/mode=batch,n=10240.87 ns0.87 ns .. 0.87 ns
point prepare, batchedweier127-jacobiangroup.prepare/weier-jacobian.127/mode=batch,n=10240.88 ns0.87 ns .. 0.88 ns
is identitygf2_127group.is_identity/binary.1270.87 ns0.86 ns .. 0.87 ns
is identitygf2_127-lambdagroup.is_identity/binary-lambda.1270.81 ns0.81 ns .. 0.82 ns
is identitygf2_127-wgroup.is_identity/binary-w.1270.80 ns0.80 ns .. 0.80 ns
is identitygf2_127-ugroup.is_identity/binary-u.1270.79 ns0.78 ns .. 0.79 ns
is identitygf2_109group.is_identity/binary.1090.95 ns0.95 ns .. 0.95 ns
is identitygf2_109-lambdagroup.is_identity/binary-lambda.1090.89 ns0.89 ns .. 0.89 ns
is identitygf2_109-wgroup.is_identity/binary-w.1090.89 ns0.89 ns .. 0.89 ns
is identitygf2_109-ugroup.is_identity/binary-u.1090.89 ns0.89 ns .. 0.89 ns
is identitygf2_122group.is_identity/binary.1220.99 ns0.99 ns .. 0.99 ns
is identitygf2_122-lambdagroup.is_identity/binary-lambda.1220.98 ns0.98 ns .. 0.98 ns
is identitygf2_122-wgroup.is_identity/binary-w.1220.99 ns0.99 ns .. 1.00 ns
is identitygf2_122-ugroup.is_identity/binary-u.1221.00 ns1.00 ns .. 1.01 ns
is identitygf2_122-glsgroup.is_identity/binary.122-gls0.99 ns0.99 ns .. 1.00 ns
is identitygf2_122-gls-lambdagroup.is_identity/binary-lambda.122-gls1.02 ns1.02 ns .. 1.03 ns
is identitygf2_122-gls-wgroup.is_identity/binary-w.122-gls0.99 ns0.99 ns .. 0.99 ns
is identitygf2_122-gls-ugroup.is_identity/binary-u.122-gls1.01 ns1.00 ns .. 1.02 ns
is identityedwards127group.is_identity/edwards.1271.12 ns1.12 ns .. 1.12 ns
is identityweier127group.is_identity/weier.1270.40 ns0.40 ns .. 0.40 ns
is identityweier127-jacobiangroup.is_identity/weier-jacobian.1270.40 ns0.40 ns .. 0.40 ns
equals addend, matchedwards127group.equals/edwards.127/mode=match5.59 ns5.56 ns .. 5.63 ns
equals addend, matchweier127group.equals/weier.127/mode=match5.93 ns5.91 ns .. 5.95 ns
equals addend, matchweier127-jacobiangroup.equals/weier-jacobian.127/mode=match13.3 ns13.3 ns .. 13.4 ns
equals addend, mismatchgf2_127group.equals/binary.127/mode=mismatch54.7 ns54.6 ns .. 55.0 ns
equals addend, mismatchgf2_127-lambdagroup.equals/binary-lambda.127/mode=mismatch30.6 ns30.4 ns .. 30.8 ns
equals addend, mismatchgf2_127-wgroup.equals/binary-w.127/mode=mismatch30.0 ns29.9 ns .. 30.2 ns
equals addend, mismatchgf2_127-ugroup.equals/binary-u.127/mode=mismatch89.9 ns89.6 ns .. 90.3 ns
equals addend, mismatchgf2_109group.equals/binary.109/mode=mismatch122 ns121 ns .. 122 ns
equals addend, mismatchgf2_109-lambdagroup.equals/binary-lambda.109/mode=mismatch62.5 ns62.4 ns .. 62.6 ns
equals addend, mismatchgf2_109-wgroup.equals/binary-w.109/mode=mismatch62.4 ns62.3 ns .. 62.5 ns
equals addend, mismatchgf2_109-ugroup.equals/binary-u.109/mode=mismatch184 ns183 ns .. 184 ns
equals addend, mismatchgf2_122group.equals/binary.122/mode=mismatch76.5 ns76.4 ns .. 76.6 ns
equals addend, mismatchgf2_122-lambdagroup.equals/binary-lambda.122/mode=mismatch42.8 ns42.7 ns .. 42.8 ns
equals addend, mismatchgf2_122-wgroup.equals/binary-w.122/mode=mismatch42.9 ns42.8 ns .. 42.9 ns
equals addend, mismatchgf2_122-ugroup.equals/binary-u.122/mode=mismatch119 ns119 ns .. 119 ns
equals addend, mismatchgf2_122-glsgroup.equals/binary.122-gls/mode=mismatch77.1 ns76.9 ns .. 77.3 ns
equals addend, mismatchgf2_122-gls-lambdagroup.equals/binary-lambda.122-gls/mode=mismatch43.8 ns43.6 ns .. 43.9 ns
equals addend, mismatchgf2_122-gls-wgroup.equals/binary-w.122-gls/mode=mismatch43.0 ns42.9 ns .. 43.1 ns
equals addend, mismatchgf2_122-gls-ugroup.equals/binary-u.122-gls/mode=mismatch116 ns116 ns .. 117 ns
equals addend, mismatchedwards127group.equals/edwards.127/mode=mismatch3.16 ns3.16 ns .. 3.17 ns
equals addend, mismatchweier127group.equals/weier.127/mode=mismatch3.35 ns3.34 ns .. 3.36 ns
equals addend, mismatchweier127-jacobiangroup.equals/weier-jacobian.127/mode=mismatch6.62 ns6.60 ns .. 6.63 ns
encode, one at a timegf2_127group.encode/binary.127/mode=indep709 ns707 ns .. 711 ns
encode, one at a timegf2_127-lambdagroup.encode/binary-lambda.127/mode=indep671 ns667 ns .. 674 ns
encode, one at a timegf2_127-wgroup.encode/binary-w.127/mode=indep655 ns650 ns .. 661 ns
encode, one at a timegf2_127-ugroup.encode/binary-u.127/mode=indep638 ns637 ns .. 639 ns
encode, one at a timegf2_109group.encode/binary.109/mode=indep4.70 µs4.69 µs .. 4.71 µs
encode, one at a timegf2_109-lambdagroup.encode/binary-lambda.109/mode=indep4.57 µs4.57 µs .. 4.58 µs
encode, one at a timegf2_109-wgroup.encode/binary-w.109/mode=indep4.57 µs4.56 µs .. 4.57 µs
encode, one at a timegf2_109-ugroup.encode/binary-u.109/mode=indep4.53 µs4.52 µs .. 4.53 µs
encode, one at a timegf2_122group.encode/binary.122/mode=indep672 ns671 ns .. 673 ns
encode, one at a timegf2_122-lambdagroup.encode/binary-lambda.122/mode=indep624 ns623 ns .. 625 ns
encode, one at a timegf2_122-wgroup.encode/binary-w.122/mode=indep590 ns589 ns .. 591 ns
encode, one at a timegf2_122-ugroup.encode/binary-u.122/mode=indep610 ns607 ns .. 613 ns
encode, one at a timegf2_122-glsgroup.encode/binary.122-gls/mode=indep654 ns653 ns .. 655 ns
encode, one at a timegf2_122-gls-lambdagroup.encode/binary-lambda.122-gls/mode=indep639 ns636 ns .. 643 ns
encode, one at a timegf2_122-gls-wgroup.encode/binary-w.122-gls/mode=indep595 ns592 ns .. 597 ns
encode, one at a timegf2_122-gls-ugroup.encode/binary-u.122-gls/mode=indep598 ns596 ns .. 600 ns
encode, one at a timeedwards127group.encode/edwards.127/mode=indep602 ns600 ns .. 603 ns
encode, one at a timeweier127group.encode/weier.127/mode=indep587 ns586 ns .. 587 ns
encode, one at a timeweier127-jacobiangroup.encode/weier-jacobian.127/mode=indep593 ns592 ns .. 594 ns
encode, batchedgf2_127group.encode/binary.127/mode=batch,n=1024214 ns213 ns .. 215 ns
encode, batchedgf2_127-lambdagroup.encode/binary-lambda.127/mode=batch,n=1024172 ns171 ns .. 174 ns
encode, batchedgf2_127-wgroup.encode/binary-w.127/mode=batch,n=1024148 ns148 ns .. 149 ns
encode, batchedgf2_127-ugroup.encode/binary-u.127/mode=batch,n=1024150 ns150 ns .. 150 ns
encode, batchedgf2_109group.encode/binary.109/mode=batch,n=1024500 ns499 ns .. 500 ns
encode, batchedgf2_109-lambdagroup.encode/binary-lambda.109/mode=batch,n=1024371 ns370 ns .. 372 ns
encode, batchedgf2_109-wgroup.encode/binary-w.109/mode=batch,n=1024343 ns343 ns .. 344 ns
encode, batchedgf2_109-ugroup.encode/binary-u.109/mode=batch,n=1024343 ns343 ns .. 344 ns
encode, batchedgf2_122group.encode/binary.122/mode=batch,n=1024286 ns285 ns .. 286 ns
encode, batchedgf2_122-lambdagroup.encode/binary-lambda.122/mode=batch,n=1024234 ns233 ns .. 234 ns
encode, batchedgf2_122-wgroup.encode/binary-w.122/mode=batch,n=1024200 ns198 ns .. 201 ns
encode, batchedgf2_122-ugroup.encode/binary-u.122/mode=batch,n=1024202 ns201 ns .. 203 ns
encode, batchedgf2_122-glsgroup.encode/binary.122-gls/mode=batch,n=1024270 ns269 ns .. 272 ns
encode, batchedgf2_122-gls-lambdagroup.encode/binary-lambda.122-gls/mode=batch,n=1024242 ns241 ns .. 243 ns
encode, batchedgf2_122-gls-wgroup.encode/binary-w.122-gls/mode=batch,n=1024198 ns197 ns .. 199 ns
encode, batchedgf2_122-gls-ugroup.encode/binary-u.122-gls/mode=batch,n=1024200 ns200 ns .. 201 ns
encode, batchededwards127group.encode/edwards.127/mode=batch,n=102430.1 ns30.1 ns .. 30.2 ns
encode, batchedweier127group.encode/weier.127/mode=batch,n=102415.9 ns15.9 ns .. 16.0 ns
encode, batchedweier127-jacobiangroup.encode/weier-jacobian.127/mode=batch,n=102422.5 ns22.5 ns .. 22.6 ns
decode, one at a timegf2_127group.decode/binary.127/mode=indep659 ns656 ns .. 662 ns
decode, one at a timegf2_127-lambdagroup.decode/binary-lambda.127/mode=indep678 ns675 ns .. 682 ns
decode, one at a timegf2_127-wgroup.decode/binary-w.127/mode=indep683 ns680 ns .. 686 ns
decode, one at a timegf2_127-ugroup.decode/binary-u.127/mode=indep731 ns730 ns .. 732 ns
decode, one at a timegf2_109group.decode/binary.109/mode=indep4.60 µs4.59 µs .. 4.60 µs
decode, one at a timegf2_109-lambdagroup.decode/binary-lambda.109/mode=indep4.61 µs4.60 µs .. 4.62 µs
decode, one at a timegf2_109-wgroup.decode/binary-w.109/mode=indep4.60 µs4.60 µs .. 4.61 µs
decode, one at a timegf2_109-ugroup.decode/binary-u.109/mode=indep4.74 µs4.73 µs .. 4.75 µs
decode, one at a timegf2_122group.decode/binary.122/mode=indep645 ns645 ns .. 646 ns
decode, one at a timegf2_122-lambdagroup.decode/binary-lambda.122/mode=indep644 ns643 ns .. 645 ns
decode, one at a timegf2_122-wgroup.decode/binary-w.122/mode=indep613 ns612 ns .. 614 ns
decode, one at a timegf2_122-ugroup.decode/binary-u.122/mode=indep707 ns705 ns .. 710 ns
decode, one at a timegf2_122-glsgroup.decode/binary.122-gls/mode=indep649 ns645 ns .. 653 ns
decode, one at a timegf2_122-gls-lambdagroup.decode/binary-lambda.122-gls/mode=indep633 ns632 ns .. 635 ns
decode, one at a timegf2_122-gls-wgroup.decode/binary-w.122-gls/mode=indep598 ns596 ns .. 599 ns
decode, one at a timegf2_122-gls-ugroup.decode/binary-u.122-gls/mode=indep673 ns672 ns .. 675 ns
decode, one at a timeedwards127group.decode/edwards.127/mode=indep575 ns573 ns .. 577 ns
decode, one at a timeweier127group.decode/weier.127/mode=indep574 ns573 ns .. 575 ns
decode, one at a timeweier127-jacobiangroup.decode/weier-jacobian.127/mode=indep574 ns573 ns .. 575 ns
decode, batchedgf2_127group.decode/binary.127/mode=batch,n=1024167 ns165 ns .. 168 ns
decode, batchedgf2_127-lambdagroup.decode/binary-lambda.127/mode=batch,n=1024163 ns162 ns .. 164 ns
decode, batchedgf2_127-wgroup.decode/binary-w.127/mode=batch,n=1024170 ns169 ns .. 170 ns
decode, batchedgf2_127-ugroup.decode/binary-u.127/mode=batch,n=1024227 ns227 ns .. 227 ns
decode, batchedgf2_109group.decode/binary.109/mode=batch,n=1024421 ns420 ns .. 422 ns
decode, batchedgf2_109-lambdagroup.decode/binary-lambda.109/mode=batch,n=1024424 ns422 ns .. 426 ns
decode, batchedgf2_109-wgroup.decode/binary-w.109/mode=batch,n=1024400 ns400 ns .. 401 ns
decode, batchedgf2_109-ugroup.decode/binary-u.109/mode=batch,n=1024519 ns519 ns .. 520 ns
decode, batchedgf2_122group.decode/binary.122/mode=batch,n=1024256 ns256 ns .. 256 ns
decode, batchedgf2_122-lambdagroup.decode/binary-lambda.122/mode=batch,n=1024256 ns255 ns .. 257 ns
decode, batchedgf2_122-wgroup.decode/binary-w.122/mode=batch,n=1024216 ns214 ns .. 218 ns
decode, batchedgf2_122-ugroup.decode/binary-u.122/mode=batch,n=1024309 ns308 ns .. 310 ns
decode, batchedgf2_122-glsgroup.decode/binary.122-gls/mode=batch,n=1024229 ns228 ns .. 230 ns
decode, batchedgf2_122-gls-lambdagroup.decode/binary-lambda.122-gls/mode=batch,n=1024228 ns227 ns .. 228 ns
decode, batchedgf2_122-gls-wgroup.decode/binary-w.122-gls/mode=batch,n=1024203 ns202 ns .. 204 ns
decode, batchedgf2_122-gls-ugroup.decode/binary-u.122-gls/mode=batch,n=1024272 ns271 ns .. 273 ns
decode, batchededwards127group.decode/edwards.127/mode=batch,n=1024576 ns575 ns .. 578 ns
decode, batchedweier127group.decode/weier.127/mode=batch,n=1024573 ns572 ns .. 574 ns
decode, batchedweier127-jacobiangroup.decode/weier-jacobian.127/mode=batch,n=1024574 ns573 ns .. 575 ns
hash to curve, one at a timegf2_127hash_to_curve/gf2_127/pornin map x1966 ns958 ns .. 974 ns
hash to curve, one at a timegf2_127-lambdah2c/binary-lambda.127/mode=indep1.30 µs1.29 µs .. 1.31 µs
hash to curve, one at a timegf2_127-wh2c/binary-w.127/mode=indep1.41 µs1.40 µs .. 1.42 µs
hash to curve, one at a timegf2_127-uh2c/binary-u.127/mode=indep1.51 µs1.50 µs .. 1.51 µs
hash to curve, one at a timegf2_109hash_to_curve/gf2_109/pornin map x15.27 µs5.25 µs .. 5.28 µs
hash to curve, one at a timegf2_109-lambdah2c/binary-lambda.109/mode=indep9.08 µs9.07 µs .. 9.09 µs
hash to curve, one at a timegf2_109-wh2c/binary-w.109/mode=indep8.98 µs8.96 µs .. 9.00 µs
hash to curve, one at a timegf2_109-uh2c/binary-u.109/mode=indep9.08 µs9.07 µs .. 9.10 µs
hash to curve, one at a timegf2_122hash_to_curve/gf2_122/pornin map x11.08 µs1.07 µs .. 1.09 µs
hash to curve, one at a timegf2_122-lambdah2c/binary-lambda.122/mode=indep1.27 µs1.27 µs .. 1.27 µs
hash to curve, one at a timegf2_122-wh2c/binary-w.122/mode=indep1.24 µs1.24 µs .. 1.24 µs
hash to curve, one at a timegf2_122-uh2c/binary-u.122/mode=indep1.38 µs1.36 µs .. 1.40 µs
hash to curve, one at a timegf2_122-glshash_to_curve/gf2_122-gls/pornin map x11.02 µs1.01 µs .. 1.03 µs
hash to curve, one at a timegf2_122-gls-lambdah2c/binary-lambda.122-gls/mode=indep1.26 µs1.26 µs .. 1.27 µs
hash to curve, one at a timegf2_122-gls-wh2c/binary-w.122-gls/mode=indep1.24 µs1.24 µs .. 1.24 µs
hash to curve, one at a timegf2_122-gls-uh2c/binary-u.122-gls/mode=indep1.31 µs1.31 µs .. 1.31 µs
hash to curve, one at a timeedwards127h2c/edwards.127/mode=indep1.25 µs1.25 µs .. 1.25 µs
hash to curve, one at a timeweier127h2c/weier.127/mode=indep1.22 µs1.22 µs .. 1.22 µs
hash to curve, one at a timeweier127-jacobianh2c/weier-jacobian.127/mode=indep1.22 µs1.21 µs .. 1.22 µs
hash to curve, batchedgf2_127h2c/binary.127/mode=batch,n=1024347 ns345 ns .. 348 ns
hash to curve, batchedgf2_127-lambdah2c/binary-lambda.127/mode=batch,n=1024347 ns345 ns .. 349 ns
hash to curve, batchedgf2_127-wh2c/binary-w.127/mode=batch,n=1024391 ns389 ns .. 393 ns
hash to curve, batchedgf2_127-uh2c/binary-u.127/mode=batch,n=1024452 ns450 ns .. 453 ns
hash to curve, batchedgf2_109h2c/binary.109/mode=batch,n=1024814 ns813 ns .. 816 ns
hash to curve, batchedgf2_109-lambdah2c/binary-lambda.109/mode=batch,n=1024814 ns813 ns .. 815 ns
hash to curve, batchedgf2_109-wh2c/binary-w.109/mode=batch,n=1024805 ns804 ns .. 807 ns
hash to curve, batchedgf2_109-uh2c/binary-u.109/mode=batch,n=1024927 ns926 ns .. 928 ns
hash to curve, batchedgf2_122h2c/binary.122/mode=batch,n=1024488 ns487 ns .. 489 ns
hash to curve, batchedgf2_122-lambdah2c/binary-lambda.122/mode=batch,n=1024487 ns486 ns .. 488 ns
hash to curve, batchedgf2_122-wh2c/binary-w.122/mode=batch,n=1024458 ns457 ns .. 460 ns
hash to curve, batchedgf2_122-uh2c/binary-u.122/mode=batch,n=1024555 ns550 ns .. 560 ns
hash to curve, batchedgf2_122-glsh2c/binary.122-gls/mode=batch,n=1024456 ns455 ns .. 458 ns
hash to curve, batchedgf2_122-gls-lambdah2c/binary-lambda.122-gls/mode=batch,n=1024455 ns453 ns .. 457 ns
hash to curve, batchedgf2_122-gls-wh2c/binary-w.122-gls/mode=batch,n=1024444 ns442 ns .. 446 ns
hash to curve, batchedgf2_122-gls-uh2c/binary-u.122-gls/mode=batch,n=1024513 ns511 ns .. 515 ns
hash to curve, batchededwards127h2c/edwards.127/mode=batch,n=10241.25 µs1.25 µs .. 1.26 µs
hash to curve, batchedweier127h2c/weier.127/mode=batch,n=10241.23 µs1.22 µs .. 1.23 µs
hash to curve, batchedweier127-jacobianh2c/weier-jacobian.127/mode=batch,n=10241.22 µs1.22 µs .. 1.22 µs
hash to addend, one at a timegf2_127-lambdahash_to_curve/gf2_127-lambda/pornin map x1 to (x, λ)889 ns885 ns .. 894 ns
hash to addend, one at a timegf2_127-whash_to_curve/gf2_127-w/pornin map x1 to (x, λ)892 ns889 ns .. 897 ns
hash to addend, one at a timegf2_127-uhash_to_curve/gf2_127-u/pornin map x1 to (u, v)939 ns934 ns .. 944 ns
hash to addend, one at a timegf2_109-lambdahash_to_curve/gf2_109-lambda/pornin map x1 to (x, λ)5.09 µs5.07 µs .. 5.11 µs
hash to addend, one at a timegf2_109-whash_to_curve/gf2_109-w/pornin map x1 to (x, λ)5.11 µs5.08 µs .. 5.15 µs
hash to addend, one at a timegf2_109-uhash_to_curve/gf2_109-u/pornin map x1 to (u, v)5.19 µs5.18 µs .. 5.21 µs
hash to addend, one at a timegf2_122-lambdahash_to_curve/gf2_122-lambda/pornin map x1 to (x, λ)925 ns924 ns .. 926 ns
hash to addend, one at a timegf2_122-whash_to_curve/gf2_122-w/pornin map x1 to (x, λ)929 ns925 ns .. 935 ns
hash to addend, one at a timegf2_122-uhash_to_curve/gf2_122-u/pornin map x1 to (u, v)1.00 µs1.00 µs .. 1.01 µs
hash to addend, one at a timegf2_122-gls-lambdahash_to_curve/gf2_122-gls-lambda/pornin map x1 to (x, λ)941 ns937 ns .. 946 ns
hash to addend, one at a timegf2_122-gls-whash_to_curve/gf2_122-gls-w/pornin map x1 to (x, λ)949 ns944 ns .. 953 ns
hash to addend, one at a timegf2_122-gls-uhash_to_curve/gf2_122-gls-u/pornin map x1 to (u, v)1.01 µs1.01 µs .. 1.02 µs
hash to addend, batchedgf2_127-lambdahash_to_curve/gf2_127-lambda/try-and-increment to (x, λ), batched322 ns320 ns .. 323 ns
hash to addend, batchedgf2_127-whash_to_curve/gf2_127-w/pornin map x1 to (x, λ), batched360 ns358 ns .. 363 ns
hash to addend, batchedgf2_127-uhash_to_curve/gf2_127-u/pornin map x1 to (u, v), batched426 ns425 ns .. 428 ns
hash to addend, batchedgf2_109-lambdahash_to_curve/gf2_109-lambda/try-and-increment to (x, λ), batched834 ns826 ns .. 842 ns
hash to addend, batchedgf2_109-whash_to_curve/gf2_109-w/pornin map x1 to (x, λ), batched852 ns850 ns .. 855 ns
hash to addend, batchedgf2_109-uhash_to_curve/gf2_109-u/pornin map x1 to (u, v), batched986 ns983 ns .. 988 ns
hash to addend, batchedgf2_122-lambdahash_to_curve/gf2_122-lambda/try-and-increment to (x, λ), batched485 ns484 ns .. 485 ns
hash to addend, batchedgf2_122-whash_to_curve/gf2_122-w/pornin map x1 to (x, λ), batched501 ns500 ns .. 502 ns
hash to addend, batchedgf2_122-uhash_to_curve/gf2_122-u/pornin map x1 to (u, v), batched585 ns584 ns .. 586 ns
hash to addend, batchedgf2_122-gls-lambdahash_to_curve/gf2_122-gls-lambda/try-and-increment to (x, λ), batched468 ns465 ns .. 472 ns
hash to addend, batchedgf2_122-gls-whash_to_curve/gf2_122-gls-w/pornin map x1 to (x, λ), batched509 ns505 ns .. 514 ns
hash to addend, batchedgf2_122-gls-uhash_to_curve/gf2_122-gls-u/pornin map x1 to (u, v), batched580 ns578 ns .. 583 ns

Coverage

Benchmarks per hot-path operation and family; an empty cell was not measured.

curvehash to curveprepareaddsubtractnegateis identityequals addendencodedecodeRIBLT
encodecellspeel
baseline
xorSHA-256 digests XORed: no group, 32 bytes2511
xor-siphashSipHash-2-4 hashes XORed: no group, 8 bytes1011
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas22321122611
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators22211122111
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine22211122111
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes22211122111
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended22321122111
gf2_122-lambdaincompleteλ-projective22211122111
gf2_122-wincompleteλ-projective, w codec22211122111
gf2_122-uunscaled (X:S:Z), w codec22211122111
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended22311122111
gf2_122-gls-lambdaincompleteλ-projective22211122111
gf2_122-gls-wincompleteλ-projective, w codec22211122111
gf2_122-gls-uunscaled (X:S:Z), w codec22211122111
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended22321122111
gf2_109-lambdaincompleteλ-projective22211122111
gf2_109-wincompleteλ-projective, w codec22211122111
gf2_109-uunscaled (X:S:Z), w codec22211122111
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached5431212448523
weier127short Weierstrass, projective += affine442121244636
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine4421112448523
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached
weier107short Weierstrass, projective += affine
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached
weier61x2short Weierstrass, signed-x codec, projective += affine
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached
references, 32 and 33 bytes
ristretto255curve25519-dalek
secp256k1libsecp256k1

bold: the best of its column; italic, dotted: tied with the best within the confidence intervals; shading: ratio to the best, pale yellow at 1× to purple at 16× or more; grey: baseline, not compared.

All benchmarks

Every observation: a figure and a table per layer.

field

50 benchmarks
operationbenchmarkfamilymodetime95% CIunit
batch invertgf2_109/batch invert (product tree)gf2_109batch185 ns184 ns .. 186 nsper elem
batch invertgf2_122/batch invert (product tree)gf2_122batch113 ns112 ns .. 113 nsper elem
batch invertgf2_127/batch invert (product tree)gf2_127batch83.6 ns83.5 ns .. 83.8 nsper elem
batch invertfp127/batch invert (product tree)fp127batch9.51 ns9.45 ns .. 9.57 nsper elem
halftracegf2_109/halftracegf2_109per-element59.2 ns59.0 ns .. 59.4 nsper elem
halftracegf2_109/halftrace (byte tables)gf2_109per-element3.90 ns3.89 ns .. 3.92 nsper elem
halftracegf2_122/qsolve (z^2 + z = c, 2 base halftraces)gf2_122per-element3.89 ns3.88 ns .. 3.90 nsper elem
halftracegf2_127/halftracegf2_127per-element35.6 ns35.5 ns .. 35.7 nsper elem
halftracegf2_127/halftrace (byte tables)gf2_127per-element4.14 ns4.13 ns .. 4.14 nsper elem
halftracegf2_127/halftrace (nibble tables)gf2_127per-element24.9 ns24.9 ns .. 25.0 nsper elem
mul_u2gf2_122/mul_u2 (by a^2 = 1 + a) latency (dependent chain)gf2_122latency0.04 ns0.04 ns .. 0.04 nsper elem
mul_u2gf2_122/mul_u2 (by a^2 = 1 + a) throughput (8 chains)gf2_122throughput0.12 ns0.12 ns .. 0.12 nsper elem
packfp127/packfp127per-element0.37 ns0.36 ns .. 0.38 nsper elem
tracegf2_109/tracegf2_109per-element0.60 ns0.59 ns .. 0.60 nsper elem
tracegf2_122/tracegf2_122per-element0.40 ns0.40 ns .. 0.40 nsper elem
tracegf2_127/tracegf2_127per-element0.40 ns0.40 ns .. 0.40 nsper elem
unpackfp127/unpackfp127per-element0.74 ns0.73 ns .. 0.75 nsper elem
normalizegf2_109/normalize (to_u128)gf2_109per-element0.79 ns0.79 ns .. 0.79 nsper elem
normalizegf2_122/normalize (to_u128)gf2_122per-element1.39 ns1.38 ns .. 1.40 nsper elem
normalizegf2_127/normalize (to_u128)gf2_127per-element0.59 ns0.59 ns .. 0.59 nsper elem
negfp127/negfp127per-element0.98 ns0.98 ns .. 0.99 nsper elem
addfp127/addfp127per-element0.98 ns0.98 ns .. 0.99 nsper elem
squaregf2_109/square latency (dependent chain)gf2_109latency41.6 ns41.3 ns .. 41.8 nsper elem
squaregf2_109/square throughput (8 chains)gf2_109throughput37.9 ns37.6 ns .. 38.1 nsper elem
squaregf2_122/square latency (dependent chain)gf2_122latency9.06 ns9.03 ns .. 9.08 nsper elem
squaregf2_122/square throughput (8 chains)gf2_122throughput4.98 ns4.97 ns .. 4.99 nsper elem
squaregf2_127/square latency (dependent chain)gf2_127latency4.91 ns4.87 ns .. 4.94 nsper elem
squaregf2_127/square throughput (8 chains)gf2_127throughput4.10 ns4.09 ns .. 4.12 nsper elem
squarefp127/square latency (dependent chain)fp127latency4.28 ns4.26 ns .. 4.31 nsper elem
squarefp127/square throughput (8 chains)fp127throughput2.23 ns2.22 ns .. 2.24 nsper elem
sqrtgf2_109/sqrtgf2_109per-element35.2 ns35.1 ns .. 35.3 nsper elem
sqrtgf2_122/sqrtgf2_122per-element4.07 ns4.06 ns .. 4.08 nsper elem
sqrtgf2_127/sqrtgf2_127per-element5.49 ns5.48 ns .. 5.50 nsper elem
sqrtfp127/sqrt (x^(2^125))fp127per-element560 ns559 ns .. 561 nsper elem
mul_basegf2_122/mul_base (by a GF(2^61) constant) latency (dependent chain)gf2_122latency27.9 ns27.8 ns .. 27.9 nsper elem
mul_basegf2_122/mul_base (by a GF(2^61) constant) throughput (8 chains)gf2_122throughput24.2 ns24.2 ns .. 24.3 nsper elem
mulgf2_109/mul latency (dependent chain)gf2_109latency64.6 ns64.4 ns .. 64.9 nsper elem
mulgf2_109/mul throughput (8 chains)gf2_109throughput61.0 ns60.6 ns .. 61.3 nsper elem
mulgf2_122/mul latency (dependent chain)gf2_122latency39.9 ns39.8 ns .. 40.0 nsper elem
mulgf2_122/mul throughput (8 chains)gf2_122throughput37.9 ns37.8 ns .. 38.0 nsper elem
mulgf2_127/mul latency (dependent chain)gf2_127latency25.4 ns25.2 ns .. 25.7 nsper elem
mulgf2_127/mul throughput (8 chains)gf2_127throughput29.5 ns29.5 ns .. 29.6 nsper elem
mulfp127/mul latency (dependent chain)fp127latency4.22 ns4.20 ns .. 4.24 nsper elem
mulfp127/mul throughput (8 chains)fp127throughput2.56 ns2.55 ns .. 2.57 nsper elem
invertgf2_109/invertgf2_109per-element4.39 µs4.38 µs .. 4.40 µsper elem
invertgf2_122/invertgf2_122per-element504 ns503 ns .. 505 nsper elem
invertgf2_127/invertgf2_127per-element559 ns558 ns .. 560 nsper elem
invertfp127/invertfp127per-element576 ns575 ns .. 577 nsper elem
pow_p34fp127/pow_p34 (x^(2^125-1))fp127per-element579 ns575 ns .. 583 nsper elem
sqrt_ratiofp127/sqrt_ratiofp127per-element587 ns586 ns .. 589 nsper elem

group ops

253 benchmarks
operationbenchmarkfamilymodetime95% CIunit
preparebinary.109/mode=batch,n=1024gf2_109batch160 ns159 ns .. 160 nsper elem
preparebinary.109/mode=indepgf2_109per-element162 ns161 ns .. 162 nsper elem
preparebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch245 ns245 ns .. 246 nsper elem
preparebinary-lambda.109/mode=indepgf2_109-lambdaper-element4.43 µs4.43 µs .. 4.44 µsper elem
preparebinary-u.109/mode=batch,n=1024gf2_109-ubatch1.26 ns1.24 ns .. 1.28 nsper elem
preparebinary-u.109/mode=indepgf2_109-uper-element0.55 ns0.55 ns .. 0.56 nsper elem
preparebinary-w.109/mode=batch,n=1024gf2_109-wbatch1.24 ns1.23 ns .. 1.26 nsper elem
preparebinary-w.109/mode=indepgf2_109-wper-element0.55 ns0.54 ns .. 0.55 nsper elem
preparebinary.122/mode=batch,n=1024gf2_122batch84.3 ns84.2 ns .. 84.4 nsper elem
preparebinary.122/mode=indepgf2_122per-element85.1 ns85.0 ns .. 85.3 nsper elem
preparebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch61.2 ns61.0 ns .. 61.4 nsper elem
preparebinary.122-gls/mode=indepgf2_122-glsper-element60.9 ns60.7 ns .. 61.1 nsper elem
preparebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch153 ns153 ns .. 154 nsper elem
preparebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element546 ns545 ns .. 548 nsper elem
preparebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch1.29 ns1.28 ns .. 1.30 nsper elem
preparebinary-u.122-gls/mode=indepgf2_122-gls-uper-element0.55 ns0.55 ns .. 0.56 nsper elem
preparebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch1.27 ns1.26 ns .. 1.28 nsper elem
preparebinary-w.122-gls/mode=indepgf2_122-gls-wper-element0.56 ns0.56 ns .. 0.56 nsper elem
preparebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch152 ns151 ns .. 152 nsper elem
preparebinary-lambda.122/mode=indepgf2_122-lambdaper-element542 ns541 ns .. 543 nsper elem
preparebinary-u.122/mode=batch,n=1024gf2_122-ubatch1.31 ns1.29 ns .. 1.34 nsper elem
preparebinary-u.122/mode=indepgf2_122-uper-element0.57 ns0.56 ns .. 0.58 nsper elem
preparebinary-w.122/mode=batch,n=1024gf2_122-wbatch1.25 ns1.23 ns .. 1.27 nsper elem
preparebinary-w.122/mode=indepgf2_122-wper-element0.55 ns0.54 ns .. 0.55 nsper elem
preparebinary.127/mode=batch,n=1024gf2_127batch55.2 ns55.1 ns .. 55.3 nsper elem
preparebinary.127/mode=indepgf2_127per-element57.5 ns57.2 ns .. 57.9 nsper elem
preparebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch120 ns119 ns .. 120 nsper elem
preparebinary-lambda.127/mode=indepgf2_127-lambdaper-element618 ns614 ns .. 622 nsper elem
preparebinary-u.127/mode=batch,n=1024gf2_127-ubatch1.32 ns1.31 ns .. 1.33 nsper elem
preparebinary-u.127/mode=indepgf2_127-uper-element0.56 ns0.55 ns .. 0.56 nsper elem
preparebinary-w.127/mode=batch,n=1024gf2_127-wbatch1.28 ns1.27 ns .. 1.30 nsper elem
preparebinary-w.127/mode=indepgf2_127-wper-element0.55 ns0.55 ns .. 0.56 nsper elem
prepareedwards.127/mode=batch,n=1024edwards127batch38.0 ns37.9 ns .. 38.1 nsper elem
prepareedwards.127/mode=batch,n=64edwards127batch50.4 ns50.3 ns .. 50.5 nsper elem
prepareedwards.127/mode=batch,n=8edwards127batch124 ns124 ns .. 124 nsper elem
prepareedwards.127/mode=indepedwards127per-element635 ns634 ns .. 637 nsper elem
prepareweier.127/mode=batch,n=1024weier127batch0.87 ns0.87 ns .. 0.87 nsper elem
prepareweier.127/mode=batch,n=64weier127batch1.13 ns1.13 ns .. 1.14 nsper elem
prepareweier.127/mode=batch,n=8weier127batch1.33 ns1.32 ns .. 1.34 nsper elem
prepareweier.127/mode=indepweier127per-element0.79 ns0.79 ns .. 0.80 nsper elem
prepareweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch0.88 ns0.87 ns .. 0.88 nsper elem
prepareweier-jacobian.127/mode=batch,n=64weier127-jacobianbatch1.12 ns1.12 ns .. 1.13 nsper elem
prepareweier-jacobian.127/mode=batch,n=8weier127-jacobianbatch1.32 ns1.32 ns .. 1.33 nsper elem
prepareweier-jacobian.127/mode=indepweier127-jacobianper-element0.80 ns0.79 ns .. 0.80 nsper elem
addxor-sha256/xor 32B, 1 accumulatorxorlatency0.21 ns0.20 ns .. 0.21 nsper elem
addxor-sha256/xor 32B, 8 accumulatorsxorthroughput0.51 ns0.50 ns .. 0.51 nsper elem
addbinary.109/mode=latencygf2_109latency676 ns675 ns .. 677 nsper elem
addbinary.109/mode=throughputgf2_109throughput676 ns675 ns .. 677 nsper elem
addgf2_109/extended += affine, 8 accumulatorsgf2_109throughput833 ns832 ns .. 835 nsper elem
addbinary-lambda.109/mode=latencygf2_109-lambdalatency549 ns549 ns .. 550 nsper elem
addbinary-lambda.109/mode=throughputgf2_109-lambdathroughput545 ns543 ns .. 546 nsper elem
addbinary-u.109/mode=latencygf2_109-ulatency494 ns494 ns .. 495 nsper elem
addbinary-u.109/mode=throughputgf2_109-uthroughput488 ns487 ns .. 489 nsper elem
addbinary-w.109/mode=latencygf2_109-wlatency550 ns549 ns .. 551 nsper elem
addbinary-w.109/mode=throughputgf2_109-wthroughput541 ns541 ns .. 542 nsper elem
addbinary.122/mode=latencygf2_122latency393 ns393 ns .. 394 nsper elem
addbinary.122/mode=throughputgf2_122throughput390 ns389 ns .. 390 nsper elem
addgf2_122/extended += affine, 8 accumulatorsgf2_122throughput485 ns483 ns .. 488 nsper elem
addbinary.122-gls/mode=latencygf2_122-glslatency373 ns372 ns .. 374 nsper elem
addbinary.122-gls/mode=throughputgf2_122-glsthroughput370 ns369 ns .. 371 nsper elem
addgf2_122-gls/extended += affine, 8 accumulatorsgf2_122-glsthroughput435 ns433 ns .. 436 nsper elem
addbinary-lambda.122-gls/mode=latencygf2_122-gls-lambdalatency313 ns312 ns .. 314 nsper elem
addbinary-lambda.122-gls/mode=throughputgf2_122-gls-lambdathroughput310 ns309 ns .. 311 nsper elem
addbinary-u.122-gls/mode=latencygf2_122-gls-ulatency281 ns279 ns .. 284 nsper elem
addbinary-u.122-gls/mode=throughputgf2_122-gls-uthroughput276 ns275 ns .. 277 nsper elem
addbinary-w.122-gls/mode=latencygf2_122-gls-wlatency313 ns312 ns .. 314 nsper elem
addbinary-w.122-gls/mode=throughputgf2_122-gls-wthroughput310 ns309 ns .. 311 nsper elem
addbinary-lambda.122/mode=latencygf2_122-lambdalatency309 ns308 ns .. 309 nsper elem
addbinary-lambda.122/mode=throughputgf2_122-lambdathroughput307 ns306 ns .. 308 nsper elem
addbinary-u.122/mode=latencygf2_122-ulatency280 ns279 ns .. 281 nsper elem
addbinary-u.122/mode=throughputgf2_122-uthroughput277 ns276 ns .. 278 nsper elem
addbinary-w.122/mode=latencygf2_122-wlatency310 ns309 ns .. 311 nsper elem
addbinary-w.122/mode=throughputgf2_122-wthroughput307 ns307 ns .. 307 nsper elem
addbinary.127/mode=latencygf2_127latency307 ns306 ns .. 307 nsper elem
addbinary.127/mode=throughputgf2_127throughput307 ns307 ns .. 308 nsper elem
addgf2_127/extended += affine, 8 accumulatorsgf2_127throughput385 ns383 ns .. 387 nsper elem
addbinary-lambda.127/mode=latencygf2_127-lambdalatency253 ns251 ns .. 256 nsper elem
addbinary-lambda.127/mode=throughputgf2_127-lambdathroughput249 ns247 ns .. 250 nsper elem
addbinary-u.127/mode=latencygf2_127-ulatency222 ns222 ns .. 223 nsper elem
addbinary-u.127/mode=throughputgf2_127-uthroughput220 ns219 ns .. 220 nsper elem
addbinary-w.127/mode=latencygf2_127-wlatency253 ns252 ns .. 255 nsper elem
addbinary-w.127/mode=throughputgf2_127-wthroughput249 ns247 ns .. 250 nsper elem
addedwards.127/mode=latencyedwards127latency32.5 ns32.4 ns .. 32.7 nsper elem
addedwards.127/mode=throughputedwards127throughput26.9 ns26.8 ns .. 27.0 nsper elem
addedwards127/+= montgomery affine, 8 accumulatorsedwards127throughput48.2 ns48.1 ns .. 48.4 nsper elem
addweier.127/mode=latencyweier127latency63.2 ns63.0 ns .. 63.5 nsper elem
addweier.127/mode=throughputweier127throughput58.1 ns57.9 ns .. 58.2 nsper elem
addweier-jacobian.127/mode=latencyweier127-jacobianlatency55.3 ns55.2 ns .. 55.4 nsper elem
addweier-jacobian.127/mode=throughputweier127-jacobianthroughput47.3 ns47.3 ns .. 47.4 nsper elem
subtractedwards.127/mode=throughputedwards127throughput28.8 ns28.8 ns .. 28.9 nsper elem
subtractweier.127/mode=throughputweier127throughput58.8 ns58.6 ns .. 58.9 nsper elem
subtractweier-jacobian.127/mode=throughputweier127-jacobianthroughput48.6 ns48.5 ns .. 48.7 nsper elem
negatebinary.109gf2_109per-element1.23 ns1.22 ns .. 1.23 nsper elem
negategf2_109/affine (y += x)gf2_109per-element0.63 ns0.62 ns .. 0.63 nsper elem
negatebinary-lambda.109gf2_109-lambdaper-element0.56 ns0.55 ns .. 0.56 nsper elem
negatebinary-u.109gf2_109-uper-element0.62 ns0.62 ns .. 0.62 nsper elem
negatebinary-w.109gf2_109-wper-element0.56 ns0.55 ns .. 0.56 nsper elem
negatebinary.122gf2_122per-element1.23 ns1.23 ns .. 1.23 nsper elem
negategf2_122/affine (y += x)gf2_122per-element0.63 ns0.63 ns .. 0.64 nsper elem
negatebinary.122-glsgf2_122-glsper-element1.24 ns1.23 ns .. 1.24 nsper elem
negatebinary-lambda.122-glsgf2_122-gls-lambdaper-element0.58 ns0.57 ns .. 0.58 nsper elem
negatebinary-u.122-glsgf2_122-gls-uper-element0.62 ns0.62 ns .. 0.62 nsper elem
negatebinary-w.122-glsgf2_122-gls-wper-element0.56 ns0.56 ns .. 0.57 nsper elem
negatebinary-lambda.122gf2_122-lambdaper-element0.55 ns0.55 ns .. 0.56 nsper elem
negatebinary-u.122gf2_122-uper-element0.62 ns0.62 ns .. 0.62 nsper elem
negatebinary-w.122gf2_122-wper-element0.56 ns0.55 ns .. 0.56 nsper elem
negatebinary.127gf2_127per-element1.24 ns1.24 ns .. 1.24 nsper elem
negategf2_127/affine (y += x)gf2_127per-element0.63 ns0.62 ns .. 0.63 nsper elem
negatebinary-lambda.127gf2_127-lambdaper-element0.56 ns0.56 ns .. 0.57 nsper elem
negatebinary-u.127gf2_127-uper-element0.62 ns0.61 ns .. 0.62 nsper elem
negatebinary-w.127gf2_127-wper-element0.57 ns0.56 ns .. 0.57 nsper elem
negateedwards.127edwards127per-element2.16 ns2.16 ns .. 2.17 nsper elem
negateedwards127/extended (-X, -T)edwards127per-element2.41 ns2.39 ns .. 2.43 nsper elem
negateweier.127weier127per-element1.18 ns1.18 ns .. 1.18 nsper elem
negateweier127/projective (-Y)weier127per-element1.39 ns1.38 ns .. 1.39 nsper elem
negateweier-jacobian.127weier127-jacobianper-element1.18 ns1.18 ns .. 1.18 nsper elem
is identitybinary.109gf2_109per-element0.95 ns0.95 ns .. 0.95 nsper elem
is identitybinary-lambda.109gf2_109-lambdaper-element0.89 ns0.89 ns .. 0.89 nsper elem
is identitybinary-u.109gf2_109-uper-element0.89 ns0.89 ns .. 0.89 nsper elem
is identitybinary-w.109gf2_109-wper-element0.89 ns0.89 ns .. 0.89 nsper elem
is identitybinary.122gf2_122per-element0.99 ns0.99 ns .. 0.99 nsper elem
is identitybinary.122-glsgf2_122-glsper-element0.99 ns0.99 ns .. 1.00 nsper elem
is identitybinary-lambda.122-glsgf2_122-gls-lambdaper-element1.02 ns1.02 ns .. 1.03 nsper elem
is identitybinary-u.122-glsgf2_122-gls-uper-element1.01 ns1.00 ns .. 1.02 nsper elem
is identitybinary-w.122-glsgf2_122-gls-wper-element0.99 ns0.99 ns .. 0.99 nsper elem
is identitybinary-lambda.122gf2_122-lambdaper-element0.98 ns0.98 ns .. 0.98 nsper elem
is identitybinary-u.122gf2_122-uper-element1.00 ns1.00 ns .. 1.01 nsper elem
is identitybinary-w.122gf2_122-wper-element0.99 ns0.99 ns .. 1.00 nsper elem
is identitybinary.127gf2_127per-element0.87 ns0.86 ns .. 0.87 nsper elem
is identitybinary-lambda.127gf2_127-lambdaper-element0.81 ns0.81 ns .. 0.82 nsper elem
is identitybinary-u.127gf2_127-uper-element0.79 ns0.78 ns .. 0.79 nsper elem
is identitybinary-w.127gf2_127-wper-element0.80 ns0.80 ns .. 0.80 nsper elem
is identityedwards.127edwards127per-element1.12 ns1.12 ns .. 1.12 nsper elem
is identityweier.127weier127per-element0.40 ns0.40 ns .. 0.40 nsper elem
is identityweier-jacobian.127weier127-jacobianper-element0.40 ns0.40 ns .. 0.40 nsper elem
equals addendbinary.109/mode=mismatchgf2_109mismatch122 ns121 ns .. 122 nsper elem
equals addendbinary-lambda.109/mode=mismatchgf2_109-lambdamismatch62.5 ns62.4 ns .. 62.6 nsper elem
equals addendbinary-u.109/mode=mismatchgf2_109-umismatch184 ns183 ns .. 184 nsper elem
equals addendbinary-w.109/mode=mismatchgf2_109-wmismatch62.4 ns62.3 ns .. 62.5 nsper elem
equals addendbinary.122/mode=mismatchgf2_122mismatch76.5 ns76.4 ns .. 76.6 nsper elem
equals addendbinary.122-gls/mode=mismatchgf2_122-glsmismatch77.1 ns76.9 ns .. 77.3 nsper elem
equals addendbinary-lambda.122-gls/mode=mismatchgf2_122-gls-lambdamismatch43.8 ns43.6 ns .. 43.9 nsper elem
equals addendbinary-u.122-gls/mode=mismatchgf2_122-gls-umismatch116 ns116 ns .. 117 nsper elem
equals addendbinary-w.122-gls/mode=mismatchgf2_122-gls-wmismatch43.0 ns42.9 ns .. 43.1 nsper elem
equals addendbinary-lambda.122/mode=mismatchgf2_122-lambdamismatch42.8 ns42.7 ns .. 42.8 nsper elem
equals addendbinary-u.122/mode=mismatchgf2_122-umismatch119 ns119 ns .. 119 nsper elem
equals addendbinary-w.122/mode=mismatchgf2_122-wmismatch42.9 ns42.8 ns .. 42.9 nsper elem
equals addendbinary.127/mode=mismatchgf2_127mismatch54.7 ns54.6 ns .. 55.0 nsper elem
equals addendbinary-lambda.127/mode=mismatchgf2_127-lambdamismatch30.6 ns30.4 ns .. 30.8 nsper elem
equals addendbinary-u.127/mode=mismatchgf2_127-umismatch89.9 ns89.6 ns .. 90.3 nsper elem
equals addendbinary-w.127/mode=mismatchgf2_127-wmismatch30.0 ns29.9 ns .. 30.2 nsper elem
equals addendedwards.127/mode=matchedwards127match5.59 ns5.56 ns .. 5.63 nsper elem
equals addendedwards.127/mode=mismatchedwards127mismatch3.16 ns3.16 ns .. 3.17 nsper elem
equals addendweier.127/mode=matchweier127match5.93 ns5.91 ns .. 5.95 nsper elem
equals addendweier.127/mode=mismatchweier127mismatch3.35 ns3.34 ns .. 3.36 nsper elem
equals addendweier-jacobian.127/mode=matchweier127-jacobianmatch13.3 ns13.3 ns .. 13.4 nsper elem
equals addendweier-jacobian.127/mode=mismatchweier127-jacobianmismatch6.62 ns6.60 ns .. 6.63 nsper elem
encodebinary.109/mode=batch,n=1024gf2_109batch500 ns499 ns .. 500 nsper elem
encodebinary.109/mode=indepgf2_109per-element4.70 µs4.69 µs .. 4.71 µsper elem
encodebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch371 ns370 ns .. 372 nsper elem
encodebinary-lambda.109/mode=indepgf2_109-lambdaper-element4.57 µs4.57 µs .. 4.58 µsper elem
encodebinary-u.109/mode=batch,n=1024gf2_109-ubatch343 ns343 ns .. 344 nsper elem
encodebinary-u.109/mode=indepgf2_109-uper-element4.53 µs4.52 µs .. 4.53 µsper elem
encodebinary-w.109/mode=batch,n=1024gf2_109-wbatch343 ns343 ns .. 344 nsper elem
encodebinary-w.109/mode=indepgf2_109-wper-element4.57 µs4.56 µs .. 4.57 µsper elem
encodebinary.122/mode=batch,n=1024gf2_122batch286 ns285 ns .. 286 nsper elem
encodebinary.122/mode=indepgf2_122per-element672 ns671 ns .. 673 nsper elem
encodebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch270 ns269 ns .. 272 nsper elem
encodebinary.122-gls/mode=indepgf2_122-glsper-element654 ns653 ns .. 655 nsper elem
encodebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch242 ns241 ns .. 243 nsper elem
encodebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element639 ns636 ns .. 643 nsper elem
encodebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch200 ns200 ns .. 201 nsper elem
encodebinary-u.122-gls/mode=indepgf2_122-gls-uper-element598 ns596 ns .. 600 nsper elem
encodebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch198 ns197 ns .. 199 nsper elem
encodebinary-w.122-gls/mode=indepgf2_122-gls-wper-element595 ns592 ns .. 597 nsper elem
encodebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch234 ns233 ns .. 234 nsper elem
encodebinary-lambda.122/mode=indepgf2_122-lambdaper-element624 ns623 ns .. 625 nsper elem
encodebinary-u.122/mode=batch,n=1024gf2_122-ubatch202 ns201 ns .. 203 nsper elem
encodebinary-u.122/mode=indepgf2_122-uper-element610 ns607 ns .. 613 nsper elem
encodebinary-w.122/mode=batch,n=1024gf2_122-wbatch200 ns198 ns .. 201 nsper elem
encodebinary-w.122/mode=indepgf2_122-wper-element590 ns589 ns .. 591 nsper elem
encodebinary.127/mode=batch,n=1024gf2_127batch214 ns213 ns .. 215 nsper elem
encodebinary.127/mode=indepgf2_127per-element709 ns707 ns .. 711 nsper elem
encodebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch172 ns171 ns .. 174 nsper elem
encodebinary-lambda.127/mode=indepgf2_127-lambdaper-element671 ns667 ns .. 674 nsper elem
encodebinary-u.127/mode=batch,n=1024gf2_127-ubatch150 ns150 ns .. 150 nsper elem
encodebinary-u.127/mode=indepgf2_127-uper-element638 ns637 ns .. 639 nsper elem
encodebinary-w.127/mode=batch,n=1024gf2_127-wbatch148 ns148 ns .. 149 nsper elem
encodebinary-w.127/mode=indepgf2_127-wper-element655 ns650 ns .. 661 nsper elem
encodeedwards.127/mode=batch,n=1024edwards127batch30.1 ns30.1 ns .. 30.2 nsper elem
encodeedwards.127/mode=batch,n=64edwards127batch42.7 ns42.5 ns .. 42.9 nsper elem
encodeedwards.127/mode=batch,n=8edwards127batch114 ns114 ns .. 114 nsper elem
encodeedwards.127/mode=indepedwards127per-element602 ns600 ns .. 603 nsper elem
encodeweier.127/mode=batch,n=1024weier127batch15.9 ns15.9 ns .. 16.0 nsper elem
encodeweier.127/mode=batch,n=64weier127batch28.0 ns27.9 ns .. 28.1 nsper elem
encodeweier.127/mode=batch,n=8weier127batch101 ns101 ns .. 101 nsper elem
encodeweier.127/mode=indepweier127per-element587 ns586 ns .. 587 nsper elem
encodeweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch22.5 ns22.5 ns .. 22.6 nsper elem
encodeweier-jacobian.127/mode=batch,n=64weier127-jacobianbatch35.1 ns35.0 ns .. 35.2 nsper elem
encodeweier-jacobian.127/mode=batch,n=8weier127-jacobianbatch107 ns107 ns .. 107 nsper elem
encodeweier-jacobian.127/mode=indepweier127-jacobianper-element593 ns592 ns .. 594 nsper elem
decodebinary.109/mode=batch,n=1024gf2_109batch421 ns420 ns .. 422 nsper elem
decodebinary.109/mode=indepgf2_109per-element4.60 µs4.59 µs .. 4.60 µsper elem
decodebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch424 ns422 ns .. 426 nsper elem
decodebinary-lambda.109/mode=indepgf2_109-lambdaper-element4.61 µs4.60 µs .. 4.62 µsper elem
decodebinary-u.109/mode=batch,n=1024gf2_109-ubatch519 ns519 ns .. 520 nsper elem
decodebinary-u.109/mode=indepgf2_109-uper-element4.74 µs4.73 µs .. 4.75 µsper elem
decodebinary-w.109/mode=batch,n=1024gf2_109-wbatch400 ns400 ns .. 401 nsper elem
decodebinary-w.109/mode=indepgf2_109-wper-element4.60 µs4.60 µs .. 4.61 µsper elem
decodebinary.122/mode=batch,n=1024gf2_122batch256 ns256 ns .. 256 nsper elem
decodebinary.122/mode=indepgf2_122per-element645 ns645 ns .. 646 nsper elem
decodebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch229 ns228 ns .. 230 nsper elem
decodebinary.122-gls/mode=indepgf2_122-glsper-element649 ns645 ns .. 653 nsper elem
decodebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch228 ns227 ns .. 228 nsper elem
decodebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element633 ns632 ns .. 635 nsper elem
decodebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch272 ns271 ns .. 273 nsper elem
decodebinary-u.122-gls/mode=indepgf2_122-gls-uper-element673 ns672 ns .. 675 nsper elem
decodebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch203 ns202 ns .. 204 nsper elem
decodebinary-w.122-gls/mode=indepgf2_122-gls-wper-element598 ns596 ns .. 599 nsper elem
decodebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch256 ns255 ns .. 257 nsper elem
decodebinary-lambda.122/mode=indepgf2_122-lambdaper-element644 ns643 ns .. 645 nsper elem
decodebinary-u.122/mode=batch,n=1024gf2_122-ubatch309 ns308 ns .. 310 nsper elem
decodebinary-u.122/mode=indepgf2_122-uper-element707 ns705 ns .. 710 nsper elem
decodebinary-w.122/mode=batch,n=1024gf2_122-wbatch216 ns214 ns .. 218 nsper elem
decodebinary-w.122/mode=indepgf2_122-wper-element613 ns612 ns .. 614 nsper elem
decodebinary.127/mode=batch,n=1024gf2_127batch167 ns165 ns .. 168 nsper elem
decodebinary.127/mode=indepgf2_127per-element659 ns656 ns .. 662 nsper elem
decodebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch163 ns162 ns .. 164 nsper elem
decodebinary-lambda.127/mode=indepgf2_127-lambdaper-element678 ns675 ns .. 682 nsper elem
decodebinary-u.127/mode=batch,n=1024gf2_127-ubatch227 ns227 ns .. 227 nsper elem
decodebinary-u.127/mode=indepgf2_127-uper-element731 ns730 ns .. 732 nsper elem
decodebinary-w.127/mode=batch,n=1024gf2_127-wbatch170 ns169 ns .. 170 nsper elem
decodebinary-w.127/mode=indepgf2_127-wper-element683 ns680 ns .. 686 nsper elem
decodeedwards.127/mode=batch,n=1024edwards127batch576 ns575 ns .. 578 nsper elem
decodeedwards.127/mode=batch,n=64edwards127batch573 ns572 ns .. 574 nsper elem
decodeedwards.127/mode=batch,n=8edwards127batch575 ns574 ns .. 575 nsper elem
decodeedwards.127/mode=indepedwards127per-element575 ns573 ns .. 577 nsper elem
decodeweier.127/mode=batch,n=1024weier127batch573 ns572 ns .. 574 nsper elem
decodeweier.127/mode=batch,n=64weier127batch576 ns574 ns .. 577 nsper elem
decodeweier.127/mode=batch,n=8weier127batch577 ns575 ns .. 578 nsper elem
decodeweier.127/mode=indepweier127per-element574 ns573 ns .. 575 nsper elem
decodeweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch574 ns573 ns .. 575 nsper elem
decodeweier-jacobian.127/mode=batch,n=64weier127-jacobianbatch579 ns577 ns .. 581 nsper elem
decodeweier-jacobian.127/mode=batch,n=8weier127-jacobianbatch576 ns574 ns .. 577 nsper elem
decodeweier-jacobian.127/mode=indepweier127-jacobianper-element574 ns573 ns .. 575 nsper elem
normalizegf2_109/normalize, batchedgf2_109batch500 ns499 ns .. 502 nsper elem
normalizegf2_122/normalize, batchedgf2_122batch286 ns284 ns .. 288 nsper elem
normalizegf2_122-gls/normalize, batchedgf2_122-glsbatch265 ns264 ns .. 266 nsper elem
batch sumgf2_109/batch affine (tree sum)gf2_109batch393 ns391 ns .. 394 nsper elem
batch sumgf2_122/batch affine (tree sum)gf2_122batch215 ns214 ns .. 216 nsper elem
batch sumgf2_127/batch affine (tree sum)gf2_127batch169 ns168 ns .. 169 nsper elem
batch sumedwards127/batch montgomery affine (tree sum)edwards127batch40.0 ns39.9 ns .. 40.1 nsper elem
batch sumweier127/batch affine (tree sum)weier127batch39.3 ns39.0 ns .. 39.5 nsper elem

hash to curve

Figure

Hash to curve by try-and-increment: time per item against batch size on log axes, one at a time at n = 1; the representative curves and the fastest of each base family, a marker per curve within a hue, and the XOR baseline as a level, intervals as bands. The other maps are in the comparison maps figure, hash to addend and the steps of a hash in the table.Hash to curve by try-and-increment: time per item against batch size on log axes, one at a time at n = 1; the representative curves and the fastest of each base family, a marker per curve within a hue, and the XOR baseline as a level, intervals as bands. The other maps are in the comparison maps figure, hash to addend and the steps of a hash in the table.

81 benchmarks
operationbenchmarkfamilymodetime95% CIunit
hash to curvebinary.109/mode=batch,n=1024gf2_109batch814 ns813 ns .. 816 nsper elem
hash to curvebinary.109/mode=indepgf2_109per-element9.10 µs9.09 µs .. 9.12 µsper elem
hash to curvebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch814 ns813 ns .. 815 nsper elem
hash to curvebinary-lambda.109/mode=indepgf2_109-lambdaper-element9.08 µs9.07 µs .. 9.09 µsper elem
hash to curvebinary-u.109/mode=batch,n=1024gf2_109-ubatch927 ns926 ns .. 928 nsper elem
hash to curvebinary-u.109/mode=indepgf2_109-uper-element9.08 µs9.07 µs .. 9.10 µsper elem
hash to curvebinary-w.109/mode=batch,n=1024gf2_109-wbatch805 ns804 ns .. 807 nsper elem
hash to curvebinary-w.109/mode=indepgf2_109-wper-element8.98 µs8.96 µs .. 9.00 µsper elem
hash to curvebinary.122/mode=batch,n=1024gf2_122batch488 ns487 ns .. 489 nsper elem
hash to curvebinary.122/mode=indepgf2_122per-element1.27 µs1.27 µs .. 1.27 µsper elem
hash to curvebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch456 ns455 ns .. 458 nsper elem
hash to curvebinary.122-gls/mode=indepgf2_122-glsper-element1.27 µs1.27 µs .. 1.27 µsper elem
hash to curvebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch455 ns453 ns .. 457 nsper elem
hash to curvebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element1.26 µs1.26 µs .. 1.27 µsper elem
hash to curvebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch513 ns511 ns .. 515 nsper elem
hash to curvebinary-u.122-gls/mode=indepgf2_122-gls-uper-element1.31 µs1.31 µs .. 1.31 µsper elem
hash to curvebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch444 ns442 ns .. 446 nsper elem
hash to curvebinary-w.122-gls/mode=indepgf2_122-gls-wper-element1.24 µs1.24 µs .. 1.24 µsper elem
hash to curvebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch487 ns486 ns .. 488 nsper elem
hash to curvebinary-lambda.122/mode=indepgf2_122-lambdaper-element1.27 µs1.27 µs .. 1.27 µsper elem
hash to curvebinary-u.122/mode=batch,n=1024gf2_122-ubatch555 ns550 ns .. 560 nsper elem
hash to curvebinary-u.122/mode=indepgf2_122-uper-element1.38 µs1.36 µs .. 1.40 µsper elem
hash to curvebinary-w.122/mode=batch,n=1024gf2_122-wbatch458 ns457 ns .. 460 nsper elem
hash to curvebinary-w.122/mode=indepgf2_122-wper-element1.24 µs1.24 µs .. 1.24 µsper elem
hash to curvebinary.127/mode=batch,n=1024gf2_127batch347 ns345 ns .. 348 nsper elem
hash to curvebinary.127/mode=indepgf2_127per-element1.29 µs1.29 µs .. 1.30 µsper elem
hash to curvebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch347 ns345 ns .. 349 nsper elem
hash to curvebinary-lambda.127/mode=indepgf2_127-lambdaper-element1.30 µs1.29 µs .. 1.31 µsper elem
hash to curvebinary-u.127/mode=batch,n=1024gf2_127-ubatch452 ns450 ns .. 453 nsper elem
hash to curvebinary-u.127/mode=indepgf2_127-uper-element1.51 µs1.50 µs .. 1.51 µsper elem
hash to curvebinary-w.127/mode=batch,n=1024gf2_127-wbatch391 ns389 ns .. 393 nsper elem
hash to curvebinary-w.127/mode=indepgf2_127-wper-element1.41 µs1.40 µs .. 1.42 µsper elem
hash to curveedwards.127/mode=batch,n=1024edwards127batch1.25 µs1.25 µs .. 1.26 µsper elem
hash to curveedwards.127/mode=batch,n=64edwards127batch1.26 µs1.25 µs .. 1.26 µsper elem
hash to curveedwards.127/mode=batch,n=8edwards127batch1.26 µs1.26 µs .. 1.27 µsper elem
hash to curveedwards.127/mode=indepedwards127per-element1.25 µs1.25 µs .. 1.25 µsper elem
hash to curveedwards127/edwards-native try-and-incrementedwards127per-element1.30 µs1.30 µs .. 1.30 µsper elem
hash to curveweier.127/mode=batch,n=1024weier127batch1.23 µs1.22 µs .. 1.23 µsper elem
hash to curveweier.127/mode=batch,n=64weier127batch1.28 µs1.27 µs .. 1.29 µsper elem
hash to curveweier.127/mode=batch,n=8weier127batch1.23 µs1.22 µs .. 1.23 µsper elem
hash to curveweier.127/mode=indepweier127per-element1.22 µs1.22 µs .. 1.22 µsper elem
hash to curveweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch1.22 µs1.22 µs .. 1.22 µsper elem
hash to curveweier-jacobian.127/mode=batch,n=64weier127-jacobianbatch1.23 µs1.22 µs .. 1.23 µsper elem
hash to curveweier-jacobian.127/mode=batch,n=8weier127-jacobianbatch1.23 µs1.22 µs .. 1.23 µsper elem
hash to curveweier-jacobian.127/mode=indepweier127-jacobianper-element1.22 µs1.21 µs .. 1.22 µsper elem
ID to addendedwards.127/proj=fp127,h2c=elligator2,mode=batch,n=1024edwards127batch2.08 µs2.07 µs .. 2.08 µsper elem
ID to addendedwards.127/proj=fp127,h2c=ti,mode=batch,n=1024edwards127batch1.25 µs1.25 µs .. 1.25 µsper elem
ID to addendedwards.127/proj=fp127,h2c=ti-addend,mode=batch,n=1024edwards127batch1.28 µs1.28 µs .. 1.29 µsper elem
ID to addendedwards.127/proj=fp130,h2c=elligator2,mode=batch,n=1024edwards127batch2.08 µs2.07 µs .. 2.08 µsper elem
ID to addendedwards.127/proj=fp130,h2c=ti,mode=batch,n=1024edwards127batch1.25 µs1.25 µs .. 1.25 µsper elem
ID to addendedwards.127/proj=fp130,h2c=ti-addend,mode=batch,n=1024edwards127batch1.27 µs1.27 µs .. 1.28 µsper elem
ID to addendedwards.127/proj=gf2_127,h2c=elligator2,mode=batch,n=1024edwards127batch2.11 µs2.11 µs .. 2.12 µsper elem
ID to addendedwards.127/proj=gf2_127,h2c=ti,mode=batch,n=1024edwards127batch1.38 µs1.37 µs .. 1.38 µsper elem
ID to addendedwards.127/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024edwards127batch1.39 µs1.39 µs .. 1.40 µsper elem
ID to addendedwards.127/proj=none,h2c=elligator2,mode=batch,n=1024edwards127batch2.12 µs2.11 µs .. 2.12 µsper elem
ID to addendedwards.127/proj=none,h2c=ti,mode=batch,n=1024edwards127batch1.31 µs1.30 µs .. 1.31 µsper elem
ID to addendedwards.127/proj=none,h2c=ti-addend,mode=batch,n=1024edwards127batch1.33 µs1.32 µs .. 1.33 µsper elem
ID to addendweier.127/proj=fp127,h2c=sswu,mode=batch,n=1024weier127batch1.24 µs1.23 µs .. 1.24 µsper elem
ID to addendweier.127/proj=fp127,h2c=ti,mode=batch,n=1024weier127batch1.18 µs1.17 µs .. 1.18 µsper elem
ID to addendweier.127/proj=fp130,h2c=sswu,mode=batch,n=1024weier127batch1.25 µs1.24 µs .. 1.25 µsper elem
ID to addendweier.127/proj=fp130,h2c=ti,mode=batch,n=1024weier127batch1.23 µs1.23 µs .. 1.23 µsper elem
ID to addendweier.127/proj=gf2_127,h2c=sswu,mode=batch,n=1024weier127batch1.29 µs1.29 µs .. 1.29 µsper elem
ID to addendweier.127/proj=gf2_127,h2c=ti,mode=batch,n=1024weier127batch1.34 µs1.33 µs .. 1.34 µsper elem
ID to addendweier.127/proj=none,h2c=sswu,mode=batch,n=1024weier127batch1.31 µs1.31 µs .. 1.31 µsper elem
ID to addendweier.127/proj=none,h2c=ti,mode=batch,n=1024weier127batch1.21 µs1.20 µs .. 1.22 µsper elem
ID to addendweier-jacobian.127/proj=fp127,h2c=sswu,mode=batch,n=1024weier127-jacobianbatch1.24 µs1.23 µs .. 1.24 µsper elem
ID to addendweier-jacobian.127/proj=fp127,h2c=ti,mode=batch,n=1024weier127-jacobianbatch1.18 µs1.18 µs .. 1.19 µsper elem
ID to addendweier-jacobian.127/proj=fp130,h2c=sswu,mode=batch,n=1024weier127-jacobianbatch1.25 µs1.24 µs .. 1.26 µsper elem
ID to addendweier-jacobian.127/proj=fp130,h2c=ti,mode=batch,n=1024weier127-jacobianbatch1.23 µs1.23 µs .. 1.23 µsper elem
ID to addendweier-jacobian.127/proj=gf2_127,h2c=sswu,mode=batch,n=1024weier127-jacobianbatch1.29 µs1.29 µs .. 1.30 µsper elem
ID to addendweier-jacobian.127/proj=gf2_127,h2c=ti,mode=batch,n=1024weier127-jacobianbatch1.34 µs1.33 µs .. 1.34 µsper elem
ID to addendweier-jacobian.127/proj=none,h2c=sswu,mode=batch,n=1024weier127-jacobianbatch1.31 µs1.30 µs .. 1.31 µsper elem
ID to addendweier-jacobian.127/proj=none,h2c=ti,mode=batch,n=1024weier127-jacobianbatch1.20 µs1.20 µs .. 1.21 µsper elem
hash to addendgf2_109-lambda/try-and-increment to (x, λ)gf2_109-lambdaper-element9.10 µs9.08 µs .. 9.13 µsper elem
hash to addendgf2_109-lambda/try-and-increment to (x, λ), batchedgf2_109-lambdabatch834 ns826 ns .. 842 nsper elem
hash to addendgf2_122-gls-lambda/try-and-increment to (x, λ)gf2_122-gls-lambdaper-element1.29 µs1.29 µs .. 1.30 µsper elem
hash to addendgf2_122-gls-lambda/try-and-increment to (x, λ), batchedgf2_122-gls-lambdabatch468 ns465 ns .. 472 nsper elem
hash to addendgf2_122-lambda/try-and-increment to (x, λ)gf2_122-lambdaper-element1.24 µs1.24 µs .. 1.25 µsper elem
hash to addendgf2_122-lambda/try-and-increment to (x, λ), batchedgf2_122-lambdabatch485 ns484 ns .. 485 nsper elem
hash to addendgf2_127-lambda/try-and-increment to (x, λ)gf2_127-lambdaper-element1.26 µs1.25 µs .. 1.27 µsper elem
hash to addendgf2_127-lambda/try-and-increment to (x, λ), batchedgf2_127-lambdabatch322 ns320 ns .. 323 nsper elem

comparison maps

Maps from digests to points other than try-and-increment, timed beside it: Pornin’s map on binary curves, Elligator 2 on Edwards curves and simplified SWU on Weierstrass curves, once, and Pornin’s map twice with the points summed; and Pornin’s map taken straight to the unscaled or -affine addend, where it stands for a hash and a prepare together, as try-and-increment to does. One map reaches at most points of , not uniformly. The checksum needs relations to be hard to find among hash outputs within the subset of the group that the hash reaches, not outputs uniform on the group (docs/problem.md, Adversary). Insertion estimates include each measured map with compatible preparation and addition; Pornin already returns an extended binary addend.

Figure

Comparison maps (Pornin's binary map, Elligator 2, SSWU) on a log scale beside try-and-increment on the same curves and on the three curves where it is fastest: a row per curve and method, one at a time and batched as a dark and a light bar of the family's colour.Comparison maps (Pornin's binary map, Elligator 2, SSWU) on a log scale beside try-and-increment on the same curves and on the three curves where it is fastest: a row per curve and method, one at a time and batched as a dark and a light bar of the family's colour.

35 benchmarks
operationbenchmarkfamilymodetime95% CIunit
one map to addendgf2_109-lambda/pornin map x1 to (x, λ)gf2_109-lambdaper-element5.09 µs5.07 µs .. 5.11 µsper elem
one map to addendgf2_109-lambda/pornin map x1 to (x, λ), batchedgf2_109-lambdabatch854 ns852 ns .. 856 nsper elem
one map to addendgf2_109-u/pornin map x1 to (u, v)gf2_109-uper-element5.19 µs5.18 µs .. 5.21 µsper elem
one map to addendgf2_109-u/pornin map x1 to (u, v), batchedgf2_109-ubatch986 ns983 ns .. 988 nsper elem
one map to addendgf2_109-w/pornin map x1 to (x, λ)gf2_109-wper-element5.11 µs5.08 µs .. 5.15 µsper elem
one map to addendgf2_109-w/pornin map x1 to (x, λ), batchedgf2_109-wbatch852 ns850 ns .. 855 nsper elem
one map to addendgf2_122-gls-lambda/pornin map x1 to (x, λ)gf2_122-gls-lambdaper-element941 ns937 ns .. 946 nsper elem
one map to addendgf2_122-gls-lambda/pornin map x1 to (x, λ), batchedgf2_122-gls-lambdabatch505 ns502 ns .. 508 nsper elem
one map to addendgf2_122-gls-u/pornin map x1 to (u, v)gf2_122-gls-uper-element1.01 µs1.01 µs .. 1.02 µsper elem
one map to addendgf2_122-gls-u/pornin map x1 to (u, v), batchedgf2_122-gls-ubatch580 ns578 ns .. 583 nsper elem
one map to addendgf2_122-gls-w/pornin map x1 to (x, λ)gf2_122-gls-wper-element949 ns944 ns .. 953 nsper elem
one map to addendgf2_122-gls-w/pornin map x1 to (x, λ), batchedgf2_122-gls-wbatch509 ns505 ns .. 514 nsper elem
one map to addendgf2_122-lambda/pornin map x1 to (x, λ)gf2_122-lambdaper-element925 ns924 ns .. 926 nsper elem
one map to addendgf2_122-lambda/pornin map x1 to (x, λ), batchedgf2_122-lambdabatch498 ns497 ns .. 499 nsper elem
one map to addendgf2_122-u/pornin map x1 to (u, v)gf2_122-uper-element1.00 µs1.00 µs .. 1.01 µsper elem
one map to addendgf2_122-u/pornin map x1 to (u, v), batchedgf2_122-ubatch585 ns584 ns .. 586 nsper elem
one map to addendgf2_122-w/pornin map x1 to (x, λ)gf2_122-wper-element929 ns925 ns .. 935 nsper elem
one map to addendgf2_122-w/pornin map x1 to (x, λ), batchedgf2_122-wbatch501 ns500 ns .. 502 nsper elem
one map to addendgf2_127-lambda/pornin map x1 to (x, λ)gf2_127-lambdaper-element889 ns885 ns .. 894 nsper elem
one map to addendgf2_127-lambda/pornin map x1 to (x, λ), batchedgf2_127-lambdabatch365 ns363 ns .. 367 nsper elem
one map to addendgf2_127-u/pornin map x1 to (u, v)gf2_127-uper-element939 ns934 ns .. 944 nsper elem
one map to addendgf2_127-u/pornin map x1 to (u, v), batchedgf2_127-ubatch426 ns425 ns .. 428 nsper elem
one map to addendgf2_127-w/pornin map x1 to (x, λ)gf2_127-wper-element892 ns889 ns .. 897 nsper elem
one map to addendgf2_127-w/pornin map x1 to (x, λ), batchedgf2_127-wbatch360 ns358 ns .. 363 nsper elem
one mapgf2_109/pornin map x1gf2_109per-element5.27 µs5.25 µs .. 5.28 µsper elem
one mapgf2_109/pornin map x1, batchedgf2_109batch1.05 µs1.05 µs .. 1.05 µsper elem
one mapgf2_122/pornin map x1gf2_122per-element1.08 µs1.07 µs .. 1.09 µsper elem
one mapgf2_122/pornin map x1, batchedgf2_122batch623 ns622 ns .. 624 nsper elem
one mapgf2_122-gls/pornin map x1gf2_122-glsper-element1.02 µs1.01 µs .. 1.03 µsper elem
one mapgf2_122-gls/pornin map x1, batchedgf2_122-glsbatch599 ns595 ns .. 603 nsper elem
one mapgf2_127/pornin map x1gf2_127per-element966 ns958 ns .. 974 nsper elem
one mapgf2_127/pornin map x1, batchedgf2_127batch454 ns452 ns .. 457 nsper elem
one mapedwards127/elligator2 x1edwards127per-element1.52 µs1.52 µs .. 1.53 µsper elem
one mapweier127/sswu x1weier127per-element1.33 µs1.32 µs .. 1.33 µsper elem
two maps summedgf2_127/pornin map x2gf2_127per-element2.25 µs2.23 µs .. 2.26 µsper elem

RIBLT workload

Ratios against Go riblt-ecmh also include the mapping generator and the port to Rust, which are not attributed to this project (Workload, Comparison with the reference implementations).

Figure

RIBLT workload on log axes: time per item to encode and to update cells against the number of cells m, and per difference to peel against the number of differences d, the items in only one of the two sets. Peeling takes cells whose count is +1 or -1 as candidates and checks each by hashing its key; the prefilter first rejects a candidate whose key's mapping does not include its cell. Each family's dark line (dashed in the peel panels) hashes candidates one at a time and its light line hashes each pass's candidates together; the fastest encoder of each base family and the XOR baseline, intervals as bands.RIBLT workload on log axes: time per item to encode and to update cells against the number of cells m, and per difference to peel against the number of differences d, the items in only one of the two sets. Peeling takes cells whose count is +1 or -1 as candidates and checks each by hashing its key; the prefilter first rejects a candidate whose key's mapping does not include its cell. Each family's dark line (dashed in the peel panels) hashes candidates one at a time and its light line hashes each pass's candidates together; the fastest encoder of each base family and the XOR baseline, intervals as bands.

264 benchmarks
operationbenchmarkfamilymodetime95% CIunit
encode (hash + cells)xor-sha256.64/m=12150,n=3500xorper-element301 ns300 ns .. 302 nsper elem
encode (hash + cells)xor-sha256.64/m=1350,n=3500xorper-element251 ns251 ns .. 252 nsper elem
encode (hash + cells)xor-sha256.64/m=150,n=3500xorper-element213 ns213 ns .. 214 nsper elem
encode (hash + cells)xor-sha256.64/m=20,n=3500xorper-element176 ns175 ns .. 176 nsper elem
encode (hash + cells)xor-sha256.64/m=5,n=3500xorper-element146 ns146 ns .. 147 nsper elem
encode (hash + cells)xor-siphash.64/m=12150,n=3500xor-siphashper-element269 ns269 ns .. 270 nsper elem
encode (hash + cells)xor-siphash.64/m=12150,n=3500,map=mcg64xor-siphashper-element261 ns261 ns .. 262 nsper elem
encode (hash + cells)xor-siphash.64/m=1350,n=3500xor-siphashper-element221 ns220 ns .. 221 nsper elem
encode (hash + cells)xor-siphash.64/m=1350,n=3500,map=mcg64xor-siphashper-element215 ns214 ns .. 215 nsper elem
encode (hash + cells)xor-siphash.64/m=150,n=3500xor-siphashper-element181 ns181 ns .. 182 nsper elem
encode (hash + cells)xor-siphash.64/m=150,n=3500,map=mcg64xor-siphashper-element179 ns179 ns .. 180 nsper elem
encode (hash + cells)xor-siphash.64/m=20,n=3500xor-siphashper-element142 ns141 ns .. 142 nsper elem
encode (hash + cells)xor-siphash.64/m=20,n=3500,map=mcg64xor-siphashper-element139 ns139 ns .. 140 nsper elem
encode (hash + cells)xor-siphash.64/m=5,n=3500xor-siphashper-element112 ns111 ns .. 112 nsper elem
encode (hash + cells)xor-siphash.64/m=5,n=3500,map=mcg64xor-siphashper-element109 ns108 ns .. 109 nsper elem
encode (hash + cells)binary.109/m=1350,n=3500,h2c=tigf2_109per-element10.2 µs10.1 µs .. 10.2 µsper elem
encode (hash + cells)binary-lambda.109/m=1350,n=3500,h2c=ti-addendgf2_109-lambdaper-element8.11 µs8.09 µs .. 8.14 µsper elem
encode (hash + cells)binary-u.109/m=1350,n=3500,h2c=tigf2_109-uper-element7.69 µs7.67 µs .. 7.71 µsper elem
encode (hash + cells)binary-w.109/m=1350,n=3500,h2c=tigf2_109-wper-element8.14 µs8.12 µs .. 8.16 µsper elem
encode (hash + cells)binary.122/m=1350,n=3500,h2c=tigf2_122per-element6.11 µs6.10 µs .. 6.13 µsper elem
encode (hash + cells)binary.122-gls/m=1350,n=3500,h2c=tigf2_122-glsper-element5.68 µs5.67 µs .. 5.69 µsper elem
encode (hash + cells)binary-lambda.122-gls/m=1350,n=3500,h2c=ti-addendgf2_122-gls-lambdaper-element4.72 µs4.72 µs .. 4.73 µsper elem
encode (hash + cells)binary-u.122-gls/m=1350,n=3500,h2c=tigf2_122-gls-uper-element4.46 µs4.45 µs .. 4.47 µsper elem
encode (hash + cells)binary-w.122-gls/m=1350,n=3500,h2c=tigf2_122-gls-wper-element4.79 µs4.79 µs .. 4.80 µsper elem
encode (hash + cells)binary-lambda.122/m=1350,n=3500,h2c=ti-addendgf2_122-lambdaper-element4.88 µs4.87 µs .. 4.90 µsper elem
encode (hash + cells)binary-u.122/m=1350,n=3500,h2c=tigf2_122-uper-element4.45 µs4.44 µs .. 4.45 µsper elem
encode (hash + cells)binary-w.122/m=1350,n=3500,h2c=tigf2_122-wper-element4.80 µs4.78 µs .. 4.81 µsper elem
encode (hash + cells)binary.127/m=12150,n=3500,h2c=ti,map=mcg64gf2_127per-element6.22 µs6.21 µs .. 6.23 µsper elem
encode (hash + cells)binary.127/m=1350,n=3500,h2c=tigf2_127per-element4.73 µs4.72 µs .. 4.73 µsper elem
encode (hash + cells)binary.127/m=1350,n=3500,h2c=ti,map=mcg64gf2_127per-element4.76 µs4.75 µs .. 4.76 µsper elem
encode (hash + cells)binary.127/m=150,n=3500,h2c=ti,map=mcg64gf2_127per-element3.36 µs3.35 µs .. 3.36 µsper elem
encode (hash + cells)binary.127/m=20,n=3500,h2c=ti,map=mcg64gf2_127per-element2.14 µs2.14 µs .. 2.14 µsper elem
encode (hash + cells)binary.127/m=5,n=3500,h2c=ti,map=mcg64gf2_127per-element1.37 µs1.37 µs .. 1.38 µsper elem
encode (hash + cells)binary-lambda.127/m=1350,n=3500,h2c=ti-addendgf2_127-lambdaper-element3.70 µs3.70 µs .. 3.71 µsper elem
encode (hash + cells)binary-u.127/m=1350,n=3500,h2c=pornin-addendgf2_127-uper-element3.60 µs3.59 µs .. 3.60 µsper elem
encode (hash + cells)binary-w.127/m=1350,n=3500,h2c=pornin-addendgf2_127-wper-element3.75 µs3.74 µs .. 3.76 µsper elem
encode (hash + cells)edwards.127/m=12150,n=3500,h2c=tiedwards127per-element2.06 µs2.06 µs .. 2.07 µsper elem
encode (hash + cells)edwards.127/m=12150,n=3500,h2c=ti,proj=fp127,mapproj=fp127edwards127per-element1.96 µs1.95 µs .. 1.96 µsper elem
encode (hash + cells)edwards.127/m=1350,n=3500,h2c=tiedwards127per-element1.88 µs1.87 µs .. 1.89 µsper elem
encode (hash + cells)edwards.127/m=1350,n=3500,h2c=ti,proj=fp127,mapproj=fp127edwards127per-element1.81 µs1.80 µs .. 1.82 µsper elem
encode (hash + cells)edwards.127/m=150,n=3500,h2c=tiedwards127per-element1.77 µs1.75 µs .. 1.78 µsper elem
encode (hash + cells)edwards.127/m=20,n=3500,h2c=tiedwards127per-element1.60 µs1.59 µs .. 1.61 µsper elem
encode (hash + cells)edwards.127/m=5,n=3500,h2c=tiedwards127per-element1.47 µs1.47 µs .. 1.48 µsper elem
encode (hash + cells)edwards.127/m=5,n=3500,h2c=ti,proj=fp127,mapproj=fp127edwards127per-element1.37 µs1.37 µs .. 1.38 µsper elem
encode (hash + cells)weier.127/m=12150,n=3500,h2c=tiweier127per-element2.56 µs2.54 µs .. 2.57 µsper elem
encode (hash + cells)weier.127/m=12150,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127per-element2.44 µs2.44 µs .. 2.45 µsper elem
encode (hash + cells)weier.127/m=1350,n=3500,h2c=tiweier127per-element2.24 µs2.23 µs .. 2.24 µsper elem
encode (hash + cells)weier.127/m=1350,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127per-element2.12 µs2.12 µs .. 2.13 µsper elem
encode (hash + cells)weier.127/m=5,n=3500,h2c=tiweier127per-element1.53 µs1.52 µs .. 1.54 µsper elem
encode (hash + cells)weier.127/m=5,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127per-element1.39 µs1.39 µs .. 1.40 µsper elem
encode (hash + cells)weier-jacobian.127/m=12150,n=3500,h2c=tiweier127-jacobianper-element2.24 µs2.23 µs .. 2.24 µsper elem
encode (hash + cells)weier-jacobian.127/m=12150,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianper-element2.12 µs2.11 µs .. 2.12 µsper elem
encode (hash + cells)weier-jacobian.127/m=1350,n=3500,h2c=tiweier127-jacobianper-element2.03 µs2.03 µs .. 2.04 µsper elem
encode (hash + cells)weier-jacobian.127/m=1350,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianper-element1.93 µs1.93 µs .. 1.94 µsper elem
encode (hash + cells)weier-jacobian.127/m=150,n=3500,h2c=tiweier127-jacobianper-element1.82 µs1.82 µs .. 1.83 µsper elem
encode (hash + cells)weier-jacobian.127/m=20,n=3500,h2c=tiweier127-jacobianper-element1.60 µs1.59 µs .. 1.60 µsper elem
encode (hash + cells)weier-jacobian.127/m=5,n=3500,h2c=tiweier127-jacobianper-element1.46 µs1.46 µs .. 1.46 µsper elem
encode (hash + cells)weier-jacobian.127/m=5,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianper-element1.35 µs1.34 µs .. 1.35 µsper elem
cell updatesxor-sha256.64/m=1350,n=3500xorper-element199 ns198 ns .. 200 nsper elem
cell updatesxor-siphash.64/m=1350,n=3500xor-siphashper-element202 ns202 ns .. 203 nsper elem
cell updatesbinary.109/m=1350,n=3500gf2_109per-element9.19 µs9.17 µs .. 9.21 µsper elem
cell updatesbinary-lambda.109/m=1350,n=3500gf2_109-lambdaper-element7.27 µs7.26 µs .. 7.28 µsper elem
cell updatesbinary-u.109/m=1350,n=3500gf2_109-uper-element6.72 µs6.71 µs .. 6.73 µsper elem
cell updatesbinary-w.109/m=1350,n=3500gf2_109-wper-element7.30 µs7.29 µs .. 7.31 µsper elem
cell updatesbinary.122/m=1350,n=3500gf2_122per-element5.47 µs5.46 µs .. 5.48 µsper elem
cell updatesbinary.122-gls/m=1350,n=3500gf2_122-glsper-element5.19 µs5.18 µs .. 5.20 µsper elem
cell updatesbinary-lambda.122-gls/m=1350,n=3500gf2_122-gls-lambdaper-element4.29 µs4.28 µs .. 4.30 µsper elem
cell updatesbinary-u.122-gls/m=1350,n=3500gf2_122-gls-uper-element3.94 µs3.93 µs .. 3.94 µsper elem
cell updatesbinary-w.122-gls/m=1350,n=3500gf2_122-gls-wper-element4.35 µs4.34 µs .. 4.35 µsper elem
cell updatesbinary-lambda.122/m=1350,n=3500gf2_122-lambdaper-element4.34 µs4.34 µs .. 4.35 µsper elem
cell updatesbinary-u.122/m=1350,n=3500gf2_122-uper-element3.90 µs3.90 µs .. 3.91 µsper elem
cell updatesbinary-w.122/m=1350,n=3500gf2_122-wper-element4.32 µs4.31 µs .. 4.33 µsper elem
cell updatesbinary.127/m=1350,n=3500gf2_127per-element4.31 µs4.31 µs .. 4.32 µsper elem
cell updatesbinary-lambda.127/m=1350,n=3500gf2_127-lambdaper-element3.37 µs3.37 µs .. 3.38 µsper elem
cell updatesbinary-u.127/m=1350,n=3500gf2_127-uper-element3.18 µs3.18 µs .. 3.19 µsper elem
cell updatesbinary-w.127/m=1350,n=3500gf2_127-wper-element3.37 µs3.37 µs .. 3.38 µsper elem
cell updatesedwards.127/m=12150,n=3500edwards127per-element720 ns719 ns .. 721 nsper elem
cell updatesedwards.127/m=1350,n=3500edwards127per-element540 ns540 ns .. 541 nsper elem
cell updatesedwards.127/m=150,n=3500edwards127per-element390 ns389 ns .. 391 nsper elem
cell updatesedwards.127/m=20,n=3500edwards127per-element259 ns258 ns .. 261 nsper elem
cell updatesedwards.127/m=5,n=3500edwards127per-element171 ns170 ns .. 171 nsper elem
cell updatesweier.127/m=12150,n=3500weier127per-element1.26 µs1.26 µs .. 1.26 µsper elem
cell updatesweier.127/m=1350,n=3500weier127per-element949 ns948 ns .. 951 nsper elem
cell updatesweier.127/m=5,n=3500weier127per-element260 ns258 ns .. 262 nsper elem
cell updatesweier-jacobian.127/m=12150,n=3500weier127-jacobianper-element969 ns968 ns .. 970 nsper elem
cell updatesweier-jacobian.127/m=1350,n=3500weier127-jacobianper-element789 ns787 ns .. 790 nsper elem
cell updatesweier-jacobian.127/m=150,n=3500weier127-jacobianper-element567 ns566 ns .. 568 nsper elem
cell updatesweier-jacobian.127/m=20,n=3500weier127-jacobianper-element360 ns359 ns .. 361 nsper elem
cell updatesweier-jacobian.127/m=5,n=3500weier127-jacobianper-element226 ns225 ns .. 226 nsper elem
peel, per differencexor-sha256.64/d=1350,m=2700,prefilter=true,batch=truexorbatch1.17 µs1.17 µs .. 1.17 µsper elem
peel, per differencexor-siphash.64/d=1350,m=2700,prefilter=true,batch=truexor-siphashbatch1.13 µs1.13 µs .. 1.13 µsper elem
peel, per differencebinary.109/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_109batch12.4 µs12.4 µs .. 12.4 µsper elem
peel, per differencebinary-lambda.109/d=1350,m=2700,prefilter=true,batch=true,h2c=ti-addendgf2_109-lambdabatch9.59 µs9.58 µs .. 9.60 µsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_109-ubatch9.72 µs9.71 µs .. 9.74 µsper elem
peel, per differencebinary-w.109/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_109-wbatch9.66 µs9.64 µs .. 9.67 µsper elem
peel, per differencebinary.122/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122batch7.76 µs7.74 µs .. 7.77 µsper elem
peel, per differencebinary.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122-glsbatch7.35 µs7.34 µs .. 7.37 µsper elem
peel, per differencebinary-lambda.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=ti-addendgf2_122-gls-lambdabatch6.00 µs5.99 µs .. 6.01 µsper elem
peel, per differencebinary-u.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122-gls-ubatch5.98 µs5.98 µs .. 5.99 µsper elem
peel, per differencebinary-w.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122-gls-wbatch6.05 µs6.05 µs .. 6.06 µsper elem
peel, per differencebinary-lambda.122/d=1350,m=2700,prefilter=true,batch=true,h2c=ti-addendgf2_122-lambdabatch6.09 µs6.08 µs .. 6.10 µsper elem
peel, per differencebinary-u.122/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122-ubatch6.00 µs5.99 µs .. 6.01 µsper elem
peel, per differencebinary-w.122/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122-wbatch6.04 µs6.02 µs .. 6.06 µsper elem
peel, per differencebinary.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_127batch6.25 µs6.24 µs .. 6.26 µsper elem
peel, per differencebinary-lambda.127/d=1350,m=2700,prefilter=true,batch=true,h2c=ti-addendgf2_127-lambdabatch4.90 µs4.90 µs .. 4.91 µsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch5.07 µs5.04 µs .. 5.12 µsper elem
peel, per differencebinary-w.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch4.93 µs4.92 µs .. 4.93 µsper elem
peel, per differenceedwards.127/d=10000,m=20000,prefilter=false,batch=false,h2c=tiedwards127per-element4.75 µs4.74 µs .. 4.76 µsper elem
peel, per differenceedwards.127/d=10000,m=20000,prefilter=false,batch=true,h2c=tiedwards127batch3.78 µs3.78 µs .. 3.79 µsper elem
peel, per differenceedwards.127/d=10000,m=20000,prefilter=true,batch=false,h2c=tiedwards127per-element3.76 µs3.76 µs .. 3.77 µsper elem
peel, per differenceedwards.127/d=10000,m=20000,prefilter=true,batch=true,h2c=tiedwards127batch3.20 µs3.20 µs .. 3.20 µsper elem
peel, per differenceedwards.127/d=10000,m=20000,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127edwards127batch2.97 µs2.97 µs .. 2.97 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=false,batch=false,h2c=tiedwards127per-element4.39 µs4.39 µs .. 4.40 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=false,batch=true,h2c=tiedwards127batch3.43 µs3.42 µs .. 3.43 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=true,batch=false,h2c=tiedwards127per-element3.42 µs3.41 µs .. 3.43 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiedwards127batch2.86 µs2.85 µs .. 2.86 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127edwards127batch2.61 µs2.60 µs .. 2.61 µsper elem
peel, per differenceedwards.127/d=150,m=300,prefilter=false,batch=false,h2c=tiedwards127per-element4.29 µs4.29 µs .. 4.30 µsper elem
peel, per differenceedwards.127/d=150,m=300,prefilter=false,batch=true,h2c=tiedwards127batch3.32 µs3.32 µs .. 3.33 µsper elem
peel, per differenceedwards.127/d=150,m=300,prefilter=true,batch=false,h2c=tiedwards127per-element3.07 µs3.07 µs .. 3.07 µsper elem
peel, per differenceedwards.127/d=150,m=300,prefilter=true,batch=true,h2c=tiedwards127batch2.53 µs2.53 µs .. 2.54 µsper elem
peel, per differenceedwards.127/d=20,m=40,prefilter=false,batch=false,h2c=tiedwards127per-element3.23 µs3.22 µs .. 3.23 µsper elem
peel, per differenceedwards.127/d=20,m=40,prefilter=false,batch=true,h2c=tiedwards127batch2.46 µs2.46 µs .. 2.47 µsper elem
peel, per differenceedwards.127/d=20,m=40,prefilter=true,batch=false,h2c=tiedwards127per-element2.60 µs2.59 µs .. 2.60 µsper elem
peel, per differenceedwards.127/d=20,m=40,prefilter=true,batch=true,h2c=tiedwards127batch2.15 µs2.15 µs .. 2.15 µsper elem
peel, per differenceedwards.127/d=4,m=8,prefilter=false,batch=false,h2c=tiedwards127per-element2.03 µs2.03 µs .. 2.03 µsper elem
peel, per differenceedwards.127/d=4,m=8,prefilter=false,batch=true,h2c=tiedwards127batch1.79 µs1.78 µs .. 1.80 µsper elem
peel, per differenceedwards.127/d=4,m=8,prefilter=true,batch=false,h2c=tiedwards127per-element2.12 µs2.11 µs .. 2.12 µsper elem
peel, per differenceedwards.127/d=4,m=8,prefilter=true,batch=true,h2c=tiedwards127batch1.87 µs1.86 µs .. 1.87 µsper elem
peel, per differenceedwards.127/d=4,m=8,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127edwards127batch1.45 µs1.45 µs .. 1.45 µsper elem
peel, per differenceweier.127/d=10000,m=20000,prefilter=true,batch=true,h2c=tiweier127batch3.70 µs3.69 µs .. 3.72 µsper elem
peel, per differenceweier.127/d=10000,m=20000,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127batch3.51 µs3.50 µs .. 3.51 µsper elem
peel, per differenceweier.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier127batch3.21 µs3.21 µs .. 3.22 µsper elem
peel, per differenceweier.127/d=1350,m=2700,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127batch3.07 µs3.06 µs .. 3.07 µsper elem
peel, per differenceweier.127/d=4,m=8,prefilter=true,batch=true,h2c=tiweier127batch1.35 µs1.34 µs .. 1.35 µsper elem
peel, per differenceweier.127/d=4,m=8,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127batch1.36 µs1.36 µs .. 1.36 µsper elem
peel, per differenceweier-jacobian.127/d=10000,m=20000,prefilter=false,batch=false,h2c=tiweier127-jacobianper-element4.00 µs3.99 µs .. 4.00 µsper elem
peel, per differenceweier-jacobian.127/d=10000,m=20000,prefilter=false,batch=true,h2c=tiweier127-jacobianbatch4.01 µs4.00 µs .. 4.02 µsper elem
peel, per differenceweier-jacobian.127/d=10000,m=20000,prefilter=true,batch=false,h2c=tiweier127-jacobianper-element3.46 µs3.45 µs .. 3.46 µsper elem
peel, per differenceweier-jacobian.127/d=10000,m=20000,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch3.51 µs3.49 µs .. 3.53 µsper elem
peel, per differenceweier-jacobian.127/d=10000,m=20000,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianbatch3.26 µs3.25 µs .. 3.27 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=false,batch=false,h2c=tiweier127-jacobianper-element3.57 µs3.57 µs .. 3.58 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=false,batch=true,h2c=tiweier127-jacobianbatch3.60 µs3.60 µs .. 3.61 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=true,batch=false,h2c=tiweier127-jacobianper-element3.01 µs3.01 µs .. 3.02 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch3.02 µs3.01 µs .. 3.02 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianbatch2.86 µs2.86 µs .. 2.86 µsper elem
peel, per differenceweier-jacobian.127/d=150,m=300,prefilter=false,batch=false,h2c=tiweier127-jacobianper-element3.21 µs3.21 µs .. 3.22 µsper elem
peel, per differenceweier-jacobian.127/d=150,m=300,prefilter=false,batch=true,h2c=tiweier127-jacobianbatch3.24 µs3.23 µs .. 3.24 µsper elem
peel, per differenceweier-jacobian.127/d=150,m=300,prefilter=true,batch=false,h2c=tiweier127-jacobianper-element2.56 µs2.56 µs .. 2.57 µsper elem
peel, per differenceweier-jacobian.127/d=150,m=300,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch2.56 µs2.55 µs .. 2.56 µsper elem
peel, per differenceweier-jacobian.127/d=20,m=40,prefilter=false,batch=false,h2c=tiweier127-jacobianper-element2.56 µs2.56 µs .. 2.57 µsper elem
peel, per differenceweier-jacobian.127/d=20,m=40,prefilter=false,batch=true,h2c=tiweier127-jacobianbatch2.58 µs2.57 µs .. 2.58 µsper elem
peel, per differenceweier-jacobian.127/d=20,m=40,prefilter=true,batch=false,h2c=tiweier127-jacobianper-element1.99 µs1.99 µs .. 2.00 µsper elem
peel, per differenceweier-jacobian.127/d=20,m=40,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch1.99 µs1.99 µs .. 1.99 µsper elem
peel, per differenceweier-jacobian.127/d=4,m=8,prefilter=false,batch=false,h2c=tiweier127-jacobianper-element1.14 µs1.13 µs .. 1.15 µsper elem
peel, per differenceweier-jacobian.127/d=4,m=8,prefilter=false,batch=true,h2c=tiweier127-jacobianbatch1.16 µs1.16 µs .. 1.16 µsper elem
peel, per differenceweier-jacobian.127/d=4,m=8,prefilter=true,batch=false,h2c=tiweier127-jacobianper-element1.21 µs1.21 µs .. 1.22 µsper elem
peel, per differenceweier-jacobian.127/d=4,m=8,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch1.24 µs1.24 µs .. 1.24 µsper elem
peel, per differenceweier-jacobian.127/d=4,m=8,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianbatch1.28 µs1.28 µs .. 1.28 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=10xorper-element831 ns830 ns .. 832 nsper elem
rateless encode and decode, per differencexor-sha256.64/d=100xorper-element1.45 µs1.44 µs .. 1.45 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=1000xorper-element2.41 µs2.41 µs .. 2.41 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=10000xorper-element4.34 µs4.32 µs .. 4.36 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=100000xorper-element11.2 µs11.1 µs .. 11.2 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=20xorper-element1.01 µs1.00 µs .. 1.01 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=40xorper-element1.17 µs1.17 µs .. 1.18 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=50000xorper-element8.05 µs8.02 µs .. 8.10 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10xor-siphashper-element711 ns709 ns .. 713 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=10,map=mcg64xor-siphashper-element695 ns694 ns .. 696 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=100xor-siphashper-element1.29 µs1.29 µs .. 1.30 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100,map=mcg64xor-siphashper-element1.27 µs1.26 µs .. 1.27 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=1000xor-siphashper-element2.26 µs2.25 µs .. 2.26 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=1000,map=mcg64xor-siphashper-element2.19 µs2.18 µs .. 2.19 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000xor-siphashper-element4.19 µs4.16 µs .. 4.25 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000,map=chacha8xor-siphashper-element4.88 µs4.87 µs .. 4.90 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000,map=mcg64xor-siphashper-element4.05 µs4.04 µs .. 4.06 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000xor-siphashper-element11.0 µs10.9 µs .. 11.0 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000,map=chacha8xor-siphashper-element16.8 µs16.7 µs .. 16.8 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000,map=mcg64xor-siphashper-element10.9 µs10.8 µs .. 11.1 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=20xor-siphashper-element867 ns866 ns .. 869 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=20,map=mcg64xor-siphashper-element861 ns860 ns .. 862 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=40xor-siphashper-element1.03 µs1.03 µs .. 1.03 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=40,map=mcg64xor-siphashper-element1.00 µs999 ns .. 1.01 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=50000xor-siphashper-element7.90 µs7.86 µs .. 7.94 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=50000,map=mcg64xor-siphashper-element7.18 µs7.15 µs .. 7.23 µsper elem
rateless encode and decode, per differencebinary.109/d=1000,h2c=tigf2_109per-element71.0 µs70.7 µs .. 71.2 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=1000,h2c=ti-addendgf2_109-lambdaper-element62.0 µs61.5 µs .. 62.7 µsper elem
rateless encode and decode, per differencebinary-u.109/d=1000,h2c=tigf2_109-uper-element61.4 µs61.0 µs .. 61.9 µsper elem
rateless encode and decode, per differencebinary-w.109/d=1000,h2c=tigf2_109-wper-element62.2 µs61.9 µs .. 62.4 µsper elem
rateless encode and decode, per differencebinary.122/d=1000,h2c=tigf2_122per-element30.9 µs30.7 µs .. 31.1 µsper elem
rateless encode and decode, per differencebinary.122-gls/d=1000,h2c=tigf2_122-glsper-element28.1 µs28.0 µs .. 28.1 µsper elem
rateless encode and decode, per differencebinary-lambda.122-gls/d=1000,h2c=ti-addendgf2_122-gls-lambdaper-element23.7 µs23.6 µs .. 23.9 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=1000,h2c=tigf2_122-gls-uper-element22.8 µs22.7 µs .. 22.9 µsper elem
rateless encode and decode, per differencebinary-w.122-gls/d=1000,h2c=tigf2_122-gls-wper-element23.8 µs23.7 µs .. 23.8 µsper elem
rateless encode and decode, per differencebinary-lambda.122/d=1000,h2c=ti-addendgf2_122-lambdaper-element23.8 µs23.6 µs .. 24.1 µsper elem
rateless encode and decode, per differencebinary-u.122/d=1000,h2c=tigf2_122-uper-element22.8 µs22.7 µs .. 22.9 µsper elem
rateless encode and decode, per differencebinary-w.122/d=1000,h2c=tigf2_122-wper-element23.7 µs23.6 µs .. 23.8 µsper elem
rateless encode and decode, per differencebinary.127/d=10,h2c=ti,map=mcg64gf2_127per-element10.5 µs10.5 µs .. 10.5 µsper elem
rateless encode and decode, per differencebinary.127/d=100,h2c=ti,map=mcg64gf2_127per-element17.1 µs17.1 µs .. 17.2 µsper elem
rateless encode and decode, per differencebinary.127/d=1000,h2c=tigf2_127per-element24.1 µs24.1 µs .. 24.2 µsper elem
rateless encode and decode, per differencebinary.127/d=1000,h2c=ti,map=mcg64gf2_127per-element24.2 µs24.1 µs .. 24.3 µsper elem
rateless encode and decode, per differencebinary.127/d=10000,h2c=ti,map=chacha8gf2_127per-element34.1 µs33.9 µs .. 34.3 µsper elem
rateless encode and decode, per differencebinary.127/d=10000,h2c=ti,map=mcg64gf2_127per-element32.2 µs32.1 µs .. 32.3 µsper elem
rateless encode and decode, per differencebinary.127/d=100000,h2c=ti,map=chacha8gf2_127per-element55.2 µs55.0 µs .. 55.3 µsper elem
rateless encode and decode, per differencebinary.127/d=100000,h2c=ti,map=mcg64gf2_127per-element49.7 µs49.6 µs .. 49.9 µsper elem
rateless encode and decode, per differencebinary.127/d=20,h2c=ti,map=mcg64gf2_127per-element12.6 µs12.6 µs .. 12.6 µsper elem
rateless encode and decode, per differencebinary.127/d=40,h2c=ti,map=mcg64gf2_127per-element14.5 µs14.4 µs .. 14.6 µsper elem
rateless encode and decode, per differencebinary.127/d=50000,h2c=ti,map=mcg64gf2_127per-element43.1 µs43.0 µs .. 43.2 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=1000,h2c=ti-addendgf2_127-lambdaper-element19.8 µs19.7 µs .. 19.8 µsper elem
rateless encode and decode, per differencebinary-u.127/d=1000,h2c=pornin-addendgf2_127-uper-element18.1 µs18.0 µs .. 18.2 µsper elem
rateless encode and decode, per differencebinary-w.127/d=1000,h2c=pornin-addendgf2_127-wper-element18.3 µs18.2 µs .. 18.3 µsper elem
rateless encode and decode, per differenceedwards.127/d=10,h2c=tiedwards127per-element5.95 µs5.90 µs .. 6.03 µsper elem
rateless encode and decode, per differenceedwards.127/d=100,h2c=tiedwards127per-element8.21 µs8.19 µs .. 8.22 µsper elem
rateless encode and decode, per differenceedwards.127/d=1000,h2c=tiedwards127per-element10.1 µs10.0 µs .. 10.1 µsper elem
rateless encode and decode, per differenceedwards.127/d=10000,h2c=tiedwards127per-element13.0 µs12.9 µs .. 13.0 µsper elem
rateless encode and decode, per differenceedwards.127/d=100000,h2c=tiedwards127per-element24.3 µs24.2 µs .. 24.3 µsper elem
rateless encode and decode, per differenceedwards.127/d=20,h2c=tiedwards127per-element6.74 µs6.72 µs .. 6.76 µsper elem
rateless encode and decode, per differenceedwards.127/d=40,h2c=tiedwards127per-element7.38 µs7.36 µs .. 7.40 µsper elem
rateless encode and decode, per differenceedwards.127/d=50000,h2c=tiedwards127per-element19.7 µs19.6 µs .. 19.8 µsper elem
rateless encode and decode, per differenceweier.127/d=10,h2c=tiweier127per-element5.02 µs5.00 µs .. 5.03 µsper elem
rateless encode and decode, per differenceweier.127/d=1000,h2c=tiweier127per-element9.73 µs9.70 µs .. 9.76 µsper elem
rateless encode and decode, per differenceweier.127/d=100000,h2c=tiweier127per-element25.4 µs25.3 µs .. 25.6 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=10,h2c=tiweier127-jacobianper-element4.70 µs4.69 µs .. 4.71 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=100,h2c=tiweier127-jacobianper-element6.84 µs6.81 µs .. 6.87 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=1000,h2c=tiweier127-jacobianper-element9.06 µs9.00 µs .. 9.11 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=10000,h2c=tiweier127-jacobianper-element12.2 µs12.1 µs .. 12.2 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=100000,h2c=tiweier127-jacobianper-element23.5 µs23.5 µs .. 23.5 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=20,h2c=tiweier127-jacobianper-element5.38 µs5.37 µs .. 5.40 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=40,h2c=tiweier127-jacobianper-element6.08 µs6.06 µs .. 6.10 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=50000,h2c=tiweier127-jacobianper-element18.6 µs18.4 µs .. 18.7 µsper elem
mapping, per indexchacha8/nextmappingper-element9.68 ns9.67 ns .. 9.70 nsper elem
mapping, per indexmcg64/nextmappingper-element4.32 ns4.31 ns .. 4.33 nsper elem
mapping, per indexsha256-ctr/nextmappingper-element20.0 ns19.9 ns .. 20.0 nsper elem
mapping, per indexxoshiro256pp/nextmappingper-element4.80 ns4.79 ns .. 4.81 nsper elem
mapping, per itemchacha8/item,m=12150mappingper-element289 ns289 ns .. 290 nsper elem
mapping, per itemchacha8/item,m=1350mappingper-element244 ns244 ns .. 244 nsper elem
mapping, per itemchacha8/item,m=150mappingper-element196 ns196 ns .. 197 nsper elem
mapping, per itemchacha8/item,m=20mappingper-element150 ns150 ns .. 150 nsper elem
mapping, per itemchacha8/item,m=5mappingper-element116 ns116 ns .. 116 nsper elem
mapping, per itemmcg64/item,m=12150mappingper-element189 ns188 ns .. 189 nsper elem
mapping, per itemmcg64/item,m=1350mappingper-element149 ns149 ns .. 149 nsper elem
mapping, per itemmcg64/item,m=150mappingper-element106 ns106 ns .. 106 nsper elem
mapping, per itemmcg64/item,m=20mappingper-element62.2 ns62.1 ns .. 62.4 nsper elem
mapping, per itemmcg64/item,m=5mappingper-element28.2 ns28.1 ns .. 28.3 nsper elem
mapping, per itemsha256-ctr/item,m=12150mappingper-element439 ns438 ns .. 439 nsper elem
mapping, per itemsha256-ctr/item,m=1350mappingper-element342 ns341 ns .. 343 nsper elem
mapping, per itemsha256-ctr/item,m=150mappingper-element240 ns240 ns .. 241 nsper elem
mapping, per itemsha256-ctr/item,m=20mappingper-element147 ns146 ns .. 147 nsper elem
mapping, per itemsha256-ctr/item,m=5mappingper-element81.2 ns81.0 ns .. 81.3 nsper elem
mapping, per itemxoshiro256pp/item,m=12150mappingper-element190 ns190 ns .. 190 nsper elem
mapping, per itemxoshiro256pp/item,m=1350mappingper-element146 ns146 ns .. 147 nsper elem
mapping, per itemxoshiro256pp/item,m=150mappingper-element105 ns105 ns .. 105 nsper elem
mapping, per itemxoshiro256pp/item,m=20mappingper-element59.7 ns59.5 ns .. 59.8 nsper elem
mapping, per itemxoshiro256pp/item,m=5mappingper-element28.9 ns28.8 ns .. 28.9 nsper elem
map digest of an IDprojection-fp127/digest of idmappingper-element14.0 ns14.0 ns .. 14.1 nsper elem
map digest of an IDprojection-fp130/digest of idmappingper-element26.1 ns26.1 ns .. 26.2 nsper elem
map digest of an IDprojection-gf2_127/digest of idmappingper-element114 ns114 ns .. 114 nsper elem
map digest of an IDsalted-sha256/digest of idmappingper-element50.2 ns50.1 ns .. 50.3 nsper elem
per-salt keysprojection-fp127/keysmappingper-element374 ns373 ns .. 374 nsper elem
per-salt keysprojection-fp130/keysmappingper-element388 ns387 ns .. 388 nsper elem
per-salt keysprojection-gf2_127/keysmappingper-element473 ns473 ns .. 474 nsper elem
per-salt keyssalted-sha256/keysmappingper-element119 ns119 ns .. 119 nsper elem
item IDsha256/idxorper-element54.2 ns53.3 ns .. 55.2 nsper elem
map digestsalted-sha256/digestmappingper-element50.8 ns50.7 ns .. 51.0 nsper elem

digest

Figure

digest: a bar per benchmark and its 95% confidence-interval box with an estimate line, a panel per operation.digest: a bar per benchmark and its 95% confidence-interval box with an estimate line, a panel per operation.

7 benchmarks
operationbenchmarkfamilymodetime95% CIunit
digestxor-sha256xorper-element52.1 ns51.8 ns .. 52.3 nsper elem
digestgf2_109/batchgf2_109batch1.21 µs1.20 µs .. 1.21 µsper elem
digestgf2_122/batchgf2_122batch717 ns713 ns .. 721 nsper elem
digestgf2_122-gls/batchgf2_122-glsbatch688 ns684 ns .. 692 nsper elem
digestgf2_127/batchgf2_127batch514 ns511 ns .. 517 nsper elem
digestedwards127/batchedwards127batch1.34 µs1.34 µs .. 1.34 µsper elem
digestweier127/batchweier127batch1.28 µs1.28 µs .. 1.29 µsper elem
Lower bound, every family

One hash plus an addition to each of the cells an item maps to in a sketch of cells (: ; : ; : ; : ; : ), from each family’s fastest hash and addition in any representation, without conversions; the only estimate for families without group-trait benchmarks.

familyhashinghashhash timeaddadd timem=5m=20m=150m=1350m=12150
gf2_109one at a timegf2_109/pornin map x15.27 µsbinary.109/mode=throughput676 ns7.22 µs8.84 µs11.5 µs14.4 µs17.4 µs
gf2_109batchedbinary.109/mode=batch,n=1024814 nsbinary.109/mode=throughput676 ns2.77 µs4.39 µs7.03 µs9.98 µs13.0 µs
gf2_109-lambdaone at a timegf2_109-lambda/pornin map x1 to (x, λ)5.09 µsbinary-lambda.109/mode=throughput545 ns6.67 µs7.97 µs10.1 µs12.5 µs14.9 µs
gf2_109-lambdabatchedbinary-lambda.109/mode=batch,n=1024814 nsbinary-lambda.109/mode=throughput545 ns2.39 µs3.70 µs5.82 µs8.21 µs10.6 µs
gf2_109-uone at a timegf2_109-u/pornin map x1 to (u, v)5.19 µsbinary-u.109/mode=throughput488 ns6.61 µs7.78 µs9.68 µs11.8 µs14.0 µs
gf2_109-ubatchedbinary-u.109/mode=batch,n=1024927 nsbinary-u.109/mode=throughput488 ns2.34 µs3.51 µs5.41 µs7.55 µs9.69 µs
gf2_109-wone at a timegf2_109-w/pornin map x1 to (x, λ)5.11 µsbinary-w.109/mode=throughput541 ns6.68 µs7.98 µs10.1 µs12.5 µs14.8 µs
gf2_109-wbatchedbinary-w.109/mode=batch,n=1024805 nsbinary-w.109/mode=throughput541 ns2.38 µs3.67 µs5.78 µs8.15 µs10.5 µs
gf2_122one at a timegf2_122/pornin map x11.08 µsbinary.122/mode=throughput390 ns2.21 µs3.14 µs4.67 µs6.37 µs8.08 µs
gf2_122batchedbinary.122/mode=batch,n=1024488 nsbinary.122/mode=throughput390 ns1.62 µs2.55 µs4.07 µs5.78 µs7.49 µs
gf2_122-glsone at a timegf2_122-gls/pornin map x11.02 µsbinary.122-gls/mode=throughput370 ns2.09 µs2.98 µs4.42 µs6.04 µs7.67 µs
gf2_122-glsbatchedbinary.122-gls/mode=batch,n=1024456 nsbinary.122-gls/mode=throughput370 ns1.53 µs2.41 µs3.86 µs5.48 µs7.10 µs
gf2_122-gls-lambdaone at a timegf2_122-gls-lambda/pornin map x1 to (x, λ)941 nsbinary-lambda.122-gls/mode=throughput310 ns1.84 µs2.58 µs3.79 µs5.15 µs6.51 µs
gf2_122-gls-lambdabatchedbinary-lambda.122-gls/mode=batch,n=1024455 nsbinary-lambda.122-gls/mode=throughput310 ns1.35 µs2.10 µs3.31 µs4.66 µs6.03 µs
gf2_122-gls-uone at a timegf2_122-gls-u/pornin map x1 to (u, v)1.01 µsbinary-u.122-gls/mode=throughput276 ns1.81 µs2.47 µs3.55 µs4.75 µs5.96 µs
gf2_122-gls-ubatchedbinary-u.122-gls/mode=batch,n=1024513 nsbinary-u.122-gls/mode=throughput276 ns1.31 µs1.97 µs3.05 µs4.25 µs5.46 µs
gf2_122-gls-wone at a timegf2_122-gls-w/pornin map x1 to (x, λ)949 nsbinary-w.122-gls/mode=throughput310 ns1.85 µs2.59 µs3.80 µs5.15 µs6.51 µs
gf2_122-gls-wbatchedbinary-w.122-gls/mode=batch,n=1024444 nsbinary-w.122-gls/mode=throughput310 ns1.34 µs2.08 µs3.29 µs4.64 µs6.00 µs
gf2_122-lambdaone at a timegf2_122-lambda/pornin map x1 to (x, λ)925 nsbinary-lambda.122/mode=throughput307 ns1.82 µs2.55 µs3.75 µs5.09 µs6.44 µs
gf2_122-lambdabatchedbinary-lambda.122/mode=batch,n=1024487 nsbinary-lambda.122/mode=throughput307 ns1.38 µs2.11 µs3.31 µs4.65 µs6.00 µs
gf2_122-uone at a timegf2_122-u/pornin map x1 to (u, v)1.00 µsbinary-u.122/mode=throughput277 ns1.81 µs2.47 µs3.55 µs4.77 µs5.99 µs
gf2_122-ubatchedbinary-u.122/mode=batch,n=1024555 nsbinary-u.122/mode=throughput277 ns1.36 µs2.02 µs3.10 µs4.32 µs5.54 µs
gf2_122-wone at a timegf2_122-w/pornin map x1 to (x, λ)929 nsbinary-w.122/mode=throughput307 ns1.82 µs2.55 µs3.75 µs5.09 µs6.44 µs
gf2_122-wbatchedbinary-w.122/mode=batch,n=1024458 nsbinary-w.122/mode=throughput307 ns1.35 µs2.08 µs3.28 µs4.62 µs5.97 µs
gf2_127one at a timegf2_127/pornin map x1966 nsbinary.127/mode=latency307 ns1.86 µs2.59 µs3.79 µs5.13 µs6.48 µs
gf2_127batchedbinary.127/mode=batch,n=1024347 nsbinary.127/mode=latency307 ns1.24 µs1.97 µs3.17 µs4.51 µs5.86 µs
gf2_127-lambdaone at a timegf2_127-lambda/pornin map x1 to (x, λ)889 nsbinary-lambda.127/mode=throughput249 ns1.61 µs2.20 µs3.17 µs4.26 µs5.35 µs
gf2_127-lambdabatchedbinary-lambda.127/mode=batch,n=1024347 nsbinary-lambda.127/mode=throughput249 ns1.07 µs1.66 µs2.63 µs3.72 µs4.81 µs
gf2_127-uone at a timegf2_127-u/pornin map x1 to (u, v)939 nsbinary-u.127/mode=throughput220 ns1.58 µs2.10 µs2.96 µs3.92 µs4.89 µs
gf2_127-ubatchedgf2_127-u/pornin map x1 to (u, v), batched426 nsbinary-u.127/mode=throughput220 ns1.06 µs1.59 µs2.45 µs3.41 µs4.37 µs
gf2_127-wone at a timegf2_127-w/pornin map x1 to (x, λ)892 nsbinary-w.127/mode=throughput249 ns1.61 µs2.21 µs3.18 µs4.27 µs5.36 µs
gf2_127-wbatchedgf2_127-w/pornin map x1 to (x, λ), batched360 nsbinary-w.127/mode=throughput249 ns1.08 µs1.68 µs2.65 µs3.73 µs4.82 µs
edwards127one at a timeedwards.127/mode=indep1.25 µsedwards.127/mode=throughput26.9 ns1.33 µs1.39 µs1.50 µs1.61 µs1.73 µs
edwards127batchededwards.127/mode=batch,n=10241.25 µsedwards.127/mode=throughput26.9 ns1.33 µs1.40 µs1.50 µs1.62 µs1.74 µs
weier127one at a timeweier.127/mode=indep1.22 µsweier.127/mode=throughput58.1 ns1.39 µs1.53 µs1.75 µs2.01 µs2.26 µs
weier127batchedweier.127/mode=batch,n=10241.23 µsweier.127/mode=throughput58.1 ns1.39 µs1.53 µs1.76 µs2.01 µs2.27 µs
weier127-jacobianone at a timeweier-jacobian.127/mode=indep1.22 µsweier-jacobian.127/mode=throughput47.3 ns1.35 µs1.47 µs1.65 µs1.86 µs2.07 µs
weier127-jacobianbatchedweier-jacobian.127/mode=batch,n=10241.22 µsweier-jacobian.127/mode=throughput47.3 ns1.36 µs1.47 µs1.66 µs1.86 µs2.07 µs

Intel(R) Xeon(R) W-1390P @ 3.50GHz · rustc 1.98.1 · RUSTFLAGS=-C target-cpu=x86-64 · ef9e82d39fbf · full profile · 2026-10-09