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 Apple M4 · generic · full · ef9e82d3

Run Apple M4 · generic · full · ef9e82d3 started 2026-10-08T07:13:46Z on Apple M4 (macOS 27.0.1, arm64) and timed commit ef9e82d39fbf06c605e1740360370f0003dc4ca4, built by rustc 1.98.1 (48a229cea 2026-09-01) with RUSTFLAGS -C target-cpu=generic, in the full profile.

790 benchmarks from run Apple M4 · 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 94 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.8155 ns (7.79× the best)106 ns (10.64× the best)88.0 ns (tied for the best, within noise)227 ns (1.27× the best)2.33 µs (1.71× the best)211 ms (7.33× the best)Rust (AGM), PARInone
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators; hashed straight to : no prepare62.8132 ns (6.60× the best)87.0 ns (8.72× the best)87.9 ns (tied for the best, within noise)179 ns (best)1.96 µs (1.44× the best)179 ms (6.21× 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.8131 ns (6.58× the best)76.5 ns (7.67× the best)89.2 ns (1.01× the best)184 ns (1.03× the best)1.96 µs (1.44× the best)178 ms (6.19× 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.8116 ns (5.84× the best)76.5 ns (7.67× the best)121 ns (1.38× the best)213 ns (1.19× the best)1.79 µs (1.31× the best)158 ms (5.49× the best)Rust (AGM), PARInone
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended60.3263 ns (13.20× the best)202 ns (20.28× the best)187 ns (2.12× the best)413 ns (2.31× the best)3.98 µs (2.92× the best)358 ms (12.42× 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.3217 ns (10.90× the best)156 ns (15.63× the best)186 ns (2.12× the best)361 ns (2.02× the best)3.31 µs (2.43× the best)295 ms (10.26× the best)Rust (AGM), PARIgf2_122-w, gf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
gf2_122-wincompleteλ-projective, w codec60.3211 ns (10.58× the best)130 ns (13.07× the best)153 ns (1.74× the best)329 ns (1.83× the best)3.19 µs (2.34× the best)287 ms (9.95× the best)Rust (AGM), PARIgf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
gf2_122-uunscaled (X:S:Z), w codec60.3183 ns (9.19× the best)132 ns (13.26× the best)204 ns (2.32× the best)392 ns (2.19× the best)2.88 µs (2.11× the best)249 ms (8.66× the best)Rust (AGM), PARIgf2_127, gf2_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.8246 ns (12.33× the best)194 ns (19.45× the best)162 ns (1.85× the best)353 ns (1.97× the best)3.69 µs (2.71× the best)334 ms (11.60× 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.8216 ns (10.85× the best)156 ns (15.63× the best)163 ns (1.85× the best)327 ns (1.82× the best)3.26 µs (2.39× the best)294 ms (10.21× the best)Rust (AGM), PARIgf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
gf2_122-gls-wincompleteλ-projective, w codec59.8217 ns (10.87× the best)130 ns (13.01× the best)138 ns (1.57× the best)312 ns (1.74× the best)3.25 µs (2.39× the best)295 ms (10.23× the best)Rust (AGM), PARIgf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
gf2_122-gls-uunscaled (X:S:Z), w codec59.8182 ns (9.16× the best)133 ns (13.32× the best)187 ns (2.13× the best)360 ns (2.01× the best)2.84 µs (2.08× the best)248 ms (8.62× the best)Rust (AGM), PARIgf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended53.8403 ns (20.23× the best)306 ns (30.66× the best)263 ns (2.99× the best)614 ns (3.43× the best)6.08 µs (4.47× the best)548 ms (19.03× 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.8331 ns (16.63× the best)221 ns (22.20× the best)263 ns (2.99× the best)511 ns (2.85× the best)5.01 µs (3.68× the best)451 ms (15.65× 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-wincompleteλ-projective, w codec53.8332 ns (16.67× the best)204 ns (20.42× the best)240 ns (2.73× the best)517 ns (2.88× the best)5.02 µs (3.69× the best)452 ms (15.68× 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 codec; Pornin x1: hash to addend; output already an addend53.8289 ns (14.53× the best)206 ns (20.63× the best)319 ns (3.62× the best)593 ns (3.31× the best)4.52 µs (3.32× the best)394 ms (13.68× 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.319.9 ns (best)21.7 ns (2.18× the best)485 ns (5.51× the best)1.09 µs (6.09× the best)1.36 µs (best)28.8 ms (best)PARInone
weier127short Weierstrass, projective += affine63.344.7 ns (2.24× the best)9.97 ns (best)484 ns (5.51× the best)1.03 µs (5.75× the best)1.64 µs (1.20× the best)62.4 ms (2.17× the best)PARInone
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine63.336.6 ns (1.84× the best)15.3 ns (1.54× the best)483 ns (5.49× the best)1.00 µs (5.60× the best)1.50 µs (1.10× the best)51.4 ms (1.78× 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

Apple M4 · generic · full · ef9e82d3
CPUApple M4, 10 cores, 24 GiB
OSmacOS 27.0.1 (Darwin 27.0.0, arm64)
rustcrustc 1.98.1 (48a229cea 2026-09-01)
RUSTFLAGS-C target-cpu=generic
field backend featuresneon
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-08T07:13:46Z .. 2026-10-08T09:30:18Z

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

phaseseconds1-minute average, meanrunnable, meanrunnable, most
idle before252.101.012.0
compare5152.022.019.0
compare1092551.931.983.9
compare1224502.132.1411.0
group24352.092.0818.0
group wide11401.971.9715.1
riblt mapping3302.052.028.0
riblt plan602.072.173.1
riblt28752.112.1318.0
idle after303.754.187.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
binary-u.127lead
binary-w.127lead
binary-lambda.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-addendbufferfp127fp127
binary-u.109pornin-addendspot
binary-u.122tispot
binary-u.122-glstispot
binary-u.127pornin-addendbufferfp127fp127
binary-w.109tispot
binary-w.122tispot
binary-w.122-glstispot
binary-w.127pornin-addendbufferfp127fp127
binary.109tispot
binary.122tispot
binary.122-glstispot
binary.127tispot
edwards.127tifullfp130fp127
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): 38.0 ns at , 43.8 ns at , 54.4 ns at , 69.1 ns at , 90.1 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 formulas196 ns (1.09× the best)31.2 ns (68.79× the best)155 ns (7.79× the best)715 ns (1.22× the best)1.09 µs (1.25× the best)1.71 µs (1.29× the best)2.40 µs (1.68× the best)3.11 µs (2.02× the best)
gf2_127compare suitePornin x1: hash to addend; output already an addend232 ns (1.29× the best)in the hash155 ns (7.79× the best)720 ns (1.22× the best)1.10 µs (1.26× the best)1.71 µs (1.29× the best)2.41 µs (1.68× the best)3.11 µs (2.02× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators196 ns (1.09× the best)56.6 ns (124.81× the best)132 ns (6.60× the best)672 ns (1.14× the best)992 ns (1.14× the best)1.52 µs (1.14× the best)2.11 µs (1.47× the best)2.71 µs (1.76× the best)
gf2_127-lambdaincompletecompare suitehashed straight to : no prepare179 ns (best)in the hash132 ns (6.60× the best)599 ns (1.02× the best)919 ns (1.05× the best)1.44 µs (1.09× the best)2.03 µs (1.42× the best)2.63 µs (1.71× the best)
gf2_127-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend184 ns (1.03× the best)in the hash132 ns (6.60× the best)604 ns (1.03× the best)924 ns (1.06× the best)1.45 µs (1.09× the best)2.04 µs (1.42× the best)2.64 µs (1.71× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine221 ns (1.23× the best)0.97 ns (2.14× the best)131 ns (6.58× the best)640 ns (1.09× the best)959 ns (1.10× the best)1.48 µs (1.12× the best)2.07 µs (1.45× the best)2.67 µs (1.73× the best)
gf2_127-wincompletecompare suitePornin x1: hash to addend; output already an addend184 ns (1.03× the best)in the hash131 ns (6.58× the best)603 ns (1.03× the best)922 ns (1.06× the best)1.44 µs (1.09× the best)2.03 µs (1.42× the best)2.63 µs (1.71× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes258 ns (1.44× the best)0.98 ns (2.17× the best)116 ns (5.84× the best)634 ns (1.08× the best)917 ns (1.05× the best)1.38 µs (1.04× the best)1.90 µs (1.33× the best)2.44 µs (1.58× the best)
gf2_127-ucompare suitePornin x1: hash to addend; output already an addend213 ns (1.19× the best)in the hash116 ns (5.84× the best)588 ns (best)871 ns (best)1.34 µs (1.01× the best)1.86 µs (1.30× the best)2.39 µs (1.55× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended350 ns (1.96× the best)63.1 ns (139.03× the best)263 ns (13.20× the best)1.21 µs (2.07× the best)1.85 µs (2.12× the best)2.89 µs (2.17× the best)4.05 µs (2.83× the best)5.23 µs (3.40× the best)
gf2_122compare suitePornin x1: hash to addend; output already an addend510 ns (2.85× the best)in the hash263 ns (13.20× the best)1.31 µs (2.23× the best)1.95 µs (2.23× the best)2.98 µs (2.24× the best)4.15 µs (2.90× the best)5.32 µs (3.46× the best)
gf2_122-lambdaincompleteλ-projective350 ns (1.95× the best)100 ns (220.88× the best)217 ns (10.90× the best)1.12 µs (1.90× the best)1.64 µs (1.88× the best)2.50 µs (1.88× the best)3.46 µs (2.42× the best)4.44 µs (2.88× the best)
gf2_122-lambdaincompletecompare suitehashed straight to : no prepare361 ns (2.02× the best)in the hash217 ns (10.90× the best)1.03 µs (1.75× the best)1.55 µs (1.78× the best)2.41 µs (1.81× the best)3.38 µs (2.36× the best)4.35 µs (2.83× the best)
gf2_122-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend428 ns (2.39× the best)in the hash217 ns (10.90× the best)1.10 µs (1.86× the best)1.62 µs (1.86× the best)2.48 µs (1.86× the best)3.44 µs (2.41× the best)4.42 µs (2.87× the best)
gf2_122-wincompleteλ-projective, w codec328 ns (1.83× the best)0.99 ns (2.17× the best)211 ns (10.58× the best)977 ns (1.66× the best)1.49 µs (1.71× the best)2.32 µs (1.75× the best)3.26 µs (2.28× the best)4.20 µs (2.73× the best)
gf2_122-wincompletecompare suitePornin x1: hash to addend; output already an addend429 ns (2.39× the best)in the hash211 ns (10.58× the best)1.08 µs (1.83× the best)1.59 µs (1.82× the best)2.42 µs (1.82× the best)3.36 µs (2.35× the best)4.30 µs (2.80× the best)
gf2_122-uunscaled (X:S:Z), w codec391 ns (2.18× the best)0.99 ns (2.17× the best)183 ns (9.19× the best)961 ns (1.63× the best)1.40 µs (1.61× the best)2.13 µs (1.60× the best)2.95 µs (2.06× the best)3.77 µs (2.45× the best)
gf2_122-ucompare suitePornin x1: hash to addend; output already an addend622 ns (3.47× the best)in the hash183 ns (9.19× the best)1.19 µs (2.03× the best)1.63 µs (1.88× the best)2.36 µs (1.78× the best)3.18 µs (2.22× the best)4.00 µs (2.60× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended309 ns (1.72× the best)44.3 ns (97.56× the best)246 ns (12.33× the best)1.10 µs (1.88× the best)1.70 µs (1.95× the best)2.67 µs (2.01× the best)3.76 µs (2.62× the best)4.86 µs (3.15× the best)
gf2_122-glscompare suitePornin x1: hash to addend; output already an addend410 ns (2.29× the best)in the hash246 ns (12.33× the best)1.16 µs (1.97× the best)1.75 µs (2.01× the best)2.72 µs (2.05× the best)3.81 µs (2.66× the best)4.91 µs (3.19× the best)
gf2_122-gls-lambdaincompleteλ-projective315 ns (1.76× the best)101 ns (221.53× the best)216 ns (10.85× the best)1.08 µs (1.84× the best)1.60 µs (1.84× the best)2.46 µs (1.85× the best)3.42 µs (2.39× the best)4.39 µs (2.85× the best)
gf2_122-gls-lambdaincompletecompare suitehashed straight to : no prepare327 ns (1.82× the best)in the hash216 ns (10.85× the best)992 ns (1.69× the best)1.51 µs (1.74× the best)2.37 µs (1.78× the best)3.33 µs (2.33× the best)4.30 µs (2.79× the best)
gf2_122-gls-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend404 ns (2.25× the best)in the hash216 ns (10.85× the best)1.07 µs (1.82× the best)1.59 µs (1.83× the best)2.45 µs (1.84× the best)3.41 µs (2.38× the best)4.38 µs (2.84× the best)
gf2_122-gls-wincompleteλ-projective, w codec311 ns (1.73× the best)0.97 ns (2.14× the best)217 ns (10.87× the best)977 ns (1.66× the best)1.50 µs (1.72× the best)2.36 µs (1.77× the best)3.32 µs (2.32× the best)4.29 µs (2.79× the best)
gf2_122-gls-wincompletecompare suitePornin x1: hash to addend; output already an addend404 ns (2.25× the best)in the hash217 ns (10.87× the best)1.07 µs (1.82× the best)1.59 µs (1.83× the best)2.45 µs (1.84× the best)3.41 µs (2.38× the best)4.38 µs (2.85× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec359 ns (2.00× the best)1.01 ns (2.22× the best)182 ns (9.16× the best)927 ns (1.58× the best)1.37 µs (1.57× the best)2.09 µs (1.57× the best)2.90 µs (2.03× the best)3.73 µs (2.42× the best)
gf2_122-gls-ucompare suitePornin x1: hash to addend; output already an addend593 ns (3.31× the best)in the hash182 ns (9.16× the best)1.16 µs (1.97× the best)1.60 µs (1.84× the best)2.32 µs (1.75× the best)3.14 µs (2.19× the best)3.96 µs (2.57× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended518 ns (2.89× the best)95.7 ns (210.88× the best)403 ns (20.23× the best)1.82 µs (3.10× the best)2.79 µs (3.20× the best)4.37 µs (3.29× the best)6.15 µs (4.30× the best)7.94 µs (5.16× the best)
gf2_109compare suitePornin x1: hash to addend; output already an addend636 ns (3.55× the best)in the hash403 ns (20.23× the best)1.84 µs (3.13× the best)2.81 µs (3.23× the best)4.39 µs (3.31× the best)6.17 µs (4.31× the best)7.96 µs (5.17× the best)
gf2_109-lambdaincompleteλ-projective517 ns (2.88× the best)147 ns (324.46× the best)331 ns (16.63× the best)1.66 µs (2.83× the best)2.46 µs (2.82× the best)3.76 µs (2.83× the best)5.23 µs (3.65× the best)6.70 µs (4.36× the best)
gf2_109-lambdaincompletecompare suitehashed straight to : no prepare511 ns (2.85× the best)in the hash331 ns (16.63× the best)1.51 µs (2.57× the best)2.31 µs (2.65× the best)3.61 µs (2.72× the best)5.07 µs (3.55× the best)6.55 µs (4.26× the best)
gf2_109-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend521 ns (2.91× the best)in the hash331 ns (16.63× the best)1.52 µs (2.59× the best)2.32 µs (2.66× the best)3.62 µs (2.72× the best)5.09 µs (3.55× the best)6.56 µs (4.26× the best)
gf2_109-wincompleteλ-projective, w codec516 ns (2.88× the best)0.97 ns (2.14× the best)332 ns (16.67× the best)1.52 µs (2.58× the best)2.32 µs (2.66× the best)3.62 µs (2.73× the best)5.09 µs (3.56× the best)6.57 µs (4.27× the best)
gf2_109-wincompletecompare suitePornin x1: hash to addend; output already an addend522 ns (2.92× the best)in the hash332 ns (16.67× the best)1.52 µs (2.59× the best)2.32 µs (2.67× the best)3.63 µs (2.73× the best)5.10 µs (3.56× the best)6.58 µs (4.27× the best)
gf2_109-uunscaled (X:S:Z), w codec592 ns (3.30× the best)0.98 ns (2.16× the best)289 ns (14.53× the best)1.47 µs (2.50× the best)2.17 µs (2.49× the best)3.31 µs (2.49× the best)4.59 µs (3.21× the best)5.88 µs (3.82× the best)
gf2_109-ucompare suitePornin x1: hash to addend; output already an addend593 ns (3.31× the best)in the hash289 ns (14.53× the best)1.47 µs (2.50× the best)2.17 µs (2.49× the best)3.31 µs (2.49× the best)4.59 µs (3.21× the best)5.88 µs (3.82× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.06 µs (5.94× the best)27.2 ns (59.99× the best)19.9 ns (best)1.19 µs (2.02× the best)1.24 µs (1.42× the best)1.33 µs (best)1.43 µs (best)1.54 µs (best)
weier127short Weierstrass, projective += affine1.03 µs (5.75× the best)0.45 ns (tied for the best, within noise)44.7 ns (2.24× the best)1.20 µs (2.04× the best)1.31 µs (1.51× the best)1.50 µs (1.13× the best)1.71 µs (1.19× the best)1.92 µs (1.25× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.00 µs (5.60× the best)0.46 ns (tied for the best, within noise, 1.01×)36.6 ns (1.84× the best)1.15 µs (1.95× the best)1.24 µs (1.42× the best)1.39 µs (1.05× the best)1.57 µs (1.10× the best)1.75 µs (1.14× 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. The time axis is logarithmic. 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. The time axis is logarithmic. 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 formulas890 ns (1.57× the best)31.6 ns (54.91× the best)155 ns (7.79× the best)1.41 µs (1.45× the best)1.79 µs (1.42× the best)2.40 µs (1.69× the best)3.10 µs (1.94× the best)3.80 µs (2.14× the best)
gf2_127compare suitePornin x1: hash to addend; output already an addend619 ns (1.09× the best)in the hash155 ns (7.79× the best)1.11 µs (1.14× the best)1.48 µs (1.18× the best)2.10 µs (1.48× the best)2.79 µs (1.75× the best)3.50 µs (1.97× the best)
gf2_127compare suitePornin x2: hash to addend; output already an addend1.35 µs (2.38× the best)in the hash155 ns (7.79× the best)1.84 µs (1.89× the best)2.22 µs (1.76× the best)2.83 µs (1.99× the best)3.53 µs (2.21× the best)4.23 µs (2.38× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators880 ns (1.55× the best)412 ns (716.46× the best)132 ns (6.60× the best)1.71 µs (1.76× the best)2.03 µs (1.62× the best)2.56 µs (1.80× the best)3.15 µs (1.97× the best)3.75 µs (2.10× the best)
gf2_127-lambdaincompletecompare suitehashed straight to : no prepare870 ns (1.53× the best)in the hash132 ns (6.60× the best)1.29 µs (1.33× the best)1.61 µs (1.28× the best)2.13 µs (1.50× the best)2.72 µs (1.71× the best)3.32 µs (1.87× the best)
gf2_127-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend567 ns (tied for the best, within noise)in the hash132 ns (6.60× the best)987 ns (1.01× the best)1.31 µs (1.04× the best)1.83 µs (1.29× the best)2.42 µs (1.52× the best)3.02 µs (1.70× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine975 ns (1.72× the best)0.62 ns (1.07× the best)131 ns (6.58× the best)1.39 µs (1.43× the best)1.71 µs (1.36× the best)2.24 µs (1.57× the best)2.82 µs (1.77× the best)3.42 µs (1.92× the best)
gf2_127-wincompletecompare suitePornin x1: hash to addend; output already an addend569 ns (tied for the best, within noise, 1.00×)in the hash131 ns (6.58× the best)987 ns (1.01× the best)1.31 µs (1.04× the best)1.83 µs (1.29× the best)2.42 µs (1.51× the best)3.01 µs (1.69× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes1.00 µs (1.77× the best)0.62 ns (1.07× the best)116 ns (5.84× the best)1.38 µs (1.42× the best)1.66 µs (1.32× the best)2.13 µs (1.49× the best)2.65 µs (1.66× the best)3.18 µs (1.79× the best)
gf2_127-ucompare suitePornin x1: hash to addend; output already an addend598 ns (1.05× the best)in the hash116 ns (5.84× the best)973 ns (best)1.26 µs (best)1.72 µs (1.21× the best)2.24 µs (1.40× the best)2.78 µs (1.56× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended1.16 µs (2.05× the best)64.2 ns (111.60× the best)263 ns (13.20× the best)2.03 µs (2.08× the best)2.66 µs (2.12× the best)3.70 µs (2.60× the best)4.87 µs (3.05× the best)6.04 µs (3.40× the best)
gf2_122compare suitePornin x1: hash to addend; output already an addend897 ns (1.58× the best)in the hash263 ns (13.20× the best)1.70 µs (1.74× the best)2.33 µs (1.86× the best)3.37 µs (2.37× the best)4.53 µs (2.84× the best)5.71 µs (3.21× the best)
gf2_122-lambdaincompleteλ-projective1.18 µs (2.08× the best)521 ns (906.55× the best)217 ns (10.90× the best)2.37 µs (2.44× the best)2.90 µs (2.30× the best)3.75 µs (2.64× the best)4.72 µs (2.95× the best)5.69 µs (3.20× the best)
gf2_122-lambdaincompletecompare suitehashed straight to : no prepare1.18 µs (2.07× the best)in the hash217 ns (10.90× the best)1.84 µs (1.89× the best)2.37 µs (1.88× the best)3.23 µs (2.27× the best)4.19 µs (2.62× the best)5.16 µs (2.90× the best)
gf2_122-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend801 ns (1.41× the best)in the hash217 ns (10.90× the best)1.47 µs (1.51× the best)1.99 µs (1.59× the best)2.85 µs (2.00× the best)3.82 µs (2.39× the best)4.79 µs (2.69× the best)
gf2_122-wincompleteλ-projective, w codec1.21 µs (2.14× the best)0.62 ns (1.07× the best)211 ns (10.58× the best)1.86 µs (1.92× the best)2.37 µs (1.89× the best)3.21 µs (2.25× the best)4.14 µs (2.59× the best)5.09 µs (2.86× the best)
gf2_122-wincompletecompare suitePornin x1: hash to addend; output already an addend799 ns (1.41× the best)in the hash211 ns (10.58× the best)1.45 µs (1.49× the best)1.96 µs (1.56× the best)2.79 µs (1.96× the best)3.73 µs (2.33× the best)4.67 µs (2.63× the best)
gf2_122-uunscaled (X:S:Z), w codec1.27 µs (2.25× the best)0.62 ns (1.07× the best)183 ns (9.19× the best)1.84 µs (1.90× the best)2.29 µs (1.82× the best)3.01 µs (2.12× the best)3.83 µs (2.40× the best)4.65 µs (2.62× the best)
gf2_122-ucompare suitePornin x1: hash to addend; output already an addend857 ns (1.51× the best)in the hash183 ns (9.19× the best)1.43 µs (1.47× the best)1.87 µs (1.49× the best)2.59 µs (1.82× the best)3.41 µs (2.13× the best)4.24 µs (2.38× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended1.20 µs (2.12× the best)44.2 ns (76.84× the best)246 ns (12.33× the best)2.00 µs (2.05× the best)2.59 µs (2.06× the best)3.56 µs (2.50× the best)4.65 µs (2.91× the best)5.75 µs (3.23× the best)
gf2_122-glscompare suitePornin x1: hash to addend; output already an addend865 ns (1.53× the best)in the hash246 ns (12.33× the best)1.62 µs (1.66× the best)2.21 µs (1.76× the best)3.18 µs (2.23× the best)4.27 µs (2.67× the best)5.37 µs (3.02× the best)
gf2_122-gls-lambdaincompleteλ-projective1.18 µs (2.08× the best)524 ns (911.40× the best)216 ns (10.85× the best)2.37 µs (2.43× the best)2.89 µs (2.30× the best)3.74 µs (2.63× the best)4.70 µs (2.94× the best)5.67 µs (3.19× the best)
gf2_122-gls-lambdaincompletecompare suitehashed straight to : no prepare1.16 µs (2.05× the best)in the hash216 ns (10.85× the best)1.82 µs (1.88× the best)2.35 µs (1.87× the best)3.20 µs (2.25× the best)4.16 µs (2.61× the best)5.13 µs (2.88× the best)
gf2_122-gls-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend788 ns (1.39× the best)in the hash216 ns (10.85× the best)1.45 µs (1.49× the best)1.98 µs (1.57× the best)2.83 µs (1.99× the best)3.79 µs (2.37× the best)4.76 µs (2.68× the best)
gf2_122-gls-wincompleteλ-projective, w codec1.24 µs (2.19× the best)0.62 ns (1.08× the best)217 ns (10.87× the best)1.91 µs (1.96× the best)2.43 µs (1.94× the best)3.29 µs (2.31× the best)4.25 µs (2.66× the best)5.22 µs (2.93× the best)
gf2_122-gls-wincompletecompare suitePornin x1: hash to addend; output already an addend791 ns (1.40× the best)in the hash217 ns (10.87× the best)1.46 µs (1.50× the best)1.98 µs (1.58× the best)2.84 µs (1.99× the best)3.80 µs (2.38× the best)4.77 µs (2.68× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec1.25 µs (2.20× the best)0.62 ns (1.07× the best)182 ns (9.16× the best)1.82 µs (1.87× the best)2.26 µs (1.80× the best)2.98 µs (2.10× the best)3.79 µs (2.37× the best)4.62 µs (2.59× the best)
gf2_122-gls-ucompare suitePornin x1: hash to addend; output already an addend843 ns (1.49× the best)in the hash182 ns (9.16× the best)1.41 µs (1.45× the best)1.85 µs (1.47× the best)2.57 µs (1.81× the best)3.39 µs (2.12× the best)4.21 µs (2.37× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended5.86 µs (10.34× the best)95.3 ns (165.70× the best)403 ns (20.23× the best)7.16 µs (7.36× the best)8.13 µs (6.47× the best)9.72 µs (6.83× the best)11.5 µs (7.19× the best)13.3 µs (7.46× the best)
gf2_109compare suitePornin x1: hash to addend; output already an addend3.39 µs (5.98× the best)in the hash403 ns (20.23× the best)4.60 µs (4.72× the best)5.57 µs (4.43× the best)7.15 µs (5.03× the best)8.93 µs (5.59× the best)10.7 µs (6.02× the best)
gf2_109-lambdaincompleteλ-projective5.87 µs (10.35× the best)2.86 µs (4982.19× the best)331 ns (16.63× the best)9.73 µs (10.00× the best)10.5 µs (8.38× the best)11.8 µs (8.32× the best)13.3 µs (8.32× the best)14.8 µs (8.30× the best)
gf2_109-lambdaincompletecompare suitehashed straight to : no prepare5.85 µs (10.31× the best)in the hash331 ns (16.63× the best)6.84 µs (7.03× the best)7.64 µs (6.08× the best)8.95 µs (6.29× the best)10.4 µs (6.52× the best)11.9 µs (6.68× the best)
gf2_109-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend3.28 µs (5.78× the best)in the hash331 ns (16.63× the best)4.28 µs (4.40× the best)5.07 µs (4.04× the best)6.38 µs (4.48× the best)7.84 µs (4.91× the best)9.32 µs (5.24× the best)
gf2_109-wincompleteλ-projective, w codec5.78 µs (10.20× the best)0.62 ns (1.08× the best)332 ns (16.67× the best)6.78 µs (6.97× the best)7.58 µs (6.03× the best)8.89 µs (6.25× the best)10.4 µs (6.48× the best)11.8 µs (6.65× the best)
gf2_109-wincompletecompare suitePornin x1: hash to addend; output already an addend3.27 µs (5.77× the best)in the hash332 ns (16.67× the best)4.28 µs (4.39× the best)5.07 µs (4.04× the best)6.38 µs (4.49× the best)7.85 µs (4.91× the best)9.33 µs (5.24× the best)
gf2_109-uunscaled (X:S:Z), w codec5.87 µs (10.36× the best)0.62 ns (1.08× the best)289 ns (14.53× the best)6.75 µs (6.94× the best)7.45 µs (5.93× the best)8.59 µs (6.04× the best)9.87 µs (6.18× the best)11.2 µs (6.27× the best)
gf2_109-ucompare suitePornin x1: hash to addend; output already an addend3.34 µs (5.89× the best)in the hash289 ns (14.53× the best)4.22 µs (4.33× the best)4.91 µs (3.91× the best)6.05 µs (4.26× the best)7.34 µs (4.59× the best)8.63 µs (4.85× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.07 µs (1.88× the best)573 ns (996.17× the best)19.9 ns (tied for the best, within noise)1.73 µs (1.78× the best)1.79 µs (1.42× the best)1.88 µs (1.32× the best)1.98 µs (1.24× the best)2.09 µs (1.17× the best)
edwards127compare suiteElligator 2 x1: hash + prepare1.32 µs (2.33× the best)573 ns (996.17× the best)19.9 ns (tied for the best, within noise)1.99 µs (2.05× the best)2.04 µs (1.63× the best)2.13 µs (1.50× the best)2.23 µs (1.40× the best)2.34 µs (1.32× the best)
weier127short Weierstrass, projective += affine1.03 µs (1.82× the best)0.58 ns (tied for the best, within noise)44.7 ns (2.24× the best)1.20 µs (1.23× the best)1.31 µs (1.04× the best)1.50 µs (1.05× the best)1.71 µs (1.07× the best)1.93 µs (1.08× the best)
weier127compare suiteSSWU x1: hash + prepare1.12 µs (1.98× the best)0.58 ns (tied for the best, within noise)44.7 ns (2.24× the best)1.29 µs (1.33× the best)1.40 µs (1.12× the best)1.59 µs (1.12× the best)1.80 µs (1.13× the best)2.02 µs (1.13× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.03 µs (1.82× the best)0.57 ns (tied for the best, within noise)36.6 ns (1.84× the best)1.18 µs (1.21× the best)1.27 µs (1.01× the best)1.42 µs (best)1.60 µs (best)1.78 µ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 formulas890 ns196 ns (best)4.5×231.6 ns31.2 ns (68.79× the best)1.0×0462 ns106 ns (10.64× the best)4.4×1446 ns88.0 ns (tied for the best, within noise)5.1×1
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators880 ns196 ns (1.00× the best)4.5×2412 ns56.6 ns (124.81× the best)7.3×1442 ns87.0 ns (8.72× the best)5.1×1447 ns87.9 ns (tied for the best, within noise)5.1×1
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine975 ns221 ns (1.13× the best)4.4×2.20.62 ns0.97 ns (2.14× the best)0.6×0432 ns76.5 ns (7.67× the best)5.7×1447 ns89.2 ns (1.01× the best)5.0×1
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes1.00 µs258 ns (1.32× the best)3.9×2.10.62 ns0.98 ns (2.17× the best)0.6×0438 ns76.5 ns (7.67× the best)5.7×1479 ns121 ns (1.38× the best)4.0×1
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended1.16 µs350 ns (1.79× the best)3.3×1.964.2 ns63.1 ns (139.03× the best)1.0×0618 ns202 ns (20.28× the best)3.1×1607 ns187 ns (2.12× the best)3.3×1
gf2_122-lambdaincompleteλ-projective1.18 µs350 ns (1.79× the best)3.4×2521 ns100 ns (220.88× the best)5.2×1573 ns156 ns (15.63× the best)3.7×1607 ns186 ns (2.12× the best)3.3×1
gf2_122-wincompleteλ-projective, w codec1.21 µs328 ns (1.67× the best)3.7×2.10.62 ns0.99 ns (2.17× the best)0.6×0551 ns130 ns (13.07× the best)4.2×1601 ns153 ns (1.74× the best)3.9×1.1
gf2_122-uunscaled (X:S:Z), w codec1.27 µs391 ns (2.00× the best)3.3×2.10.62 ns0.99 ns (2.17× the best)0.6×0564 ns132 ns (13.26× the best)4.3×1676 ns204 ns (2.32× the best)3.3×1.1
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended1.20 µs309 ns (1.58× the best)3.9×2.144.2 ns44.3 ns (97.56× the best)1.0×0612 ns194 ns (19.45× the best)3.2×1592 ns162 ns (1.85× the best)3.7×1
gf2_122-gls-lambdaincompleteλ-projective1.18 µs315 ns (1.61× the best)3.7×2.1524 ns101 ns (221.53× the best)5.2×1576 ns156 ns (15.63× the best)3.7×1599 ns163 ns (1.85× the best)3.7×1
gf2_122-gls-wincompleteλ-projective, w codec1.24 µs311 ns (1.59× the best)4.0×2.20.62 ns0.97 ns (2.14× the best)0.6×0555 ns130 ns (13.01× the best)4.3×1591 ns138 ns (1.57× the best)4.3×1.1
gf2_122-gls-uunscaled (X:S:Z), w codec1.25 µs359 ns (1.83× the best)3.5×2.10.62 ns1.01 ns (2.22× the best)0.6×0562 ns133 ns (13.32× the best)4.2×1639 ns187 ns (2.13× the best)3.4×1.1
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended5.86 µs518 ns (2.65× the best)11.3×295.3 ns95.7 ns (210.88× the best)1.0×03.03 µs306 ns (30.66× the best)9.9×12.98 µs263 ns (2.99× the best)11.3×1
gf2_109-lambdaincompleteλ-projective5.87 µs517 ns (2.64× the best)11.4×22.86 µs147 ns (324.46× the best)19.4×12.95 µs221 ns (22.20× the best)13.3×12.98 µs263 ns (2.99× the best)11.3×1
gf2_109-wincompleteλ-projective, w codec5.78 µs516 ns (2.64× the best)11.2×1.90.62 ns0.97 ns (2.14× the best)0.6×02.90 µs204 ns (20.42× the best)14.2×12.96 µs240 ns (2.73× the best)12.3×1
gf2_109-uunscaled (X:S:Z), w codec5.87 µs592 ns (3.02× the best)9.9×1.90.62 ns0.98 ns (2.16× the best)0.6×02.95 µs206 ns (20.63× the best)14.3×13.04 µs319 ns (3.62× the best)9.6×1
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.07 µs1.06 µs (5.44× the best)1.0×0573 ns27.2 ns (59.99× the best)21.0×1.1536 ns21.7 ns (2.18× the best)24.7×1485 ns485 ns (5.51× the best)1.0×0
weier127short Weierstrass, projective += affine1.03 µs1.03 µs (5.27× the best)1.0×00.58 ns0.45 ns (best)1.3×0527 ns9.97 ns (best)52.9×1487 ns484 ns (5.51× the best)1.0×0
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.03 µs1.00 µs (5.12× the best)1.0×0.10.57 ns0.46 ns (1.01× the best)1.2×0531 ns15.3 ns (1.54× the best)34.7×1484 ns483 ns (5.49× 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 formulas890 ns (1.01× the best)196 ns (tied for the best, within noise)31.6 ns (54.91× the best)31.2 ns (68.79× the best)462 ns (1.07× the best)106 ns (10.64× the best)446 ns (tied for the best, within noise)88.0 ns (tied for the best, within noise)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators880 ns (best)430 ns (best)247 ns (best)196 ns (tied for the best, within noise, 1.00×)412 ns (716.46× the best)115 ns (81.26× the best)65.7 ns (121.70× the best)56.6 ns (124.81× the best)442 ns (1.02× the best)146 ns (1.72× the best)95.8 ns (4.70× the best)87.0 ns (8.72× the best)447 ns (tied for the best, within noise, 1.00×)149 ns (best)96.8 ns (best)87.9 ns (tied for the best, within noise)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine975 ns (1.11× the best)467 ns (1.08× the best)278 ns (1.13× the best)221 ns (1.13× the best)0.62 ns (1.07× the best)1.85 ns (1.31× the best)1.01 ns (1.88× the best)0.97 ns (2.14× the best)432 ns (best)135 ns (1.59× the best)85.1 ns (4.18× the best)76.5 ns (7.67× the best)447 ns (tied for the best, within noise, 1.00×)153 ns (1.02× the best)97.8 ns (1.01× the best)89.2 ns (1.01× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes1.00 µs (1.14× the best)515 ns (1.20× the best)313 ns (1.27× the best)258 ns (1.32× the best)0.62 ns (1.07× the best)1.85 ns (1.30× the best)1.01 ns (1.87× the best)0.98 ns (2.17× the best)438 ns (1.01× the best)131 ns (1.54× the best)85.9 ns (4.22× the best)76.5 ns (7.67× the best)479 ns (1.07× the best)185 ns (1.24× the best)131 ns (1.35× the best)121 ns (1.38× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended1.16 µs (1.32× the best)350 ns (1.79× the best)64.2 ns (111.60× the best)63.1 ns (139.03× the best)618 ns (1.43× the best)202 ns (20.28× the best)607 ns (1.36× the best)187 ns (2.12× the best)
gf2_122-lambdaincompleteλ-projective1.18 µs (1.34× the best)350 ns (1.79× the best)521 ns (906.55× the best)100 ns (220.88× the best)573 ns (1.33× the best)156 ns (15.63× the best)607 ns (1.36× the best)186 ns (2.12× the best)
gf2_122-wincompleteλ-projective, w codec1.21 µs (1.38× the best)328 ns (1.67× the best)0.62 ns (1.07× the best)0.99 ns (2.17× the best)551 ns (1.28× the best)130 ns (13.07× the best)601 ns (1.35× the best)153 ns (1.74× the best)
gf2_122-uunscaled (X:S:Z), w codec1.27 µs (1.45× the best)391 ns (2.00× the best)0.62 ns (1.07× the best)0.99 ns (2.17× the best)564 ns (1.31× the best)132 ns (13.26× the best)676 ns (1.51× the best)204 ns (2.32× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended1.20 µs (1.37× the best)309 ns (1.58× the best)44.2 ns (76.84× the best)44.3 ns (97.56× the best)612 ns (1.42× the best)194 ns (19.45× the best)592 ns (1.33× the best)162 ns (1.85× the best)
gf2_122-gls-lambdaincompleteλ-projective1.18 µs (1.34× the best)315 ns (1.61× the best)524 ns (911.40× the best)101 ns (221.53× the best)576 ns (1.33× the best)156 ns (15.63× the best)599 ns (1.34× the best)163 ns (1.85× the best)
gf2_122-gls-wincompleteλ-projective, w codec1.24 µs (1.41× the best)311 ns (1.59× the best)0.62 ns (1.08× the best)0.97 ns (2.14× the best)555 ns (1.28× the best)130 ns (13.01× the best)591 ns (1.32× the best)138 ns (1.57× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec1.25 µs (1.42× the best)359 ns (1.83× the best)0.62 ns (1.07× the best)1.01 ns (2.22× the best)562 ns (1.30× the best)133 ns (13.32× the best)639 ns (1.43× the best)187 ns (2.13× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended5.86 µs (6.66× the best)518 ns (2.65× the best)95.3 ns (165.70× the best)95.7 ns (210.88× the best)3.03 µs (7.00× the best)306 ns (30.66× the best)2.98 µs (6.67× the best)263 ns (2.99× the best)
gf2_109-lambdaincompleteλ-projective5.87 µs (6.67× the best)517 ns (2.64× the best)2.86 µs (4982.19× the best)147 ns (324.46× the best)2.95 µs (6.82× the best)221 ns (22.20× the best)2.98 µs (6.68× the best)263 ns (2.99× the best)
gf2_109-wincompleteλ-projective, w codec5.78 µs (6.57× the best)516 ns (2.64× the best)0.62 ns (1.08× the best)0.97 ns (2.14× the best)2.90 µs (6.70× the best)204 ns (20.42× the best)2.96 µs (6.64× the best)240 ns (2.73× the best)
gf2_109-uunscaled (X:S:Z), w codec5.87 µs (6.67× the best)592 ns (3.02× the best)0.62 ns (1.08× the best)0.98 ns (2.16× the best)2.95 µs (6.82× the best)206 ns (20.63× the best)3.04 µs (6.82× the best)319 ns (3.62× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.07 µs (1.21× the best)1.07 µs (2.50× the best)1.07 µs (4.32× the best)1.06 µs (5.44× the best)573 ns (996.17× the best)105 ns (74.13× the best)37.1 ns (68.62× the best)27.2 ns (59.99× the best)536 ns (1.24× the best)99.7 ns (1.17× the best)32.1 ns (1.57× the best)21.7 ns (2.18× the best)485 ns (1.09× the best)493 ns (3.31× the best)487 ns (5.04× the best)485 ns (5.51× the best)
weier127short Weierstrass, projective += affine1.03 µs (1.17× the best)1.03 µs (2.40× the best)1.04 µs (4.19× the best)1.03 µs (5.27× the best)0.58 ns (tied for the best, within noise)1.42 ns (tied for the best, within noise, 1.00×)0.54 ns (tied for the best, within noise)0.45 ns (tied for the best, within noise)527 ns (1.22× the best)85.1 ns (best)20.4 ns (best)9.97 ns (best)487 ns (1.09× the best)487 ns (3.26× the best)482 ns (4.98× the best)484 ns (5.51× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.03 µs (1.17× the best)1.03 µs (2.39× the best)1.03 µs (4.17× the best)1.00 µs (5.12× the best)0.57 ns (tied for the best, within noise)1.41 ns (tied for the best, within noise)0.54 ns (tied for the best, within noise, 1.00×)0.46 ns (tied for the best, within noise, 1.01×)531 ns (1.23× the best)90.0 ns (1.06× the best)25.8 ns (1.27× the best)15.3 ns (1.54× the best)484 ns (1.09× the best)485 ns (3.25× the best)482 ns (4.98× the best)483 ns (5.49× 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).

binary-lambda.127, ti-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25632.5 ns32.5 ns
per saltaccept the curvenot timednot timed
per saltchecksum keys71.0 ns261 ns
per saltmapping keys71.0 ns261 ns
per salt and itemhash to the addend176 ns147 ns
per salt and itemmapping seed32.9 ns9.40 ns
per salt and itemmapping walk below m = 135036.4 ns36.4 ns
per celladd132 ns132 ns
per cellencode87.0 ns87.0 ns
per celldecode87.9 ns87.9 ns
measuredinsertion per item, k = 13.57 cells2.04 µs1.98 µs

binary-u.127, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25632.5 ns32.5 ns
per saltaccept the curvenot timednot timed
per saltchecksum keys71.0 ns261 ns
per saltmapping keys71.0 ns261 ns
per salt and itemhash to the addend212 ns191 ns
per salt and itemmapping seed32.9 ns9.40 ns
per salt and itemmapping walk below m = 135036.4 ns36.4 ns
per celladd116 ns116 ns
per cellencode76.5 ns76.5 ns
per celldecode121 ns121 ns
measuredinsertion per item, k = 13.57 cells1.90 µs1.89 µs

binary-w.127, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25632.5 ns32.5 ns
per saltaccept the curvenot timednot timed
per saltchecksum keys71.0 ns261 ns
per saltmapping keys71.0 ns261 ns
per salt and itemhash to the addend183 ns162 ns
per salt and itemmapping seed32.9 ns9.40 ns
per salt and itemmapping walk below m = 135036.4 ns36.4 ns
per celladd131 ns131 ns
per cellencode76.5 ns76.5 ns
per celldecode89.2 ns89.2 ns
measuredinsertion per item, k = 13.57 cells2.04 µs2.01 µs

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25632.5 ns32.5 ns
per saltaccept the curvenot timednot timed
per saltchecksum keys71.0 ns311 ns
per saltmapping keys71.0 ns261 ns
per salt and itemhash to the addend1.10 µs1.05 µs
per salt and itemmapping seed32.9 ns9.40 ns
per salt and itemmapping walk below m = 135036.4 ns36.4 ns
per celladd19.9 ns19.9 ns
per cellencode21.7 ns21.7 ns
per celldecode485 ns485 ns
measuredinsertion per item, k = 13.57 cells1.42 µs1.35 µs

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25632.5 ns32.5 ns
per saltaccept the curvenot timednot timed
per saltchecksum keys71.0 ns261 ns
per saltmapping keys71.0 ns261 ns
per salt and itemhash to the addend1.01 µs965 ns
per salt and itemmapping seed32.9 ns9.40 ns
per salt and itemmapping walk below m = 135036.4 ns36.4 ns
per celladd44.7 ns44.7 ns
per cellencode9.97 ns9.97 ns
per celldecode484 ns484 ns
measuredinsertion per item, k = 13.57 cells1.68 µs1.61 µs

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25632.5 ns32.5 ns
per saltaccept the curvenot timednot timed
per saltchecksum keys71.0 ns261 ns
per saltmapping keys71.0 ns261 ns
per salt and itemhash to the addend1.01 µs987 ns
per salt and itemmapping seed32.9 ns9.40 ns
per salt and itemmapping walk below m = 135036.4 ns36.4 ns
per celladd36.6 ns36.6 ns
per cellencode15.3 ns15.3 ns
per celldecode483 ns483 ns
measuredinsertion per item, k = 13.57 cells1.56 µs1.49 µ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.73 ns0.39 ns
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas619 ns (best)196 ns (tied for the best, within noise)31.6 ns (54.91× the best)31.2 ns (68.79× the best)155 ns (7.79× the best)156 ns (7.05× the best)0.69 ns (1.07× the best)0.59 ns (1.76× the best)30.3 ns (15.83× the best)462 ns (1.07× the best)106 ns (10.64× the best)446 ns (tied for the best, within noise)88.0 ns (tied for the best, within noise)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators880 ns (1.42× the best)196 ns (tied for the best, within noise, 1.00×)567 ns (tied for the best, within noise)179 ns (best)412 ns (716.46× the best)56.6 ns (124.81× the best)132 ns (6.60× the best)135 ns (6.12× the best)131 ns (5.78× the best)0.64 ns (tied for the best, within noise)0.55 ns (1.62× the best)15.1 ns (4.07× the best)15.1 ns (7.91× the best)442 ns (1.02× the best)87.0 ns (8.72× the best)447 ns (tied for the best, within noise, 1.00×)87.9 ns (tied for the best, within noise)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine975 ns (1.58× the best)221 ns (1.13× the best)569 ns (tied for the best, within noise, 1.00×)184 ns (1.03× the best)0.62 ns (1.07× the best)0.97 ns (2.14× the best)131 ns (6.58× the best)135 ns (6.11× the best)131 ns (5.79× the best)0.65 ns (tied for the best, within noise, 1.00×)0.55 ns (1.62× the best)15.0 ns (4.06× the best)15.1 ns (7.87× the best)432 ns (best)76.5 ns (7.67× the best)447 ns (tied for the best, within noise, 1.00×)89.2 ns (1.01× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes1.00 µs (1.62× the best)258 ns (1.32× the best)598 ns (1.05× the best)213 ns (1.19× the best)0.62 ns (1.07× the best)0.98 ns (2.17× the best)116 ns (5.84× the best)119 ns (5.41× the best)119 ns (5.24× the best)0.68 ns (1.05× the best)0.54 ns (1.61× the best)48.6 ns (13.12× the best)48.7 ns (25.41× the best)438 ns (1.01× the best)76.5 ns (7.67× the best)479 ns (1.07× the best)121 ns (1.38× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended897 ns (1.45× the best)350 ns (1.79× the best)64.2 ns (111.60× the best)63.1 ns (139.03× the best)263 ns (13.20× the best)267 ns (12.10× the best)0.69 ns (1.07× the best)0.84 ns (2.49× the best)53.7 ns (28.03× the best)618 ns (1.43× the best)202 ns (20.28× the best)607 ns (1.36× the best)187 ns (2.12× the best)
gf2_122-lambdaincompleteλ-projective1.18 µs (1.91× the best)350 ns (1.79× the best)801 ns (1.41× the best)361 ns (2.02× the best)521 ns (906.55× the best)100 ns (220.88× the best)217 ns (10.90× the best)219 ns (9.94× the best)0.65 ns (tied for the best, within noise, 1.00×)0.84 ns (2.49× the best)27.9 ns (14.57× the best)573 ns (1.33× the best)156 ns (15.63× the best)607 ns (1.36× the best)186 ns (2.12× the best)
gf2_122-wincompleteλ-projective, w codec1.21 µs (1.96× the best)328 ns (1.67× the best)799 ns (1.41× the best)429 ns (2.39× the best)0.62 ns (1.07× the best)0.99 ns (2.17× the best)211 ns (10.58× the best)219 ns (9.93× the best)0.64 ns (tied for the best, within noise, 1.00×)0.84 ns (2.49× the best)27.8 ns (14.51× the best)551 ns (1.28× the best)130 ns (13.07× the best)601 ns (1.35× the best)153 ns (1.74× the best)
gf2_122-uunscaled (X:S:Z), w codec1.27 µs (2.06× the best)391 ns (2.00× the best)857 ns (1.51× the best)622 ns (3.47× the best)0.62 ns (1.07× the best)0.99 ns (2.17× the best)183 ns (9.19× the best)183 ns (8.31× the best)0.69 ns (1.07× the best)0.83 ns (2.46× the best)84.9 ns (44.33× the best)564 ns (1.31× the best)132 ns (13.26× the best)676 ns (1.51× the best)204 ns (2.32× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended865 ns (1.40× the best)309 ns (1.58× the best)44.2 ns (76.84× the best)44.3 ns (97.56× the best)246 ns (12.33× the best)240 ns (10.88× the best)1.02 ns (1.58× the best)0.84 ns (2.49× the best)54.4 ns (28.41× the best)612 ns (1.42× the best)194 ns (19.45× the best)592 ns (1.33× the best)162 ns (1.85× the best)
gf2_122-gls-lambdaincompleteλ-projective1.18 µs (1.90× the best)315 ns (1.61× the best)788 ns (1.39× the best)327 ns (1.82× the best)524 ns (911.40× the best)101 ns (221.53× the best)216 ns (10.85× the best)219 ns (9.94× the best)0.65 ns (tied for the best, within noise, 1.00×)0.84 ns (2.49× the best)27.8 ns (14.53× the best)576 ns (1.33× the best)156 ns (15.63× the best)599 ns (1.34× the best)163 ns (1.85× the best)
gf2_122-gls-wincompleteλ-projective, w codec1.24 µs (2.01× the best)311 ns (1.59× the best)791 ns (1.40× the best)404 ns (2.25× the best)0.62 ns (1.08× the best)0.97 ns (2.14× the best)217 ns (10.87× the best)219 ns (9.94× the best)0.65 ns (tied for the best, within noise, 1.00×)0.84 ns (2.48× the best)27.9 ns (14.58× the best)555 ns (1.28× the best)130 ns (13.01× the best)591 ns (1.32× the best)138 ns (1.57× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec1.25 µs (2.02× the best)359 ns (1.83× the best)843 ns (1.49× the best)593 ns (3.31× the best)0.62 ns (1.07× the best)1.01 ns (2.22× the best)182 ns (9.16× the best)183 ns (8.29× the best)0.69 ns (1.07× the best)0.84 ns (2.49× the best)85.0 ns (44.39× the best)562 ns (1.30× the best)133 ns (13.32× the best)639 ns (1.43× the best)187 ns (2.13× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended3.39 µs (5.48× the best)518 ns (2.65× the best)95.3 ns (165.70× the best)95.7 ns (210.88× the best)403 ns (20.23× the best)403 ns (18.27× the best)0.69 ns (1.06× the best)0.59 ns (1.74× the best)72.9 ns (38.07× the best)3.03 µs (7.00× the best)306 ns (30.66× the best)2.98 µs (6.67× the best)263 ns (2.99× the best)
gf2_109-lambdaincompleteλ-projective5.87 µs (9.49× the best)517 ns (2.64× the best)3.28 µs (5.78× the best)511 ns (2.85× the best)2.86 µs (4982.19× the best)147 ns (324.46× the best)331 ns (16.63× the best)334 ns (15.12× the best)0.65 ns (tied for the best, within noise, 1.00×)0.57 ns (1.70× the best)39.3 ns (20.52× the best)2.95 µs (6.82× the best)221 ns (22.20× the best)2.98 µs (6.68× the best)263 ns (2.99× the best)
gf2_109-wincompleteλ-projective, w codec5.78 µs (9.35× the best)516 ns (2.64× the best)3.27 µs (5.77× the best)522 ns (2.92× the best)0.62 ns (1.08× the best)0.97 ns (2.14× the best)332 ns (16.67× the best)335 ns (15.17× the best)0.64 ns (tied for the best, within noise, 1.00×)0.58 ns (1.71× the best)39.4 ns (20.59× the best)2.90 µs (6.70× the best)204 ns (20.42× the best)2.96 µs (6.64× the best)240 ns (2.73× the best)
gf2_109-uunscaled (X:S:Z), w codec5.87 µs (9.50× the best)592 ns (3.02× the best)3.34 µs (5.89× the best)593 ns (3.31× the best)0.62 ns (1.08× the best)0.98 ns (2.16× the best)289 ns (14.53× the best)290 ns (13.13× the best)0.69 ns (1.07× the best)0.58 ns (1.72× the best)115 ns (60.25× the best)2.95 µs (6.82× the best)206 ns (20.63× the best)3.04 µs (6.82× the best)319 ns (3.62× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.07 µs (1.72× the best)1.06 µs (5.44× the best)573 ns (996.17× the best)27.2 ns (59.99× the best)19.9 ns (best)22.1 ns (best)22.7 ns (best)1.36 ns (2.11× the best)0.34 ns (best)3.70 ns (best)1.91 ns (best)536 ns (1.24× the best)21.7 ns (2.18× the best)485 ns (1.09× the best)485 ns (5.51× the best)
weier127short Weierstrass, projective += affine1.03 µs (1.67× the best)1.03 µs (5.27× the best)0.58 ns (tied for the best, within noise)0.45 ns (tied for the best, within noise)44.7 ns (2.24× the best)46.2 ns (2.10× the best)46.4 ns (2.05× the best)0.76 ns (1.17× the best)0.34 ns (1.01× the best)3.81 ns (1.03× the best)1.98 ns (1.04× the best)527 ns (1.22× the best)9.97 ns (best)487 ns (1.09× the best)484 ns (5.51× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.03 µs (1.67× the best)1.00 µs (5.12× the best)0.57 ns (tied for the best, within noise)0.46 ns (tied for the best, within noise, 1.01×)36.6 ns (1.84× the best)45.0 ns (2.04× the best)37.6 ns (1.66× the best)0.76 ns (1.17× the best)0.34 ns (1.01× the best)8.92 ns (2.41× the best)4.29 ns (2.24× the best)531 ns (1.23× the best)15.3 ns (1.54× the best)484 ns (1.09× the best)483 ns (5.49× 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)13.2 ns (8.60× the best)13.4 ns (3.69× the best)2.58 ns (1.35× the best)4.19 ns (1.15× the best)xor2.61 ns (best)3.50 ns (1.47× the best)391 ns (best)42.0 ns (7.36× the best)
gf2_122GF(2^61)[u]/(u^2 + u + 1)24.6 ns (16.00× the best)29.1 ns (8.00× the best)3.84 ns (2.01× the best)16.7 ns (4.60× the best)xor3.41 ns (1.31× the best)2.39 ns (best)494 ns (1.26× the best)74.0 ns (12.95× the best)
gf2_109F_2[z]/(z^109 + z^5 + z^4 + z^2 + 1)34.7 ns (22.59× the best)38.9 ns (10.69× the best)21.8 ns (11.38× the best)26.7 ns (7.34× the best)xor19.2 ns (7.38× the best)3.28 ns (1.38× the best)2.82 µs (7.22× the best)109 ns (19.02× the best)
prime
fp127p = 2^127 − 11.54 ns (best)3.64 ns (best)1.91 ns (best)3.64 ns (best)0.94 ns (best)474 ns (181.79× the best)525 ns (best)519 ns (1.33× the best)5.71 ns (best)0.35 ns (best)0.57 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)13.2 ns13.2 ns .. 13.3 ns
field mul, throughputgf2_109field/gf2_109/mul throughput (8 chains)34.7 ns34.6 ns .. 34.9 ns
field mul, throughputgf2_122field/gf2_122/mul throughput (8 chains)24.6 ns24.6 ns .. 24.7 ns
field mul, throughputfp127field/fp127/mul throughput (8 chains)1.54 ns1.54 ns .. 1.54 ns
field mul, latencygf2_127field/gf2_127/mul latency (dependent chain)13.4 ns13.4 ns .. 13.5 ns
field mul, latencygf2_109field/gf2_109/mul latency (dependent chain)38.9 ns38.8 ns .. 39.0 ns
field mul, latencygf2_122field/gf2_122/mul latency (dependent chain)29.1 ns29.1 ns .. 29.2 ns
field mul, latencyfp127field/fp127/mul latency (dependent chain)3.64 ns3.63 ns .. 3.65 ns
field square, throughputgf2_127field/gf2_127/square throughput (8 chains)2.58 ns2.58 ns .. 2.59 ns
field square, throughputgf2_109field/gf2_109/square throughput (8 chains)21.8 ns21.7 ns .. 21.8 ns
field square, throughputgf2_122field/gf2_122/square throughput (8 chains)3.84 ns3.83 ns .. 3.85 ns
field square, throughputfp127field/fp127/square throughput (8 chains)1.91 ns1.91 ns .. 1.92 ns
field square, latencygf2_127field/gf2_127/square latency (dependent chain)4.19 ns4.18 ns .. 4.20 ns
field square, latencygf2_109field/gf2_109/square latency (dependent chain)26.7 ns26.7 ns .. 26.8 ns
field square, latencygf2_122field/gf2_122/square latency (dependent chain)16.7 ns16.7 ns .. 16.8 ns
field square, latencyfp127field/fp127/square latency (dependent chain)3.64 ns3.63 ns .. 3.65 ns
field addfp127field/fp127/add0.94 ns0.94 ns .. 0.94 ns
field sqrtgf2_127field/gf2_127/sqrt2.61 ns2.60 ns .. 2.62 ns
field sqrtgf2_109field/gf2_109/sqrt19.2 ns19.2 ns .. 19.3 ns
field sqrtgf2_122field/gf2_122/sqrt3.41 ns3.40 ns .. 3.41 ns
field sqrtfp127field/fp127/sqrt (x^(2^125))474 ns473 ns .. 475 ns
field sqrt ratiofp127field/fp127/sqrt_ratio525 ns523 ns .. 526 ns
field halftracegf2_127field/gf2_127/halftrace (byte tables)3.50 ns3.49 ns .. 3.51 ns
field halftracegf2_109field/gf2_109/halftrace (byte tables)3.28 ns3.27 ns .. 3.29 ns
field halftracegf2_122field/gf2_122/qsolve (z^2 + z = c, 2 base halftraces)2.39 ns2.38 ns .. 2.39 ns
field invert, one at a timegf2_127field/gf2_127/invert391 ns390 ns .. 392 ns
field invert, one at a timegf2_109field/gf2_109/invert2.82 µs2.82 µs .. 2.83 µs
field invert, one at a timegf2_122field/gf2_122/invert494 ns493 ns .. 495 ns
field invert, one at a timefp127field/fp127/invert519 ns518 ns .. 521 ns
field invert, batchedgf2_127field/gf2_127/batch invert (product tree)42.0 ns42.0 ns .. 42.1 ns
field invert, batchedgf2_109field/gf2_109/batch invert (product tree)109 ns108 ns .. 109 ns
field invert, batchedgf2_122field/gf2_122/batch invert (product tree)74.0 ns73.8 ns .. 74.1 ns
field invert, batchedfp127field/fp127/batch invert (product tree)5.71 ns5.69 ns .. 5.74 ns
field packfp127field/fp127/pack0.35 ns0.35 ns .. 0.36 ns
field unpackfp127field/fp127/unpack0.57 ns0.57 ns .. 0.57 ns
point add, throughputxoradd/xor-sha256/xor 32B, 8 accumulators0.73 ns0.73 ns .. 0.73 ns
point add, throughputgf2_127group.add/binary.127/mode=throughput155 ns155 ns .. 155 ns
point add, throughputgf2_127-lambdagroup.add/binary-lambda.127/mode=throughput132 ns131 ns .. 132 ns
point add, throughputgf2_127-wgroup.add/binary-w.127/mode=throughput131 ns131 ns .. 131 ns
point add, throughputgf2_127-ugroup.add/binary-u.127/mode=throughput116 ns116 ns .. 116 ns
point add, throughputgf2_109group.add/binary.109/mode=throughput403 ns402 ns .. 404 ns
point add, throughputgf2_109-lambdagroup.add/binary-lambda.109/mode=throughput331 ns330 ns .. 332 ns
point add, throughputgf2_109-wgroup.add/binary-w.109/mode=throughput332 ns331 ns .. 332 ns
point add, throughputgf2_109-ugroup.add/binary-u.109/mode=throughput289 ns289 ns .. 290 ns
point add, throughputgf2_122group.add/binary.122/mode=throughput263 ns262 ns .. 264 ns
point add, throughputgf2_122-lambdagroup.add/binary-lambda.122/mode=throughput217 ns217 ns .. 217 ns
point add, throughputgf2_122-wgroup.add/binary-w.122/mode=throughput211 ns209 ns .. 212 ns
point add, throughputgf2_122-ugroup.add/binary-u.122/mode=throughput183 ns183 ns .. 183 ns
point add, throughputgf2_122-glsgroup.add/binary.122-gls/mode=throughput246 ns245 ns .. 247 ns
point add, throughputgf2_122-gls-lambdagroup.add/binary-lambda.122-gls/mode=throughput216 ns215 ns .. 217 ns
point add, throughputgf2_122-gls-wgroup.add/binary-w.122-gls/mode=throughput217 ns216 ns .. 217 ns
point add, throughputgf2_122-gls-ugroup.add/binary-u.122-gls/mode=throughput182 ns182 ns .. 183 ns
point add, throughputedwards127group.add/edwards.127/mode=throughput19.9 ns19.9 ns .. 19.9 ns
point add, throughputweier127group.add/weier.127/mode=throughput44.7 ns44.6 ns .. 44.8 ns
point add, throughputweier127-jacobiangroup.add/weier-jacobian.127/mode=throughput36.6 ns36.5 ns .. 36.8 ns
point add, latencyxoradd/xor-sha256/xor 32B, 1 accumulator0.39 ns0.39 ns .. 0.39 ns
point add, latencygf2_127group.add/binary.127/mode=latency156 ns155 ns .. 156 ns
point add, latencygf2_127-lambdagroup.add/binary-lambda.127/mode=latency135 ns135 ns .. 135 ns
point add, latencygf2_127-wgroup.add/binary-w.127/mode=latency135 ns135 ns .. 135 ns
point add, latencygf2_127-ugroup.add/binary-u.127/mode=latency119 ns119 ns .. 120 ns
point add, latencygf2_109group.add/binary.109/mode=latency403 ns403 ns .. 404 ns
point add, latencygf2_109-lambdagroup.add/binary-lambda.109/mode=latency334 ns333 ns .. 335 ns
point add, latencygf2_109-wgroup.add/binary-w.109/mode=latency335 ns334 ns .. 335 ns
point add, latencygf2_109-ugroup.add/binary-u.109/mode=latency290 ns289 ns .. 290 ns
point add, latencygf2_122group.add/binary.122/mode=latency267 ns266 ns .. 268 ns
point add, latencygf2_122-lambdagroup.add/binary-lambda.122/mode=latency219 ns219 ns .. 220 ns
point add, latencygf2_122-wgroup.add/binary-w.122/mode=latency219 ns219 ns .. 220 ns
point add, latencygf2_122-ugroup.add/binary-u.122/mode=latency183 ns183 ns .. 184 ns
point add, latencygf2_122-glsgroup.add/binary.122-gls/mode=latency240 ns239 ns .. 241 ns
point add, latencygf2_122-gls-lambdagroup.add/binary-lambda.122-gls/mode=latency219 ns219 ns .. 220 ns
point add, latencygf2_122-gls-wgroup.add/binary-w.122-gls/mode=latency219 ns219 ns .. 220 ns
point add, latencygf2_122-gls-ugroup.add/binary-u.122-gls/mode=latency183 ns183 ns .. 183 ns
point add, latencyedwards127group.add/edwards.127/mode=latency22.1 ns22.0 ns .. 22.1 ns
point add, latencyweier127group.add/weier.127/mode=latency46.2 ns46.1 ns .. 46.3 ns
point add, latencyweier127-jacobiangroup.add/weier-jacobian.127/mode=latency45.0 ns44.8 ns .. 45.1 ns
point subtractgf2_127-lambdagroup.sub/binary-lambda.127/mode=throughput131 ns131 ns .. 131 ns
point subtractgf2_127-wgroup.sub/binary-w.127/mode=throughput131 ns131 ns .. 131 ns
point subtractgf2_127-ugroup.sub/binary-u.127/mode=throughput119 ns118 ns .. 119 ns
point subtractedwards127group.sub/edwards.127/mode=throughput22.7 ns22.6 ns .. 22.7 ns
point subtractweier127group.sub/weier.127/mode=throughput46.4 ns46.3 ns .. 46.5 ns
point subtractweier127-jacobiangroup.sub/weier-jacobian.127/mode=throughput37.6 ns37.5 ns .. 37.6 ns
point negategf2_127negate/gf2_127/affine (y += x)0.69 ns0.69 ns .. 0.69 ns
point negategf2_127-lambdagroup.neg/binary-lambda.1270.64 ns0.64 ns .. 0.65 ns
point negategf2_127-wgroup.neg/binary-w.1270.65 ns0.65 ns .. 0.65 ns
point negategf2_127-ugroup.neg/binary-u.1270.68 ns0.67 ns .. 0.69 ns
point negategf2_109negate/gf2_109/affine (y += x)0.69 ns0.68 ns .. 0.69 ns
point negategf2_109-lambdagroup.neg/binary-lambda.1090.65 ns0.64 ns .. 0.65 ns
point negategf2_109-wgroup.neg/binary-w.1090.64 ns0.64 ns .. 0.65 ns
point negategf2_109-ugroup.neg/binary-u.1090.69 ns0.69 ns .. 0.69 ns
point negategf2_122negate/gf2_122/affine (y += x)0.69 ns0.69 ns .. 0.69 ns
point negategf2_122-lambdagroup.neg/binary-lambda.1220.65 ns0.64 ns .. 0.65 ns
point negategf2_122-wgroup.neg/binary-w.1220.64 ns0.64 ns .. 0.65 ns
point negategf2_122-ugroup.neg/binary-u.1220.69 ns0.69 ns .. 0.69 ns
point negategf2_122-glsgroup.neg/binary.122-gls1.02 ns1.02 ns .. 1.02 ns
point negategf2_122-gls-lambdagroup.neg/binary-lambda.122-gls0.65 ns0.64 ns .. 0.65 ns
point negategf2_122-gls-wgroup.neg/binary-w.122-gls0.65 ns0.64 ns .. 0.65 ns
point negategf2_122-gls-ugroup.neg/binary-u.122-gls0.69 ns0.69 ns .. 0.69 ns
point negateedwards127negate/edwards127/extended (-X, -T)1.36 ns1.35 ns .. 1.37 ns
point negateweier127group.neg/weier.1270.76 ns0.75 ns .. 0.76 ns
point negateweier127-jacobiangroup.neg/weier-jacobian.1270.76 ns0.75 ns .. 0.76 ns
point prepare, one at a timegf2_127group.prepare/binary.127/mode=indep31.6 ns31.5 ns .. 31.6 ns
point prepare, one at a timegf2_127-lambdagroup.prepare/binary-lambda.127/mode=indep412 ns411 ns .. 412 ns
point prepare, one at a timegf2_127-wgroup.prepare/binary-w.127/mode=indep0.62 ns0.62 ns .. 0.62 ns
point prepare, one at a timegf2_127-ugroup.prepare/binary-u.127/mode=indep0.62 ns0.62 ns .. 0.62 ns
point prepare, one at a timegf2_109group.prepare/binary.109/mode=indep95.3 ns95.1 ns .. 95.4 ns
point prepare, one at a timegf2_109-lambdagroup.prepare/binary-lambda.109/mode=indep2.86 µs2.86 µs .. 2.87 µs
point prepare, one at a timegf2_109-wgroup.prepare/binary-w.109/mode=indep0.62 ns0.62 ns .. 0.62 ns
point prepare, one at a timegf2_109-ugroup.prepare/binary-u.109/mode=indep0.62 ns0.62 ns .. 0.62 ns
point prepare, one at a timegf2_122group.prepare/binary.122/mode=indep64.2 ns64.0 ns .. 64.3 ns
point prepare, one at a timegf2_122-lambdagroup.prepare/binary-lambda.122/mode=indep521 ns520 ns .. 523 ns
point prepare, one at a timegf2_122-wgroup.prepare/binary-w.122/mode=indep0.62 ns0.61 ns .. 0.62 ns
point prepare, one at a timegf2_122-ugroup.prepare/binary-u.122/mode=indep0.62 ns0.62 ns .. 0.62 ns
point prepare, one at a timegf2_122-glsgroup.prepare/binary.122-gls/mode=indep44.2 ns44.0 ns .. 44.3 ns
point prepare, one at a timegf2_122-gls-lambdagroup.prepare/binary-lambda.122-gls/mode=indep524 ns522 ns .. 525 ns
point prepare, one at a timegf2_122-gls-wgroup.prepare/binary-w.122-gls/mode=indep0.62 ns0.62 ns .. 0.62 ns
point prepare, one at a timegf2_122-gls-ugroup.prepare/binary-u.122-gls/mode=indep0.62 ns0.61 ns .. 0.62 ns
point prepare, one at a timeedwards127group.prepare/edwards.127/mode=indep573 ns571 ns .. 574 ns
point prepare, one at a timeweier127group.prepare/weier.127/mode=indep0.58 ns0.57 ns .. 0.58 ns
point prepare, one at a timeweier127-jacobiangroup.prepare/weier-jacobian.127/mode=indep0.57 ns0.57 ns .. 0.58 ns
point prepare, batchedgf2_127group.prepare/binary.127/mode=batch,n=102431.2 ns31.2 ns .. 31.3 ns
point prepare, batchedgf2_127-lambdagroup.prepare/binary-lambda.127/mode=batch,n=102456.6 ns56.5 ns .. 56.8 ns
point prepare, batchedgf2_127-wgroup.prepare/binary-w.127/mode=batch,n=10240.97 ns0.96 ns .. 0.98 ns
point prepare, batchedgf2_127-ugroup.prepare/binary-u.127/mode=batch,n=10240.98 ns0.98 ns .. 0.99 ns
point prepare, batchedgf2_109group.prepare/binary.109/mode=batch,n=102495.7 ns95.5 ns .. 95.9 ns
point prepare, batchedgf2_109-lambdagroup.prepare/binary-lambda.109/mode=batch,n=1024147 ns147 ns .. 147 ns
point prepare, batchedgf2_109-wgroup.prepare/binary-w.109/mode=batch,n=10240.97 ns0.96 ns .. 0.98 ns
point prepare, batchedgf2_109-ugroup.prepare/binary-u.109/mode=batch,n=10240.98 ns0.97 ns .. 0.99 ns
point prepare, batchedgf2_122group.prepare/binary.122/mode=batch,n=102463.1 ns62.9 ns .. 63.3 ns
point prepare, batchedgf2_122-lambdagroup.prepare/binary-lambda.122/mode=batch,n=1024100 ns99.9 ns .. 101 ns
point prepare, batchedgf2_122-wgroup.prepare/binary-w.122/mode=batch,n=10240.99 ns0.98 ns .. 1.00 ns
point prepare, batchedgf2_122-ugroup.prepare/binary-u.122/mode=batch,n=10240.99 ns0.98 ns .. 0.99 ns
point prepare, batchedgf2_122-glsgroup.prepare/binary.122-gls/mode=batch,n=102444.3 ns44.1 ns .. 44.4 ns
point prepare, batchedgf2_122-gls-lambdagroup.prepare/binary-lambda.122-gls/mode=batch,n=1024101 ns100 ns .. 101 ns
point prepare, batchedgf2_122-gls-wgroup.prepare/binary-w.122-gls/mode=batch,n=10240.97 ns0.96 ns .. 0.99 ns
point prepare, batchedgf2_122-gls-ugroup.prepare/binary-u.122-gls/mode=batch,n=10241.01 ns0.98 ns .. 1.04 ns
point prepare, batchededwards127group.prepare/edwards.127/mode=batch,n=102427.2 ns27.2 ns .. 27.3 ns
point prepare, batchedweier127group.prepare/weier.127/mode=batch,n=10240.45 ns0.45 ns .. 0.46 ns
point prepare, batchedweier127-jacobiangroup.prepare/weier-jacobian.127/mode=batch,n=10240.46 ns0.46 ns .. 0.46 ns
is identitygf2_127group.is_identity/binary.1270.59 ns0.59 ns .. 0.60 ns
is identitygf2_127-lambdagroup.is_identity/binary-lambda.1270.55 ns0.54 ns .. 0.55 ns
is identitygf2_127-wgroup.is_identity/binary-w.1270.55 ns0.54 ns .. 0.55 ns
is identitygf2_127-ugroup.is_identity/binary-u.1270.54 ns0.54 ns .. 0.55 ns
is identitygf2_109group.is_identity/binary.1090.59 ns0.58 ns .. 0.59 ns
is identitygf2_109-lambdagroup.is_identity/binary-lambda.1090.57 ns0.57 ns .. 0.58 ns
is identitygf2_109-wgroup.is_identity/binary-w.1090.58 ns0.58 ns .. 0.58 ns
is identitygf2_109-ugroup.is_identity/binary-u.1090.58 ns0.58 ns .. 0.58 ns
is identitygf2_122group.is_identity/binary.1220.84 ns0.84 ns .. 0.84 ns
is identitygf2_122-lambdagroup.is_identity/binary-lambda.1220.84 ns0.84 ns .. 0.84 ns
is identitygf2_122-wgroup.is_identity/binary-w.1220.84 ns0.84 ns .. 0.84 ns
is identitygf2_122-ugroup.is_identity/binary-u.1220.83 ns0.82 ns .. 0.84 ns
is identitygf2_122-glsgroup.is_identity/binary.122-gls0.84 ns0.84 ns .. 0.84 ns
is identitygf2_122-gls-lambdagroup.is_identity/binary-lambda.122-gls0.84 ns0.84 ns .. 0.84 ns
is identitygf2_122-gls-wgroup.is_identity/binary-w.122-gls0.84 ns0.84 ns .. 0.84 ns
is identitygf2_122-gls-ugroup.is_identity/binary-u.122-gls0.84 ns0.84 ns .. 0.84 ns
is identityedwards127group.is_identity/edwards.1270.34 ns0.33 ns .. 0.34 ns
is identityweier127group.is_identity/weier.1270.34 ns0.34 ns .. 0.34 ns
is identityweier127-jacobiangroup.is_identity/weier-jacobian.1270.34 ns0.34 ns .. 0.34 ns
equals addend, matchgf2_127-lambdagroup.equals/binary-lambda.127/mode=match15.1 ns15.0 ns .. 15.1 ns
equals addend, matchgf2_127-wgroup.equals/binary-w.127/mode=match15.0 ns15.0 ns .. 15.1 ns
equals addend, matchgf2_127-ugroup.equals/binary-u.127/mode=match48.6 ns48.5 ns .. 48.7 ns
equals addend, matchedwards127group.equals/edwards.127/mode=match3.70 ns3.68 ns .. 3.72 ns
equals addend, matchweier127group.equals/weier.127/mode=match3.81 ns3.80 ns .. 3.82 ns
equals addend, matchweier127-jacobiangroup.equals/weier-jacobian.127/mode=match8.92 ns8.89 ns .. 8.96 ns
equals addend, mismatchgf2_127group.equals/binary.127/mode=mismatch30.3 ns30.3 ns .. 30.4 ns
equals addend, mismatchgf2_127-lambdagroup.equals/binary-lambda.127/mode=mismatch15.1 ns15.1 ns .. 15.2 ns
equals addend, mismatchgf2_127-wgroup.equals/binary-w.127/mode=mismatch15.1 ns15.0 ns .. 15.1 ns
equals addend, mismatchgf2_127-ugroup.equals/binary-u.127/mode=mismatch48.7 ns48.6 ns .. 48.8 ns
equals addend, mismatchgf2_109group.equals/binary.109/mode=mismatch72.9 ns72.7 ns .. 73.1 ns
equals addend, mismatchgf2_109-lambdagroup.equals/binary-lambda.109/mode=mismatch39.3 ns39.2 ns .. 39.4 ns
equals addend, mismatchgf2_109-wgroup.equals/binary-w.109/mode=mismatch39.4 ns39.3 ns .. 39.5 ns
equals addend, mismatchgf2_109-ugroup.equals/binary-u.109/mode=mismatch115 ns115 ns .. 116 ns
equals addend, mismatchgf2_122group.equals/binary.122/mode=mismatch53.7 ns53.5 ns .. 53.9 ns
equals addend, mismatchgf2_122-lambdagroup.equals/binary-lambda.122/mode=mismatch27.9 ns27.8 ns .. 28.0 ns
equals addend, mismatchgf2_122-wgroup.equals/binary-w.122/mode=mismatch27.8 ns27.7 ns .. 27.9 ns
equals addend, mismatchgf2_122-ugroup.equals/binary-u.122/mode=mismatch84.9 ns84.7 ns .. 85.1 ns
equals addend, mismatchgf2_122-glsgroup.equals/binary.122-gls/mode=mismatch54.4 ns54.3 ns .. 54.5 ns
equals addend, mismatchgf2_122-gls-lambdagroup.equals/binary-lambda.122-gls/mode=mismatch27.8 ns27.7 ns .. 27.9 ns
equals addend, mismatchgf2_122-gls-wgroup.equals/binary-w.122-gls/mode=mismatch27.9 ns27.9 ns .. 28.0 ns
equals addend, mismatchgf2_122-gls-ugroup.equals/binary-u.122-gls/mode=mismatch85.0 ns84.8 ns .. 85.2 ns
equals addend, mismatchedwards127group.equals/edwards.127/mode=mismatch1.91 ns1.91 ns .. 1.92 ns
equals addend, mismatchweier127group.equals/weier.127/mode=mismatch1.98 ns1.98 ns .. 1.99 ns
equals addend, mismatchweier127-jacobiangroup.equals/weier-jacobian.127/mode=mismatch4.29 ns4.28 ns .. 4.31 ns
encode, one at a timegf2_127group.encode/binary.127/mode=indep462 ns461 ns .. 462 ns
encode, one at a timegf2_127-lambdagroup.encode/binary-lambda.127/mode=indep442 ns441 ns .. 443 ns
encode, one at a timegf2_127-wgroup.encode/binary-w.127/mode=indep432 ns432 ns .. 433 ns
encode, one at a timegf2_127-ugroup.encode/binary-u.127/mode=indep438 ns437 ns .. 438 ns
encode, one at a timegf2_109group.encode/binary.109/mode=indep3.03 µs3.02 µs .. 3.03 µs
encode, one at a timegf2_109-lambdagroup.encode/binary-lambda.109/mode=indep2.95 µs2.94 µs .. 2.95 µs
encode, one at a timegf2_109-wgroup.encode/binary-w.109/mode=indep2.90 µs2.89 µs .. 2.91 µs
encode, one at a timegf2_109-ugroup.encode/binary-u.109/mode=indep2.95 µs2.93 µs .. 2.96 µs
encode, one at a timegf2_122group.encode/binary.122/mode=indep618 ns616 ns .. 619 ns
encode, one at a timegf2_122-lambdagroup.encode/binary-lambda.122/mode=indep573 ns572 ns .. 575 ns
encode, one at a timegf2_122-wgroup.encode/binary-w.122/mode=indep551 ns550 ns .. 553 ns
encode, one at a timegf2_122-ugroup.encode/binary-u.122/mode=indep564 ns563 ns .. 566 ns
encode, one at a timegf2_122-glsgroup.encode/binary.122-gls/mode=indep612 ns609 ns .. 614 ns
encode, one at a timegf2_122-gls-lambdagroup.encode/binary-lambda.122-gls/mode=indep576 ns575 ns .. 578 ns
encode, one at a timegf2_122-gls-wgroup.encode/binary-w.122-gls/mode=indep555 ns553 ns .. 556 ns
encode, one at a timegf2_122-gls-ugroup.encode/binary-u.122-gls/mode=indep562 ns561 ns .. 564 ns
encode, one at a timeedwards127group.encode/edwards.127/mode=indep536 ns534 ns .. 538 ns
encode, one at a timeweier127group.encode/weier.127/mode=indep527 ns526 ns .. 528 ns
encode, one at a timeweier127-jacobiangroup.encode/weier-jacobian.127/mode=indep531 ns530 ns .. 532 ns
encode, batchedgf2_127group.encode/binary.127/mode=batch,n=1024106 ns106 ns .. 106 ns
encode, batchedgf2_127-lambdagroup.encode/binary-lambda.127/mode=batch,n=102487.0 ns86.8 ns .. 87.1 ns
encode, batchedgf2_127-wgroup.encode/binary-w.127/mode=batch,n=102476.5 ns76.3 ns .. 76.6 ns
encode, batchedgf2_127-ugroup.encode/binary-u.127/mode=batch,n=102476.5 ns75.9 ns .. 77.2 ns
encode, batchedgf2_109group.encode/binary.109/mode=batch,n=1024306 ns305 ns .. 306 ns
encode, batchedgf2_109-lambdagroup.encode/binary-lambda.109/mode=batch,n=1024221 ns221 ns .. 222 ns
encode, batchedgf2_109-wgroup.encode/binary-w.109/mode=batch,n=1024204 ns203 ns .. 204 ns
encode, batchedgf2_109-ugroup.encode/binary-u.109/mode=batch,n=1024206 ns205 ns .. 207 ns
encode, batchedgf2_122group.encode/binary.122/mode=batch,n=1024202 ns202 ns .. 203 ns
encode, batchedgf2_122-lambdagroup.encode/binary-lambda.122/mode=batch,n=1024156 ns155 ns .. 156 ns
encode, batchedgf2_122-wgroup.encode/binary-w.122/mode=batch,n=1024130 ns130 ns .. 131 ns
encode, batchedgf2_122-ugroup.encode/binary-u.122/mode=batch,n=1024132 ns132 ns .. 133 ns
encode, batchedgf2_122-glsgroup.encode/binary.122-gls/mode=batch,n=1024194 ns193 ns .. 195 ns
encode, batchedgf2_122-gls-lambdagroup.encode/binary-lambda.122-gls/mode=batch,n=1024156 ns155 ns .. 156 ns
encode, batchedgf2_122-gls-wgroup.encode/binary-w.122-gls/mode=batch,n=1024130 ns129 ns .. 130 ns
encode, batchedgf2_122-gls-ugroup.encode/binary-u.122-gls/mode=batch,n=1024133 ns133 ns .. 133 ns
encode, batchededwards127group.encode/edwards.127/mode=batch,n=102421.7 ns21.7 ns .. 21.7 ns
encode, batchedweier127group.encode/weier.127/mode=batch,n=10249.97 ns9.95 ns .. 9.99 ns
encode, batchedweier127-jacobiangroup.encode/weier-jacobian.127/mode=batch,n=102415.3 ns15.3 ns .. 15.4 ns
decode, one at a timegf2_127group.decode/binary.127/mode=indep446 ns445 ns .. 447 ns
decode, one at a timegf2_127-lambdagroup.decode/binary-lambda.127/mode=indep447 ns446 ns .. 447 ns
decode, one at a timegf2_127-wgroup.decode/binary-w.127/mode=indep447 ns446 ns .. 448 ns
decode, one at a timegf2_127-ugroup.decode/binary-u.127/mode=indep479 ns478 ns .. 480 ns
decode, one at a timegf2_109group.decode/binary.109/mode=indep2.98 µs2.97 µs .. 2.98 µs
decode, one at a timegf2_109-lambdagroup.decode/binary-lambda.109/mode=indep2.98 µs2.98 µs .. 2.99 µs
decode, one at a timegf2_109-wgroup.decode/binary-w.109/mode=indep2.96 µs2.96 µs .. 2.97 µs
decode, one at a timegf2_109-ugroup.decode/binary-u.109/mode=indep3.04 µs3.04 µs .. 3.05 µs
decode, one at a timegf2_122group.decode/binary.122/mode=indep607 ns606 ns .. 609 ns
decode, one at a timegf2_122-lambdagroup.decode/binary-lambda.122/mode=indep607 ns605 ns .. 608 ns
decode, one at a timegf2_122-wgroup.decode/binary-w.122/mode=indep601 ns600 ns .. 603 ns
decode, one at a timegf2_122-ugroup.decode/binary-u.122/mode=indep676 ns674 ns .. 677 ns
decode, one at a timegf2_122-glsgroup.decode/binary.122-gls/mode=indep592 ns591 ns .. 594 ns
decode, one at a timegf2_122-gls-lambdagroup.decode/binary-lambda.122-gls/mode=indep599 ns595 ns .. 603 ns
decode, one at a timegf2_122-gls-wgroup.decode/binary-w.122-gls/mode=indep591 ns589 ns .. 592 ns
decode, one at a timegf2_122-gls-ugroup.decode/binary-u.122-gls/mode=indep639 ns637 ns .. 641 ns
decode, one at a timeedwards127group.decode/edwards.127/mode=indep485 ns484 ns .. 486 ns
decode, one at a timeweier127group.decode/weier.127/mode=indep487 ns486 ns .. 489 ns
decode, one at a timeweier127-jacobiangroup.decode/weier-jacobian.127/mode=indep484 ns483 ns .. 486 ns
decode, batchedgf2_127group.decode/binary.127/mode=batch,n=102488.0 ns87.8 ns .. 88.1 ns
decode, batchedgf2_127-lambdagroup.decode/binary-lambda.127/mode=batch,n=102487.9 ns87.8 ns .. 88.1 ns
decode, batchedgf2_127-wgroup.decode/binary-w.127/mode=batch,n=102489.2 ns89.0 ns .. 89.3 ns
decode, batchedgf2_127-ugroup.decode/binary-u.127/mode=batch,n=1024121 ns121 ns .. 121 ns
decode, batchedgf2_109group.decode/binary.109/mode=batch,n=1024263 ns262 ns .. 263 ns
decode, batchedgf2_109-lambdagroup.decode/binary-lambda.109/mode=batch,n=1024263 ns262 ns .. 263 ns
decode, batchedgf2_109-wgroup.decode/binary-w.109/mode=batch,n=1024240 ns239 ns .. 241 ns
decode, batchedgf2_109-ugroup.decode/binary-u.109/mode=batch,n=1024319 ns318 ns .. 319 ns
decode, batchedgf2_122group.decode/binary.122/mode=batch,n=1024187 ns186 ns .. 187 ns
decode, batchedgf2_122-lambdagroup.decode/binary-lambda.122/mode=batch,n=1024186 ns186 ns .. 187 ns
decode, batchedgf2_122-wgroup.decode/binary-w.122/mode=batch,n=1024153 ns153 ns .. 154 ns
decode, batchedgf2_122-ugroup.decode/binary-u.122/mode=batch,n=1024204 ns204 ns .. 205 ns
decode, batchedgf2_122-glsgroup.decode/binary.122-gls/mode=batch,n=1024162 ns162 ns .. 163 ns
decode, batchedgf2_122-gls-lambdagroup.decode/binary-lambda.122-gls/mode=batch,n=1024163 ns162 ns .. 163 ns
decode, batchedgf2_122-gls-wgroup.decode/binary-w.122-gls/mode=batch,n=1024138 ns137 ns .. 138 ns
decode, batchedgf2_122-gls-ugroup.decode/binary-u.122-gls/mode=batch,n=1024187 ns186 ns .. 187 ns
decode, batchededwards127group.decode/edwards.127/mode=batch,n=1024485 ns483 ns .. 486 ns
decode, batchedweier127group.decode/weier.127/mode=batch,n=1024484 ns483 ns .. 485 ns
decode, batchedweier127-jacobiangroup.decode/weier-jacobian.127/mode=batch,n=1024483 ns482 ns .. 484 ns
hash to curve, one at a timegf2_127hash_to_curve/gf2_127/pornin map x1619 ns617 ns .. 620 ns
hash to curve, one at a timegf2_127-lambdah2c/binary-lambda.127/mode=indep880 ns877 ns .. 883 ns
hash to curve, one at a timegf2_127-wh2c/binary-w.127/mode=indep975 ns973 ns .. 977 ns
hash to curve, one at a timegf2_127-uh2c/binary-u.127/mode=indep1.00 µs1.00 µs .. 1.00 µs
hash to curve, one at a timegf2_109hash_to_curve/gf2_109/pornin map x13.39 µs3.39 µs .. 3.40 µs
hash to curve, one at a timegf2_109-lambdah2c/binary-lambda.109/mode=indep5.87 µs5.86 µs .. 5.88 µs
hash to curve, one at a timegf2_109-wh2c/binary-w.109/mode=indep5.78 µs5.77 µs .. 5.79 µs
hash to curve, one at a timegf2_109-uh2c/binary-u.109/mode=indep5.87 µs5.86 µs .. 5.88 µs
hash to curve, one at a timegf2_122hash_to_curve/gf2_122/pornin map x1897 ns894 ns .. 899 ns
hash to curve, one at a timegf2_122-lambdah2c/binary-lambda.122/mode=indep1.18 µs1.18 µs .. 1.19 µs
hash to curve, one at a timegf2_122-wh2c/binary-w.122/mode=indep1.21 µs1.21 µs .. 1.22 µs
hash to curve, one at a timegf2_122-uh2c/binary-u.122/mode=indep1.27 µs1.27 µs .. 1.28 µs
hash to curve, one at a timegf2_122-glshash_to_curve/gf2_122-gls/pornin map x1865 ns864 ns .. 867 ns
hash to curve, one at a timegf2_122-gls-lambdah2c/binary-lambda.122-gls/mode=indep1.18 µs1.18 µs .. 1.18 µs
hash to curve, one at a timegf2_122-gls-wh2c/binary-w.122-gls/mode=indep1.24 µs1.23 µs .. 1.26 µs
hash to curve, one at a timegf2_122-gls-uh2c/binary-u.122-gls/mode=indep1.25 µs1.25 µs .. 1.25 µs
hash to curve, one at a timeedwards127h2c/edwards.127/mode=indep1.07 µs1.06 µs .. 1.07 µs
hash to curve, one at a timeweier127h2c/weier.127/mode=indep1.03 µs1.03 µs .. 1.03 µs
hash to curve, one at a timeweier127-jacobianh2c/weier-jacobian.127/mode=indep1.03 µs1.03 µs .. 1.03 µs
hash to curve, batchedgf2_127h2c/binary.127/mode=batch,n=1024196 ns195 ns .. 196 ns
hash to curve, batchedgf2_127-lambdah2c/binary-lambda.127/mode=batch,n=1024196 ns196 ns .. 196 ns
hash to curve, batchedgf2_127-wh2c/binary-w.127/mode=batch,n=1024221 ns220 ns .. 222 ns
hash to curve, batchedgf2_127-uh2c/binary-u.127/mode=batch,n=1024258 ns257 ns .. 258 ns
hash to curve, batchedgf2_109h2c/binary.109/mode=batch,n=1024518 ns517 ns .. 520 ns
hash to curve, batchedgf2_109-lambdah2c/binary-lambda.109/mode=batch,n=1024517 ns516 ns .. 518 ns
hash to curve, batchedgf2_109-wh2c/binary-w.109/mode=batch,n=1024516 ns515 ns .. 517 ns
hash to curve, batchedgf2_109-uh2c/binary-u.109/mode=batch,n=1024592 ns591 ns .. 593 ns
hash to curve, batchedgf2_122h2c/binary.122/mode=batch,n=1024350 ns349 ns .. 351 ns
hash to curve, batchedgf2_122-lambdah2c/binary-lambda.122/mode=batch,n=1024350 ns348 ns .. 351 ns
hash to curve, batchedgf2_122-wh2c/binary-w.122/mode=batch,n=1024328 ns327 ns .. 328 ns
hash to curve, batchedgf2_122-uh2c/binary-u.122/mode=batch,n=1024391 ns390 ns .. 392 ns
hash to curve, batchedgf2_122-glsh2c/binary.122-gls/mode=batch,n=1024309 ns308 ns .. 310 ns
hash to curve, batchedgf2_122-gls-lambdah2c/binary-lambda.122-gls/mode=batch,n=1024315 ns314 ns .. 315 ns
hash to curve, batchedgf2_122-gls-wh2c/binary-w.122-gls/mode=batch,n=1024311 ns310 ns .. 311 ns
hash to curve, batchedgf2_122-gls-uh2c/binary-u.122-gls/mode=batch,n=1024359 ns358 ns .. 360 ns
hash to curve, batchededwards127h2c/edwards.127/mode=batch,n=10241.06 µs1.06 µs .. 1.07 µs
hash to curve, batchedweier127h2c/weier.127/mode=batch,n=10241.03 µs1.03 µs .. 1.03 µs
hash to curve, batchedweier127-jacobianh2c/weier-jacobian.127/mode=batch,n=10241.00 µs1.00 µs .. 1.01 µs
hash to addend, one at a timegf2_127-lambdahash_to_curve/gf2_127-lambda/pornin map x1 to (x, λ)567 ns566 ns .. 568 ns
hash to addend, one at a timegf2_127-whash_to_curve/gf2_127-w/pornin map x1 to (x, λ)569 ns568 ns .. 569 ns
hash to addend, one at a timegf2_127-uhash_to_curve/gf2_127-u/pornin map x1 to (u, v)598 ns597 ns .. 599 ns
hash to addend, one at a timegf2_109-lambdahash_to_curve/gf2_109-lambda/pornin map x1 to (x, λ)3.28 µs3.27 µs .. 3.28 µs
hash to addend, one at a timegf2_109-whash_to_curve/gf2_109-w/pornin map x1 to (x, λ)3.27 µs3.27 µs .. 3.28 µs
hash to addend, one at a timegf2_109-uhash_to_curve/gf2_109-u/pornin map x1 to (u, v)3.34 µs3.33 µs .. 3.34 µs
hash to addend, one at a timegf2_122-lambdahash_to_curve/gf2_122-lambda/pornin map x1 to (x, λ)801 ns799 ns .. 803 ns
hash to addend, one at a timegf2_122-whash_to_curve/gf2_122-w/pornin map x1 to (x, λ)799 ns797 ns .. 800 ns
hash to addend, one at a timegf2_122-uhash_to_curve/gf2_122-u/pornin map x1 to (u, v)857 ns855 ns .. 858 ns
hash to addend, one at a timegf2_122-gls-lambdahash_to_curve/gf2_122-gls-lambda/pornin map x1 to (x, λ)788 ns787 ns .. 790 ns
hash to addend, one at a timegf2_122-gls-whash_to_curve/gf2_122-gls-w/pornin map x1 to (x, λ)791 ns790 ns .. 793 ns
hash to addend, one at a timegf2_122-gls-uhash_to_curve/gf2_122-gls-u/pornin map x1 to (u, v)843 ns841 ns .. 844 ns
hash to addend, batchedgf2_127-lambdahash_to_curve/gf2_127-lambda/try-and-increment to (x, λ), batched179 ns179 ns .. 180 ns
hash to addend, batchedgf2_127-whash_to_curve/gf2_127-w/pornin map x1 to (x, λ), batched184 ns184 ns .. 185 ns
hash to addend, batchedgf2_127-uhash_to_curve/gf2_127-u/pornin map x1 to (u, v), batched213 ns212 ns .. 213 ns
hash to addend, batchedgf2_109-lambdahash_to_curve/gf2_109-lambda/try-and-increment to (x, λ), batched511 ns510 ns .. 511 ns
hash to addend, batchedgf2_109-whash_to_curve/gf2_109-w/pornin map x1 to (x, λ), batched522 ns522 ns .. 523 ns
hash to addend, batchedgf2_109-uhash_to_curve/gf2_109-u/pornin map x1 to (u, v), batched593 ns591 ns .. 594 ns
hash to addend, batchedgf2_122-lambdahash_to_curve/gf2_122-lambda/try-and-increment to (x, λ), batched361 ns349 ns .. 376 ns
hash to addend, batchedgf2_122-whash_to_curve/gf2_122-w/pornin map x1 to (x, λ), batched429 ns403 ns .. 454 ns
hash to addend, batchedgf2_122-uhash_to_curve/gf2_122-u/pornin map x1 to (u, v), batched622 ns603 ns .. 638 ns
hash to addend, batchedgf2_122-gls-lambdahash_to_curve/gf2_122-gls-lambda/try-and-increment to (x, λ), batched327 ns314 ns .. 341 ns
hash to addend, batchedgf2_122-gls-whash_to_curve/gf2_122-gls-w/pornin map x1 to (x, λ), batched404 ns383 ns .. 424 ns
hash to addend, batchedgf2_122-gls-uhash_to_curve/gf2_122-gls-u/pornin map x1 to (u, v), batched593 ns585 ns .. 599 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) accumulators442111244636
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine442111244636
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes442111244636
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_109batch109 ns108 ns .. 109 nsper elem
batch invertgf2_122/batch invert (product tree)gf2_122batch74.0 ns73.8 ns .. 74.1 nsper elem
batch invertgf2_127/batch invert (product tree)gf2_127batch42.0 ns42.0 ns .. 42.1 nsper elem
batch invertfp127/batch invert (product tree)fp127batch5.71 ns5.69 ns .. 5.74 nsper elem
halftracegf2_109/halftracegf2_109per-element36.8 ns36.7 ns .. 36.9 nsper elem
halftracegf2_109/halftrace (byte tables)gf2_109per-element3.28 ns3.27 ns .. 3.29 nsper elem
halftracegf2_122/qsolve (z^2 + z = c, 2 base halftraces)gf2_122per-element2.39 ns2.38 ns .. 2.39 nsper elem
halftracegf2_127/halftracegf2_127per-element15.1 ns15.1 ns .. 15.2 nsper elem
halftracegf2_127/halftrace (byte tables)gf2_127per-element3.50 ns3.49 ns .. 3.51 nsper elem
halftracegf2_127/halftrace (nibble tables)gf2_127per-element17.8 ns17.7 ns .. 17.8 nsper elem
mul_u2gf2_122/mul_u2 (by a^2 = 1 + a) latency (dependent chain)gf2_122latency0.26 ns0.26 ns .. 0.26 nsper elem
mul_u2gf2_122/mul_u2 (by a^2 = 1 + a) throughput (8 chains)gf2_122throughput0.13 ns0.13 ns .. 0.13 nsper elem
tracegf2_109/tracegf2_109per-element0.45 ns0.45 ns .. 0.45 nsper elem
tracegf2_122/tracegf2_122per-element0.34 ns0.34 ns .. 0.34 nsper elem
tracegf2_127/tracegf2_127per-element0.34 ns0.34 ns .. 0.34 nsper elem
packfp127/packfp127per-element0.35 ns0.35 ns .. 0.36 nsper elem
normalizegf2_109/normalize (to_u128)gf2_109per-element0.53 ns0.53 ns .. 0.53 nsper elem
normalizegf2_122/normalize (to_u128)gf2_122per-element0.70 ns0.70 ns .. 0.70 nsper elem
normalizegf2_127/normalize (to_u128)gf2_127per-element0.42 ns0.42 ns .. 0.42 nsper elem
unpackfp127/unpackfp127per-element0.57 ns0.57 ns .. 0.57 nsper elem
negfp127/negfp127per-element0.75 ns0.75 ns .. 0.76 nsper elem
addfp127/addfp127per-element0.94 ns0.94 ns .. 0.94 nsper elem
squaregf2_109/square latency (dependent chain)gf2_109latency26.7 ns26.7 ns .. 26.8 nsper elem
squaregf2_109/square throughput (8 chains)gf2_109throughput21.8 ns21.7 ns .. 21.8 nsper elem
squaregf2_122/square latency (dependent chain)gf2_122latency16.7 ns16.7 ns .. 16.8 nsper elem
squaregf2_122/square throughput (8 chains)gf2_122throughput3.84 ns3.83 ns .. 3.85 nsper elem
squaregf2_127/square latency (dependent chain)gf2_127latency4.19 ns4.18 ns .. 4.20 nsper elem
squaregf2_127/square throughput (8 chains)gf2_127throughput2.58 ns2.58 ns .. 2.59 nsper elem
squarefp127/square latency (dependent chain)fp127latency3.64 ns3.63 ns .. 3.65 nsper elem
squarefp127/square throughput (8 chains)fp127throughput1.91 ns1.91 ns .. 1.92 nsper elem
sqrtgf2_109/sqrtgf2_109per-element19.2 ns19.2 ns .. 19.3 nsper elem
sqrtgf2_122/sqrtgf2_122per-element3.41 ns3.40 ns .. 3.41 nsper elem
sqrtgf2_127/sqrtgf2_127per-element2.61 ns2.60 ns .. 2.62 nsper elem
sqrtfp127/sqrt (x^(2^125))fp127per-element474 ns473 ns .. 475 nsper elem
mul_basegf2_122/mul_base (by a GF(2^61) constant) latency (dependent chain)gf2_122latency20.9 ns20.9 ns .. 21.0 nsper elem
mul_basegf2_122/mul_base (by a GF(2^61) constant) throughput (8 chains)gf2_122throughput13.9 ns13.8 ns .. 13.9 nsper elem
mulgf2_109/mul latency (dependent chain)gf2_109latency38.9 ns38.8 ns .. 39.0 nsper elem
mulgf2_109/mul throughput (8 chains)gf2_109throughput34.7 ns34.6 ns .. 34.9 nsper elem
mulgf2_122/mul latency (dependent chain)gf2_122latency29.1 ns29.1 ns .. 29.2 nsper elem
mulgf2_122/mul throughput (8 chains)gf2_122throughput24.6 ns24.6 ns .. 24.7 nsper elem
mulgf2_127/mul latency (dependent chain)gf2_127latency13.4 ns13.4 ns .. 13.5 nsper elem
mulgf2_127/mul throughput (8 chains)gf2_127throughput13.2 ns13.2 ns .. 13.3 nsper elem
mulfp127/mul latency (dependent chain)fp127latency3.64 ns3.63 ns .. 3.65 nsper elem
mulfp127/mul throughput (8 chains)fp127throughput1.54 ns1.54 ns .. 1.54 nsper elem
pow_p34fp127/pow_p34 (x^(2^125-1))fp127per-element504 ns503 ns .. 505 nsper elem
invertgf2_109/invertgf2_109per-element2.82 µs2.82 µs .. 2.83 µsper elem
invertgf2_122/invertgf2_122per-element494 ns493 ns .. 495 nsper elem
invertgf2_127/invertgf2_127per-element391 ns390 ns .. 392 nsper elem
invertfp127/invertfp127per-element519 ns518 ns .. 521 nsper elem
sqrt_ratiofp127/sqrt_ratiofp127per-element525 ns523 ns .. 526 nsper elem

group ops

277 benchmarks
operationbenchmarkfamilymodetime95% CIunit
preparebinary.109/mode=batch,n=1024gf2_109batch95.7 ns95.5 ns .. 95.9 nsper elem
preparebinary.109/mode=indepgf2_109per-element95.3 ns95.1 ns .. 95.4 nsper elem
preparebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch147 ns147 ns .. 147 nsper elem
preparebinary-lambda.109/mode=indepgf2_109-lambdaper-element2.86 µs2.86 µs .. 2.87 µsper elem
preparebinary-u.109/mode=batch,n=1024gf2_109-ubatch0.98 ns0.97 ns .. 0.99 nsper elem
preparebinary-u.109/mode=indepgf2_109-uper-element0.62 ns0.62 ns .. 0.62 nsper elem
preparebinary-w.109/mode=batch,n=1024gf2_109-wbatch0.97 ns0.96 ns .. 0.98 nsper elem
preparebinary-w.109/mode=indepgf2_109-wper-element0.62 ns0.62 ns .. 0.62 nsper elem
preparebinary.122/mode=batch,n=1024gf2_122batch63.1 ns62.9 ns .. 63.3 nsper elem
preparebinary.122/mode=indepgf2_122per-element64.2 ns64.0 ns .. 64.3 nsper elem
preparebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch44.3 ns44.1 ns .. 44.4 nsper elem
preparebinary.122-gls/mode=indepgf2_122-glsper-element44.2 ns44.0 ns .. 44.3 nsper elem
preparebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch101 ns100 ns .. 101 nsper elem
preparebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element524 ns522 ns .. 525 nsper elem
preparebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch1.01 ns0.98 ns .. 1.04 nsper elem
preparebinary-u.122-gls/mode=indepgf2_122-gls-uper-element0.62 ns0.61 ns .. 0.62 nsper elem
preparebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch0.97 ns0.96 ns .. 0.99 nsper elem
preparebinary-w.122-gls/mode=indepgf2_122-gls-wper-element0.62 ns0.62 ns .. 0.62 nsper elem
preparebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch100 ns99.9 ns .. 101 nsper elem
preparebinary-lambda.122/mode=indepgf2_122-lambdaper-element521 ns520 ns .. 523 nsper elem
preparebinary-u.122/mode=batch,n=1024gf2_122-ubatch0.99 ns0.98 ns .. 0.99 nsper elem
preparebinary-u.122/mode=indepgf2_122-uper-element0.62 ns0.62 ns .. 0.62 nsper elem
preparebinary-w.122/mode=batch,n=1024gf2_122-wbatch0.99 ns0.98 ns .. 1.00 nsper elem
preparebinary-w.122/mode=indepgf2_122-wper-element0.62 ns0.61 ns .. 0.62 nsper elem
preparebinary.127/mode=batch,n=1024gf2_127batch31.2 ns31.2 ns .. 31.3 nsper elem
preparebinary.127/mode=indepgf2_127per-element31.6 ns31.5 ns .. 31.6 nsper elem
preparebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch56.6 ns56.5 ns .. 56.8 nsper elem
preparebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch65.7 ns65.6 ns .. 65.8 nsper elem
preparebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch115 ns115 ns .. 115 nsper elem
preparebinary-lambda.127/mode=indepgf2_127-lambdaper-element412 ns411 ns .. 412 nsper elem
preparebinary-u.127/mode=batch,n=1024gf2_127-ubatch0.98 ns0.98 ns .. 0.99 nsper elem
preparebinary-u.127/mode=batch,n=64gf2_127-ubatch1.01 ns1.01 ns .. 1.01 nsper elem
preparebinary-u.127/mode=batch,n=8gf2_127-ubatch1.85 ns1.84 ns .. 1.85 nsper elem
preparebinary-u.127/mode=indepgf2_127-uper-element0.62 ns0.62 ns .. 0.62 nsper elem
preparebinary-w.127/mode=batch,n=1024gf2_127-wbatch0.97 ns0.96 ns .. 0.98 nsper elem
preparebinary-w.127/mode=batch,n=64gf2_127-wbatch1.01 ns1.01 ns .. 1.01 nsper elem
preparebinary-w.127/mode=batch,n=8gf2_127-wbatch1.85 ns1.84 ns .. 1.85 nsper elem
preparebinary-w.127/mode=indepgf2_127-wper-element0.62 ns0.62 ns .. 0.62 nsper elem
prepareedwards.127/mode=batch,n=1024edwards127batch27.2 ns27.2 ns .. 27.3 nsper elem
prepareedwards.127/mode=batch,n=64edwards127batch37.1 ns36.9 ns .. 37.2 nsper elem
prepareedwards.127/mode=batch,n=8edwards127batch105 ns105 ns .. 105 nsper elem
prepareedwards.127/mode=indepedwards127per-element573 ns571 ns .. 574 nsper elem
prepareweier.127/mode=batch,n=1024weier127batch0.45 ns0.45 ns .. 0.46 nsper elem
prepareweier.127/mode=batch,n=64weier127batch0.54 ns0.54 ns .. 0.54 nsper elem
prepareweier.127/mode=batch,n=8weier127batch1.42 ns1.41 ns .. 1.43 nsper elem
prepareweier.127/mode=indepweier127per-element0.58 ns0.57 ns .. 0.58 nsper elem
prepareweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch0.46 ns0.46 ns .. 0.46 nsper elem
prepareweier-jacobian.127/mode=batch,n=64weier127-jacobianbatch0.54 ns0.54 ns .. 0.55 nsper elem
prepareweier-jacobian.127/mode=batch,n=8weier127-jacobianbatch1.41 ns1.41 ns .. 1.42 nsper elem
prepareweier-jacobian.127/mode=indepweier127-jacobianper-element0.57 ns0.57 ns .. 0.58 nsper elem
addxor-sha256/xor 32B, 1 accumulatorxorlatency0.39 ns0.39 ns .. 0.39 nsper elem
addxor-sha256/xor 32B, 8 accumulatorsxorthroughput0.73 ns0.73 ns .. 0.73 nsper elem
addbinary.109/mode=latencygf2_109latency403 ns403 ns .. 404 nsper elem
addbinary.109/mode=throughputgf2_109throughput403 ns402 ns .. 404 nsper elem
addgf2_109/extended += affine, 8 accumulatorsgf2_109throughput504 ns500 ns .. 509 nsper elem
addbinary-lambda.109/mode=latencygf2_109-lambdalatency334 ns333 ns .. 335 nsper elem
addbinary-lambda.109/mode=throughputgf2_109-lambdathroughput331 ns330 ns .. 332 nsper elem
addbinary-u.109/mode=latencygf2_109-ulatency290 ns289 ns .. 290 nsper elem
addbinary-u.109/mode=throughputgf2_109-uthroughput289 ns289 ns .. 290 nsper elem
addbinary-w.109/mode=latencygf2_109-wlatency335 ns334 ns .. 335 nsper elem
addbinary-w.109/mode=throughputgf2_109-wthroughput332 ns331 ns .. 332 nsper elem
addbinary.122/mode=latencygf2_122latency267 ns266 ns .. 268 nsper elem
addbinary.122/mode=throughputgf2_122throughput263 ns262 ns .. 264 nsper elem
addgf2_122/extended += affine, 8 accumulatorsgf2_122throughput330 ns330 ns .. 331 nsper elem
addbinary.122-gls/mode=latencygf2_122-glslatency240 ns239 ns .. 241 nsper elem
addbinary.122-gls/mode=throughputgf2_122-glsthroughput246 ns245 ns .. 247 nsper elem
addgf2_122-gls/extended += affine, 8 accumulatorsgf2_122-glsthroughput301 ns299 ns .. 303 nsper elem
addbinary-lambda.122-gls/mode=latencygf2_122-gls-lambdalatency219 ns219 ns .. 220 nsper elem
addbinary-lambda.122-gls/mode=throughputgf2_122-gls-lambdathroughput216 ns215 ns .. 217 nsper elem
addbinary-u.122-gls/mode=latencygf2_122-gls-ulatency183 ns183 ns .. 183 nsper elem
addbinary-u.122-gls/mode=throughputgf2_122-gls-uthroughput182 ns182 ns .. 183 nsper elem
addbinary-w.122-gls/mode=latencygf2_122-gls-wlatency219 ns219 ns .. 220 nsper elem
addbinary-w.122-gls/mode=throughputgf2_122-gls-wthroughput217 ns216 ns .. 217 nsper elem
addbinary-lambda.122/mode=latencygf2_122-lambdalatency219 ns219 ns .. 220 nsper elem
addbinary-lambda.122/mode=throughputgf2_122-lambdathroughput217 ns217 ns .. 217 nsper elem
addbinary-u.122/mode=latencygf2_122-ulatency183 ns183 ns .. 184 nsper elem
addbinary-u.122/mode=throughputgf2_122-uthroughput183 ns183 ns .. 183 nsper elem
addbinary-w.122/mode=latencygf2_122-wlatency219 ns219 ns .. 220 nsper elem
addbinary-w.122/mode=throughputgf2_122-wthroughput211 ns209 ns .. 212 nsper elem
addbinary.127/mode=latencygf2_127latency156 ns155 ns .. 156 nsper elem
addbinary.127/mode=throughputgf2_127throughput155 ns155 ns .. 155 nsper elem
addgf2_127/extended += affine, 8 accumulatorsgf2_127throughput193 ns193 ns .. 194 nsper elem
addbinary-lambda.127/mode=latencygf2_127-lambdalatency135 ns135 ns .. 135 nsper elem
addbinary-lambda.127/mode=throughputgf2_127-lambdathroughput132 ns131 ns .. 132 nsper elem
addbinary-u.127/mode=latencygf2_127-ulatency119 ns119 ns .. 120 nsper elem
addbinary-u.127/mode=throughputgf2_127-uthroughput116 ns116 ns .. 116 nsper elem
addbinary-w.127/mode=latencygf2_127-wlatency135 ns135 ns .. 135 nsper elem
addbinary-w.127/mode=throughputgf2_127-wthroughput131 ns131 ns .. 131 nsper elem
addedwards.127/mode=latencyedwards127latency22.1 ns22.0 ns .. 22.1 nsper elem
addedwards.127/mode=throughputedwards127throughput19.9 ns19.9 ns .. 19.9 nsper elem
addedwards127/+= montgomery affine, 8 accumulatorsedwards127throughput40.4 ns40.3 ns .. 40.5 nsper elem
addweier.127/mode=latencyweier127latency46.2 ns46.1 ns .. 46.3 nsper elem
addweier.127/mode=throughputweier127throughput44.7 ns44.6 ns .. 44.8 nsper elem
addweier-jacobian.127/mode=latencyweier127-jacobianlatency45.0 ns44.8 ns .. 45.1 nsper elem
addweier-jacobian.127/mode=throughputweier127-jacobianthroughput36.6 ns36.5 ns .. 36.8 nsper elem
subtractbinary-lambda.127/mode=throughputgf2_127-lambdathroughput131 ns131 ns .. 131 nsper elem
subtractbinary-u.127/mode=throughputgf2_127-uthroughput119 ns118 ns .. 119 nsper elem
subtractbinary-w.127/mode=throughputgf2_127-wthroughput131 ns131 ns .. 131 nsper elem
subtractedwards.127/mode=throughputedwards127throughput22.7 ns22.6 ns .. 22.7 nsper elem
subtractweier.127/mode=throughputweier127throughput46.4 ns46.3 ns .. 46.5 nsper elem
subtractweier-jacobian.127/mode=throughputweier127-jacobianthroughput37.6 ns37.5 ns .. 37.6 nsper elem
negatebinary.109gf2_109per-element1.05 ns1.05 ns .. 1.05 nsper elem
negategf2_109/affine (y += x)gf2_109per-element0.69 ns0.68 ns .. 0.69 nsper elem
negatebinary-lambda.109gf2_109-lambdaper-element0.65 ns0.64 ns .. 0.65 nsper elem
negatebinary-u.109gf2_109-uper-element0.69 ns0.69 ns .. 0.69 nsper elem
negatebinary-w.109gf2_109-wper-element0.64 ns0.64 ns .. 0.65 nsper elem
negatebinary.122gf2_122per-element1.04 ns1.04 ns .. 1.05 nsper elem
negategf2_122/affine (y += x)gf2_122per-element0.69 ns0.69 ns .. 0.69 nsper elem
negatebinary.122-glsgf2_122-glsper-element1.02 ns1.02 ns .. 1.02 nsper elem
negatebinary-lambda.122-glsgf2_122-gls-lambdaper-element0.65 ns0.64 ns .. 0.65 nsper elem
negatebinary-u.122-glsgf2_122-gls-uper-element0.69 ns0.69 ns .. 0.69 nsper elem
negatebinary-w.122-glsgf2_122-gls-wper-element0.65 ns0.64 ns .. 0.65 nsper elem
negatebinary-lambda.122gf2_122-lambdaper-element0.65 ns0.64 ns .. 0.65 nsper elem
negatebinary-u.122gf2_122-uper-element0.69 ns0.69 ns .. 0.69 nsper elem
negatebinary-w.122gf2_122-wper-element0.64 ns0.64 ns .. 0.65 nsper elem
negatebinary.127gf2_127per-element1.05 ns1.04 ns .. 1.05 nsper elem
negategf2_127/affine (y += x)gf2_127per-element0.69 ns0.69 ns .. 0.69 nsper elem
negatebinary-lambda.127gf2_127-lambdaper-element0.64 ns0.64 ns .. 0.65 nsper elem
negatebinary-u.127gf2_127-uper-element0.68 ns0.67 ns .. 0.69 nsper elem
negatebinary-w.127gf2_127-wper-element0.65 ns0.65 ns .. 0.65 nsper elem
negateedwards.127edwards127per-element1.40 ns1.39 ns .. 1.40 nsper elem
negateedwards127/extended (-X, -T)edwards127per-element1.36 ns1.35 ns .. 1.37 nsper elem
negateweier.127weier127per-element0.76 ns0.75 ns .. 0.76 nsper elem
negateweier127/projective (-Y)weier127per-element0.85 ns0.85 ns .. 0.85 nsper elem
negateweier-jacobian.127weier127-jacobianper-element0.76 ns0.75 ns .. 0.76 nsper elem
is identitybinary.109gf2_109per-element0.59 ns0.58 ns .. 0.59 nsper elem
is identitybinary-lambda.109gf2_109-lambdaper-element0.57 ns0.57 ns .. 0.58 nsper elem
is identitybinary-u.109gf2_109-uper-element0.58 ns0.58 ns .. 0.58 nsper elem
is identitybinary-w.109gf2_109-wper-element0.58 ns0.58 ns .. 0.58 nsper elem
is identitybinary.122gf2_122per-element0.84 ns0.84 ns .. 0.84 nsper elem
is identitybinary.122-glsgf2_122-glsper-element0.84 ns0.84 ns .. 0.84 nsper elem
is identitybinary-lambda.122-glsgf2_122-gls-lambdaper-element0.84 ns0.84 ns .. 0.84 nsper elem
is identitybinary-u.122-glsgf2_122-gls-uper-element0.84 ns0.84 ns .. 0.84 nsper elem
is identitybinary-w.122-glsgf2_122-gls-wper-element0.84 ns0.84 ns .. 0.84 nsper elem
is identitybinary-lambda.122gf2_122-lambdaper-element0.84 ns0.84 ns .. 0.84 nsper elem
is identitybinary-u.122gf2_122-uper-element0.83 ns0.82 ns .. 0.84 nsper elem
is identitybinary-w.122gf2_122-wper-element0.84 ns0.84 ns .. 0.84 nsper elem
is identitybinary.127gf2_127per-element0.59 ns0.59 ns .. 0.60 nsper elem
is identitybinary-lambda.127gf2_127-lambdaper-element0.55 ns0.54 ns .. 0.55 nsper elem
is identitybinary-u.127gf2_127-uper-element0.54 ns0.54 ns .. 0.55 nsper elem
is identitybinary-w.127gf2_127-wper-element0.55 ns0.54 ns .. 0.55 nsper elem
is identityedwards.127edwards127per-element0.34 ns0.33 ns .. 0.34 nsper elem
is identityweier.127weier127per-element0.34 ns0.34 ns .. 0.34 nsper elem
is identityweier-jacobian.127weier127-jacobianper-element0.34 ns0.34 ns .. 0.34 nsper elem
equals addendbinary.109/mode=mismatchgf2_109mismatch72.9 ns72.7 ns .. 73.1 nsper elem
equals addendbinary-lambda.109/mode=mismatchgf2_109-lambdamismatch39.3 ns39.2 ns .. 39.4 nsper elem
equals addendbinary-u.109/mode=mismatchgf2_109-umismatch115 ns115 ns .. 116 nsper elem
equals addendbinary-w.109/mode=mismatchgf2_109-wmismatch39.4 ns39.3 ns .. 39.5 nsper elem
equals addendbinary.122/mode=mismatchgf2_122mismatch53.7 ns53.5 ns .. 53.9 nsper elem
equals addendbinary.122-gls/mode=mismatchgf2_122-glsmismatch54.4 ns54.3 ns .. 54.5 nsper elem
equals addendbinary-lambda.122-gls/mode=mismatchgf2_122-gls-lambdamismatch27.8 ns27.7 ns .. 27.9 nsper elem
equals addendbinary-u.122-gls/mode=mismatchgf2_122-gls-umismatch85.0 ns84.8 ns .. 85.2 nsper elem
equals addendbinary-w.122-gls/mode=mismatchgf2_122-gls-wmismatch27.9 ns27.9 ns .. 28.0 nsper elem
equals addendbinary-lambda.122/mode=mismatchgf2_122-lambdamismatch27.9 ns27.8 ns .. 28.0 nsper elem
equals addendbinary-u.122/mode=mismatchgf2_122-umismatch84.9 ns84.7 ns .. 85.1 nsper elem
equals addendbinary-w.122/mode=mismatchgf2_122-wmismatch27.8 ns27.7 ns .. 27.9 nsper elem
equals addendbinary.127/mode=mismatchgf2_127mismatch30.3 ns30.3 ns .. 30.4 nsper elem
equals addendbinary-lambda.127/mode=matchgf2_127-lambdamatch15.1 ns15.0 ns .. 15.1 nsper elem
equals addendbinary-lambda.127/mode=mismatchgf2_127-lambdamismatch15.1 ns15.1 ns .. 15.2 nsper elem
equals addendbinary-u.127/mode=matchgf2_127-umatch48.6 ns48.5 ns .. 48.7 nsper elem
equals addendbinary-u.127/mode=mismatchgf2_127-umismatch48.7 ns48.6 ns .. 48.8 nsper elem
equals addendbinary-w.127/mode=matchgf2_127-wmatch15.0 ns15.0 ns .. 15.1 nsper elem
equals addendbinary-w.127/mode=mismatchgf2_127-wmismatch15.1 ns15.0 ns .. 15.1 nsper elem
equals addendedwards.127/mode=matchedwards127match3.70 ns3.68 ns .. 3.72 nsper elem
equals addendedwards.127/mode=mismatchedwards127mismatch1.91 ns1.91 ns .. 1.92 nsper elem
equals addendweier.127/mode=matchweier127match3.81 ns3.80 ns .. 3.82 nsper elem
equals addendweier.127/mode=mismatchweier127mismatch1.98 ns1.98 ns .. 1.99 nsper elem
equals addendweier-jacobian.127/mode=matchweier127-jacobianmatch8.92 ns8.89 ns .. 8.96 nsper elem
equals addendweier-jacobian.127/mode=mismatchweier127-jacobianmismatch4.29 ns4.28 ns .. 4.31 nsper elem
encodebinary.109/mode=batch,n=1024gf2_109batch306 ns305 ns .. 306 nsper elem
encodebinary.109/mode=indepgf2_109per-element3.03 µs3.02 µs .. 3.03 µsper elem
encodebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch221 ns221 ns .. 222 nsper elem
encodebinary-lambda.109/mode=indepgf2_109-lambdaper-element2.95 µs2.94 µs .. 2.95 µsper elem
encodebinary-u.109/mode=batch,n=1024gf2_109-ubatch206 ns205 ns .. 207 nsper elem
encodebinary-u.109/mode=indepgf2_109-uper-element2.95 µs2.93 µs .. 2.96 µsper elem
encodebinary-w.109/mode=batch,n=1024gf2_109-wbatch204 ns203 ns .. 204 nsper elem
encodebinary-w.109/mode=indepgf2_109-wper-element2.90 µs2.89 µs .. 2.91 µsper elem
encodebinary.122/mode=batch,n=1024gf2_122batch202 ns202 ns .. 203 nsper elem
encodebinary.122/mode=indepgf2_122per-element618 ns616 ns .. 619 nsper elem
encodebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch194 ns193 ns .. 195 nsper elem
encodebinary.122-gls/mode=indepgf2_122-glsper-element612 ns609 ns .. 614 nsper elem
encodebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch156 ns155 ns .. 156 nsper elem
encodebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element576 ns575 ns .. 578 nsper elem
encodebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch133 ns133 ns .. 133 nsper elem
encodebinary-u.122-gls/mode=indepgf2_122-gls-uper-element562 ns561 ns .. 564 nsper elem
encodebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch130 ns129 ns .. 130 nsper elem
encodebinary-w.122-gls/mode=indepgf2_122-gls-wper-element555 ns553 ns .. 556 nsper elem
encodebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch156 ns155 ns .. 156 nsper elem
encodebinary-lambda.122/mode=indepgf2_122-lambdaper-element573 ns572 ns .. 575 nsper elem
encodebinary-u.122/mode=batch,n=1024gf2_122-ubatch132 ns132 ns .. 133 nsper elem
encodebinary-u.122/mode=indepgf2_122-uper-element564 ns563 ns .. 566 nsper elem
encodebinary-w.122/mode=batch,n=1024gf2_122-wbatch130 ns130 ns .. 131 nsper elem
encodebinary-w.122/mode=indepgf2_122-wper-element551 ns550 ns .. 553 nsper elem
encodebinary.127/mode=batch,n=1024gf2_127batch106 ns106 ns .. 106 nsper elem
encodebinary.127/mode=indepgf2_127per-element462 ns461 ns .. 462 nsper elem
encodebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch87.0 ns86.8 ns .. 87.1 nsper elem
encodebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch95.8 ns95.6 ns .. 96.1 nsper elem
encodebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch146 ns146 ns .. 146 nsper elem
encodebinary-lambda.127/mode=indepgf2_127-lambdaper-element442 ns441 ns .. 443 nsper elem
encodebinary-u.127/mode=batch,n=1024gf2_127-ubatch76.5 ns75.9 ns .. 77.2 nsper elem
encodebinary-u.127/mode=batch,n=64gf2_127-ubatch85.9 ns85.7 ns .. 86.1 nsper elem
encodebinary-u.127/mode=batch,n=8gf2_127-ubatch131 ns131 ns .. 131 nsper elem
encodebinary-u.127/mode=indepgf2_127-uper-element438 ns437 ns .. 438 nsper elem
encodebinary-w.127/mode=batch,n=1024gf2_127-wbatch76.5 ns76.3 ns .. 76.6 nsper elem
encodebinary-w.127/mode=batch,n=64gf2_127-wbatch85.1 ns84.9 ns .. 85.4 nsper elem
encodebinary-w.127/mode=batch,n=8gf2_127-wbatch135 ns135 ns .. 136 nsper elem
encodebinary-w.127/mode=indepgf2_127-wper-element432 ns432 ns .. 433 nsper elem
encodeedwards.127/mode=batch,n=1024edwards127batch21.7 ns21.7 ns .. 21.7 nsper elem
encodeedwards.127/mode=batch,n=64edwards127batch32.1 ns32.0 ns .. 32.1 nsper elem
encodeedwards.127/mode=batch,n=8edwards127batch99.7 ns99.3 ns .. 100 nsper elem
encodeedwards.127/mode=indepedwards127per-element536 ns534 ns .. 538 nsper elem
encodeweier.127/mode=batch,n=1024weier127batch9.97 ns9.95 ns .. 9.99 nsper elem
encodeweier.127/mode=batch,n=64weier127batch20.4 ns20.3 ns .. 20.4 nsper elem
encodeweier.127/mode=batch,n=8weier127batch85.1 ns84.8 ns .. 85.4 nsper elem
encodeweier.127/mode=indepweier127per-element527 ns526 ns .. 528 nsper elem
encodeweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch15.3 ns15.3 ns .. 15.4 nsper elem
encodeweier-jacobian.127/mode=batch,n=64weier127-jacobianbatch25.8 ns25.7 ns .. 25.8 nsper elem
encodeweier-jacobian.127/mode=batch,n=8weier127-jacobianbatch90.0 ns89.7 ns .. 90.3 nsper elem
encodeweier-jacobian.127/mode=indepweier127-jacobianper-element531 ns530 ns .. 532 nsper elem
decodebinary.109/mode=batch,n=1024gf2_109batch263 ns262 ns .. 263 nsper elem
decodebinary.109/mode=indepgf2_109per-element2.98 µs2.97 µs .. 2.98 µsper elem
decodebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch263 ns262 ns .. 263 nsper elem
decodebinary-lambda.109/mode=indepgf2_109-lambdaper-element2.98 µs2.98 µs .. 2.99 µsper elem
decodebinary-u.109/mode=batch,n=1024gf2_109-ubatch319 ns318 ns .. 319 nsper elem
decodebinary-u.109/mode=indepgf2_109-uper-element3.04 µs3.04 µs .. 3.05 µsper elem
decodebinary-w.109/mode=batch,n=1024gf2_109-wbatch240 ns239 ns .. 241 nsper elem
decodebinary-w.109/mode=indepgf2_109-wper-element2.96 µs2.96 µs .. 2.97 µsper elem
decodebinary.122/mode=batch,n=1024gf2_122batch187 ns186 ns .. 187 nsper elem
decodebinary.122/mode=indepgf2_122per-element607 ns606 ns .. 609 nsper elem
decodebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch162 ns162 ns .. 163 nsper elem
decodebinary.122-gls/mode=indepgf2_122-glsper-element592 ns591 ns .. 594 nsper elem
decodebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch163 ns162 ns .. 163 nsper elem
decodebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element599 ns595 ns .. 603 nsper elem
decodebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch187 ns186 ns .. 187 nsper elem
decodebinary-u.122-gls/mode=indepgf2_122-gls-uper-element639 ns637 ns .. 641 nsper elem
decodebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch138 ns137 ns .. 138 nsper elem
decodebinary-w.122-gls/mode=indepgf2_122-gls-wper-element591 ns589 ns .. 592 nsper elem
decodebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch186 ns186 ns .. 187 nsper elem
decodebinary-lambda.122/mode=indepgf2_122-lambdaper-element607 ns605 ns .. 608 nsper elem
decodebinary-u.122/mode=batch,n=1024gf2_122-ubatch204 ns204 ns .. 205 nsper elem
decodebinary-u.122/mode=indepgf2_122-uper-element676 ns674 ns .. 677 nsper elem
decodebinary-w.122/mode=batch,n=1024gf2_122-wbatch153 ns153 ns .. 154 nsper elem
decodebinary-w.122/mode=indepgf2_122-wper-element601 ns600 ns .. 603 nsper elem
decodebinary.127/mode=batch,n=1024gf2_127batch88.0 ns87.8 ns .. 88.1 nsper elem
decodebinary.127/mode=indepgf2_127per-element446 ns445 ns .. 447 nsper elem
decodebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch87.9 ns87.8 ns .. 88.1 nsper elem
decodebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch96.8 ns96.6 ns .. 97.0 nsper elem
decodebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch149 ns149 ns .. 149 nsper elem
decodebinary-lambda.127/mode=indepgf2_127-lambdaper-element447 ns446 ns .. 447 nsper elem
decodebinary-u.127/mode=batch,n=1024gf2_127-ubatch121 ns121 ns .. 121 nsper elem
decodebinary-u.127/mode=batch,n=64gf2_127-ubatch131 ns130 ns .. 131 nsper elem
decodebinary-u.127/mode=batch,n=8gf2_127-ubatch185 ns185 ns .. 185 nsper elem
decodebinary-u.127/mode=indepgf2_127-uper-element479 ns478 ns .. 480 nsper elem
decodebinary-w.127/mode=batch,n=1024gf2_127-wbatch89.2 ns89.0 ns .. 89.3 nsper elem
decodebinary-w.127/mode=batch,n=64gf2_127-wbatch97.8 ns97.6 ns .. 97.9 nsper elem
decodebinary-w.127/mode=batch,n=8gf2_127-wbatch153 ns152 ns .. 153 nsper elem
decodebinary-w.127/mode=indepgf2_127-wper-element447 ns446 ns .. 448 nsper elem
decodeedwards.127/mode=batch,n=1024edwards127batch485 ns483 ns .. 486 nsper elem
decodeedwards.127/mode=batch,n=64edwards127batch487 ns486 ns .. 489 nsper elem
decodeedwards.127/mode=batch,n=8edwards127batch493 ns492 ns .. 494 nsper elem
decodeedwards.127/mode=indepedwards127per-element485 ns484 ns .. 486 nsper elem
decodeweier.127/mode=batch,n=1024weier127batch484 ns483 ns .. 485 nsper elem
decodeweier.127/mode=batch,n=64weier127batch482 ns481 ns .. 483 nsper elem
decodeweier.127/mode=batch,n=8weier127batch487 ns486 ns .. 488 nsper elem
decodeweier.127/mode=indepweier127per-element487 ns486 ns .. 489 nsper elem
decodeweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch483 ns482 ns .. 484 nsper elem
decodeweier-jacobian.127/mode=batch,n=64weier127-jacobianbatch482 ns481 ns .. 483 nsper elem
decodeweier-jacobian.127/mode=batch,n=8weier127-jacobianbatch485 ns484 ns .. 486 nsper elem
decodeweier-jacobian.127/mode=indepweier127-jacobianper-element484 ns483 ns .. 486 nsper elem
normalizegf2_109/normalize, batchedgf2_109batch305 ns303 ns .. 307 nsper elem
normalizegf2_122/normalize, batchedgf2_122batch202 ns202 ns .. 202 nsper elem
normalizegf2_122-gls/normalize, batchedgf2_122-glsbatch195 ns194 ns .. 195 nsper elem
batch sumgf2_109/batch affine (tree sum)gf2_109batch241 ns240 ns .. 242 nsper elem
batch sumgf2_122/batch affine (tree sum)gf2_122batch154 ns153 ns .. 155 nsper elem
batch sumgf2_127/batch affine (tree sum)gf2_127batch82.9 ns82.7 ns .. 83.0 nsper elem
batch sumedwards127/batch montgomery affine (tree sum)edwards127batch30.8 ns30.7 ns .. 30.8 nsper elem
batch sumweier127/batch affine (tree sum)weier127batch29.1 ns29.1 ns .. 29.2 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.

115 benchmarks
operationbenchmarkfamilymodetime95% CIunit
hash to curvebinary.109/mode=batch,n=1024gf2_109batch518 ns517 ns .. 520 nsper elem
hash to curvebinary.109/mode=indepgf2_109per-element5.86 µs5.85 µs .. 5.87 µsper elem
hash to curvebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch517 ns516 ns .. 518 nsper elem
hash to curvebinary-lambda.109/mode=indepgf2_109-lambdaper-element5.87 µs5.86 µs .. 5.88 µsper elem
hash to curvebinary-u.109/mode=batch,n=1024gf2_109-ubatch592 ns591 ns .. 593 nsper elem
hash to curvebinary-u.109/mode=indepgf2_109-uper-element5.87 µs5.86 µs .. 5.88 µsper elem
hash to curvebinary-w.109/mode=batch,n=1024gf2_109-wbatch516 ns515 ns .. 517 nsper elem
hash to curvebinary-w.109/mode=indepgf2_109-wper-element5.78 µs5.77 µs .. 5.79 µsper elem
hash to curvebinary.122/mode=batch,n=1024gf2_122batch350 ns349 ns .. 351 nsper elem
hash to curvebinary.122/mode=indepgf2_122per-element1.16 µs1.16 µs .. 1.17 µsper elem
hash to curvebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch309 ns308 ns .. 310 nsper elem
hash to curvebinary.122-gls/mode=indepgf2_122-glsper-element1.20 µs1.20 µs .. 1.21 µsper elem
hash to curvebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch315 ns314 ns .. 315 nsper elem
hash to curvebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element1.18 µs1.18 µs .. 1.18 µsper elem
hash to curvebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch359 ns358 ns .. 360 nsper elem
hash to curvebinary-u.122-gls/mode=indepgf2_122-gls-uper-element1.25 µs1.25 µs .. 1.25 µsper elem
hash to curvebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch311 ns310 ns .. 311 nsper elem
hash to curvebinary-w.122-gls/mode=indepgf2_122-gls-wper-element1.24 µs1.23 µs .. 1.26 µsper elem
hash to curvebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch350 ns348 ns .. 351 nsper elem
hash to curvebinary-lambda.122/mode=indepgf2_122-lambdaper-element1.18 µs1.18 µs .. 1.19 µsper elem
hash to curvebinary-u.122/mode=batch,n=1024gf2_122-ubatch391 ns390 ns .. 392 nsper elem
hash to curvebinary-u.122/mode=indepgf2_122-uper-element1.27 µs1.27 µs .. 1.28 µsper elem
hash to curvebinary-w.122/mode=batch,n=1024gf2_122-wbatch328 ns327 ns .. 328 nsper elem
hash to curvebinary-w.122/mode=indepgf2_122-wper-element1.21 µs1.21 µs .. 1.22 µsper elem
hash to curvebinary.127/mode=batch,n=1024gf2_127batch196 ns195 ns .. 196 nsper elem
hash to curvebinary.127/mode=indepgf2_127per-element890 ns889 ns .. 891 nsper elem
hash to curvebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch196 ns196 ns .. 196 nsper elem
hash to curvebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch247 ns247 ns .. 248 nsper elem
hash to curvebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch430 ns430 ns .. 431 nsper elem
hash to curvebinary-lambda.127/mode=indepgf2_127-lambdaper-element880 ns877 ns .. 883 nsper elem
hash to curvebinary-u.127/mode=batch,n=1024gf2_127-ubatch258 ns257 ns .. 258 nsper elem
hash to curvebinary-u.127/mode=batch,n=64gf2_127-ubatch313 ns312 ns .. 313 nsper elem
hash to curvebinary-u.127/mode=batch,n=8gf2_127-ubatch515 ns514 ns .. 516 nsper elem
hash to curvebinary-u.127/mode=indepgf2_127-uper-element1.00 µs1.00 µs .. 1.00 µsper elem
hash to curvebinary-w.127/mode=batch,n=1024gf2_127-wbatch221 ns220 ns .. 222 nsper elem
hash to curvebinary-w.127/mode=batch,n=64gf2_127-wbatch278 ns278 ns .. 279 nsper elem
hash to curvebinary-w.127/mode=batch,n=8gf2_127-wbatch467 ns465 ns .. 469 nsper elem
hash to curvebinary-w.127/mode=indepgf2_127-wper-element975 ns973 ns .. 977 nsper elem
hash to curveedwards.127/mode=batch,n=1024edwards127batch1.06 µs1.06 µs .. 1.07 µsper elem
hash to curveedwards.127/mode=batch,n=64edwards127batch1.07 µs1.06 µs .. 1.07 µsper elem
hash to curveedwards.127/mode=batch,n=8edwards127batch1.07 µs1.07 µs .. 1.08 µsper elem
hash to curveedwards.127/mode=indepedwards127per-element1.07 µs1.06 µs .. 1.07 µsper elem
hash to curveedwards127/edwards-native try-and-incrementedwards127per-element1.13 µs1.13 µs .. 1.14 µsper elem
hash to curveweier.127/mode=batch,n=1024weier127batch1.03 µs1.03 µs .. 1.03 µsper elem
hash to curveweier.127/mode=batch,n=64weier127batch1.04 µs1.03 µs .. 1.04 µsper elem
hash to curveweier.127/mode=batch,n=8weier127batch1.03 µs1.03 µs .. 1.04 µsper elem
hash to curveweier.127/mode=indepweier127per-element1.03 µs1.03 µs .. 1.03 µsper elem
hash to curveweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch1.00 µs1.00 µs .. 1.01 µsper elem
hash to curveweier-jacobian.127/mode=batch,n=64weier127-jacobianbatch1.03 µs1.03 µs .. 1.03 µsper elem
hash to curveweier-jacobian.127/mode=batch,n=8weier127-jacobianbatch1.03 µs1.03 µs .. 1.03 µsper elem
hash to curveweier-jacobian.127/mode=indepweier127-jacobianper-element1.03 µs1.03 µs .. 1.03 µsper elem
ID to addendbinary-lambda.127/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch162 ns162 ns .. 162 nsper elem
ID to addendbinary-lambda.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch222 ns221 ns .. 222 nsper elem
ID to addendbinary-lambda.127/proj=fp127,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch147 ns147 ns .. 148 nsper elem
ID to addendbinary-lambda.127/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch167 ns166 ns .. 167 nsper elem
ID to addendbinary-lambda.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch238 ns238 ns .. 239 nsper elem
ID to addendbinary-lambda.127/proj=fp130,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch165 ns165 ns .. 166 nsper elem
ID to addendbinary-lambda.127/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch188 ns187 ns .. 188 nsper elem
ID to addendbinary-lambda.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch294 ns293 ns .. 294 nsper elem
ID to addendbinary-lambda.127/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch220 ns219 ns .. 220 nsper elem
ID to addendbinary-lambda.127/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch183 ns183 ns .. 184 nsper elem
ID to addendbinary-lambda.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch250 ns249 ns .. 250 nsper elem
ID to addendbinary-lambda.127/proj=none,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch176 ns176 ns .. 177 nsper elem
ID to addendbinary-u.127/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch191 ns190 ns .. 191 nsper elem
ID to addendbinary-u.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127-ubatch209 ns208 ns .. 209 nsper elem
ID to addendbinary-u.127/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch195 ns195 ns .. 196 nsper elem
ID to addendbinary-u.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127-ubatch223 ns222 ns .. 223 nsper elem
ID to addendbinary-u.127/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch217 ns217 ns .. 217 nsper elem
ID to addendbinary-u.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127-ubatch279 ns278 ns .. 279 nsper elem
ID to addendbinary-u.127/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch212 ns211 ns .. 212 nsper elem
ID to addendbinary-u.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127-ubatch246 ns246 ns .. 247 nsper elem
ID to addendbinary-w.127/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch162 ns162 ns .. 162 nsper elem
ID to addendbinary-w.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127-wbatch175 ns174 ns .. 175 nsper elem
ID to addendbinary-w.127/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch167 ns166 ns .. 167 nsper elem
ID to addendbinary-w.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127-wbatch188 ns188 ns .. 189 nsper elem
ID to addendbinary-w.127/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch188 ns188 ns .. 189 nsper elem
ID to addendbinary-w.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127-wbatch242 ns241 ns .. 243 nsper elem
ID to addendbinary-w.127/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch183 ns183 ns .. 184 nsper elem
ID to addendbinary-w.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127-wbatch210 ns209 ns .. 211 nsper elem
ID to addendedwards.127/proj=fp127,h2c=elligator2,mode=batch,n=1024edwards127batch1.84 µs1.84 µs .. 1.85 µsper elem
ID to addendedwards.127/proj=fp127,h2c=ti,mode=batch,n=1024edwards127batch1.05 µs1.05 µs .. 1.05 µsper elem
ID to addendedwards.127/proj=fp127,h2c=ti-addend,mode=batch,n=1024edwards127batch1.13 µs1.13 µs .. 1.14 µsper elem
ID to addendedwards.127/proj=fp130,h2c=elligator2,mode=batch,n=1024edwards127batch1.84 µs1.83 µs .. 1.85 µsper elem
ID to addendedwards.127/proj=fp130,h2c=ti,mode=batch,n=1024edwards127batch1.05 µs1.04 µs .. 1.05 µsper elem
ID to addendedwards.127/proj=fp130,h2c=ti-addend,mode=batch,n=1024edwards127batch1.12 µs1.12 µs .. 1.13 µsper elem
ID to addendedwards.127/proj=gf2_127,h2c=elligator2,mode=batch,n=1024edwards127batch1.87 µs1.87 µs .. 1.87 µsper elem
ID to addendedwards.127/proj=gf2_127,h2c=ti,mode=batch,n=1024edwards127batch1.11 µs1.11 µs .. 1.12 µsper elem
ID to addendedwards.127/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024edwards127batch1.17 µs1.17 µs .. 1.18 µsper elem
ID to addendedwards.127/proj=none,h2c=elligator2,mode=batch,n=1024edwards127batch1.89 µs1.89 µs .. 1.90 µsper elem
ID to addendedwards.127/proj=none,h2c=ti,mode=batch,n=1024edwards127batch1.10 µs1.10 µs .. 1.11 µsper elem
ID to addendedwards.127/proj=none,h2c=ti-addend,mode=batch,n=1024edwards127batch1.18 µs1.17 µs .. 1.18 µsper elem
ID to addendweier.127/proj=fp127,h2c=sswu,mode=batch,n=1024weier127batch1.09 µs1.09 µs .. 1.09 µsper elem
ID to addendweier.127/proj=fp127,h2c=ti,mode=batch,n=1024weier127batch965 ns963 ns .. 967 nsper elem
ID to addendweier.127/proj=fp130,h2c=sswu,mode=batch,n=1024weier127batch1.10 µs1.09 µs .. 1.10 µsper elem
ID to addendweier.127/proj=fp130,h2c=ti,mode=batch,n=1024weier127batch1.03 µs1.03 µs .. 1.03 µsper elem
ID to addendweier.127/proj=gf2_127,h2c=sswu,mode=batch,n=1024weier127batch1.12 µs1.12 µs .. 1.13 µsper elem
ID to addendweier.127/proj=gf2_127,h2c=ti,mode=batch,n=1024weier127batch1.08 µs1.08 µs .. 1.08 µsper elem
ID to addendweier.127/proj=none,h2c=sswu,mode=batch,n=1024weier127batch1.12 µs1.12 µs .. 1.13 µsper elem
ID to addendweier.127/proj=none,h2c=ti,mode=batch,n=1024weier127batch1.01 µs1.01 µs .. 1.01 µsper elem
ID to addendweier-jacobian.127/proj=fp127,h2c=sswu,mode=batch,n=1024weier127-jacobianbatch1.12 µs1.11 µs .. 1.13 µsper elem
ID to addendweier-jacobian.127/proj=fp127,h2c=ti,mode=batch,n=1024weier127-jacobianbatch987 ns984 ns .. 990 nsper elem
ID to addendweier-jacobian.127/proj=fp130,h2c=sswu,mode=batch,n=1024weier127-jacobianbatch1.09 µs1.09 µs .. 1.10 µsper elem
ID to addendweier-jacobian.127/proj=fp130,h2c=ti,mode=batch,n=1024weier127-jacobianbatch1.03 µs1.02 µs .. 1.03 µsper elem
ID to addendweier-jacobian.127/proj=gf2_127,h2c=sswu,mode=batch,n=1024weier127-jacobianbatch1.12 µs1.11 µs .. 1.12 µsper elem
ID to addendweier-jacobian.127/proj=gf2_127,h2c=ti,mode=batch,n=1024weier127-jacobianbatch1.08 µs1.07 µs .. 1.08 µsper elem
ID to addendweier-jacobian.127/proj=none,h2c=sswu,mode=batch,n=1024weier127-jacobianbatch1.12 µs1.11 µs .. 1.12 µsper elem
ID to addendweier-jacobian.127/proj=none,h2c=ti,mode=batch,n=1024weier127-jacobianbatch1.01 µs1.01 µs .. 1.01 µsper elem
hash to addendgf2_109-lambda/try-and-increment to (x, λ)gf2_109-lambdaper-element5.85 µs5.83 µs .. 5.86 µsper elem
hash to addendgf2_109-lambda/try-and-increment to (x, λ), batchedgf2_109-lambdabatch511 ns510 ns .. 511 nsper elem
hash to addendgf2_122-gls-lambda/try-and-increment to (x, λ)gf2_122-gls-lambdaper-element1.16 µs1.16 µs .. 1.16 µsper elem
hash to addendgf2_122-gls-lambda/try-and-increment to (x, λ), batchedgf2_122-gls-lambdabatch327 ns314 ns .. 341 nsper elem
hash to addendgf2_122-lambda/try-and-increment to (x, λ)gf2_122-lambdaper-element1.18 µs1.17 µs .. 1.18 µsper elem
hash to addendgf2_122-lambda/try-and-increment to (x, λ), batchedgf2_122-lambdabatch361 ns349 ns .. 376 nsper elem
hash to addendgf2_127-lambda/try-and-increment to (x, λ)gf2_127-lambdaper-element870 ns869 ns .. 872 nsper elem
hash to addendgf2_127-lambda/try-and-increment to (x, λ), batchedgf2_127-lambdabatch179 ns179 ns .. 180 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-element3.28 µs3.27 µs .. 3.28 µsper elem
one map to addendgf2_109-lambda/pornin map x1 to (x, λ), batchedgf2_109-lambdabatch521 ns520 ns .. 522 nsper elem
one map to addendgf2_109-u/pornin map x1 to (u, v)gf2_109-uper-element3.34 µs3.33 µs .. 3.34 µsper elem
one map to addendgf2_109-u/pornin map x1 to (u, v), batchedgf2_109-ubatch593 ns591 ns .. 594 nsper elem
one map to addendgf2_109-w/pornin map x1 to (x, λ)gf2_109-wper-element3.27 µs3.27 µs .. 3.28 µsper elem
one map to addendgf2_109-w/pornin map x1 to (x, λ), batchedgf2_109-wbatch522 ns522 ns .. 523 nsper elem
one map to addendgf2_122-gls-lambda/pornin map x1 to (x, λ)gf2_122-gls-lambdaper-element788 ns787 ns .. 790 nsper elem
one map to addendgf2_122-gls-lambda/pornin map x1 to (x, λ), batchedgf2_122-gls-lambdabatch404 ns382 ns .. 425 nsper elem
one map to addendgf2_122-gls-u/pornin map x1 to (u, v)gf2_122-gls-uper-element843 ns841 ns .. 844 nsper elem
one map to addendgf2_122-gls-u/pornin map x1 to (u, v), batchedgf2_122-gls-ubatch593 ns585 ns .. 599 nsper elem
one map to addendgf2_122-gls-w/pornin map x1 to (x, λ)gf2_122-gls-wper-element791 ns790 ns .. 793 nsper elem
one map to addendgf2_122-gls-w/pornin map x1 to (x, λ), batchedgf2_122-gls-wbatch404 ns383 ns .. 424 nsper elem
one map to addendgf2_122-lambda/pornin map x1 to (x, λ)gf2_122-lambdaper-element801 ns799 ns .. 803 nsper elem
one map to addendgf2_122-lambda/pornin map x1 to (x, λ), batchedgf2_122-lambdabatch428 ns402 ns .. 452 nsper elem
one map to addendgf2_122-u/pornin map x1 to (u, v)gf2_122-uper-element857 ns855 ns .. 858 nsper elem
one map to addendgf2_122-u/pornin map x1 to (u, v), batchedgf2_122-ubatch622 ns603 ns .. 638 nsper elem
one map to addendgf2_122-w/pornin map x1 to (x, λ)gf2_122-wper-element799 ns797 ns .. 800 nsper elem
one map to addendgf2_122-w/pornin map x1 to (x, λ), batchedgf2_122-wbatch429 ns403 ns .. 454 nsper elem
one map to addendgf2_127-lambda/pornin map x1 to (x, λ)gf2_127-lambdaper-element567 ns566 ns .. 568 nsper elem
one map to addendgf2_127-lambda/pornin map x1 to (x, λ), batchedgf2_127-lambdabatch184 ns184 ns .. 184 nsper elem
one map to addendgf2_127-u/pornin map x1 to (u, v)gf2_127-uper-element598 ns597 ns .. 599 nsper elem
one map to addendgf2_127-u/pornin map x1 to (u, v), batchedgf2_127-ubatch213 ns212 ns .. 213 nsper elem
one map to addendgf2_127-w/pornin map x1 to (x, λ)gf2_127-wper-element569 ns568 ns .. 569 nsper elem
one map to addendgf2_127-w/pornin map x1 to (x, λ), batchedgf2_127-wbatch184 ns184 ns .. 185 nsper elem
one mapgf2_109/pornin map x1gf2_109per-element3.39 µs3.39 µs .. 3.40 µsper elem
one mapgf2_109/pornin map x1, batchedgf2_109batch636 ns635 ns .. 637 nsper elem
one mapgf2_122/pornin map x1gf2_122per-element897 ns894 ns .. 899 nsper elem
one mapgf2_122/pornin map x1, batchedgf2_122batch510 ns488 ns .. 539 nsper elem
one mapgf2_122-gls/pornin map x1gf2_122-glsper-element865 ns864 ns .. 867 nsper elem
one mapgf2_122-gls/pornin map x1, batchedgf2_122-glsbatch410 ns409 ns .. 410 nsper elem
one mapgf2_127/pornin map x1gf2_127per-element619 ns617 ns .. 620 nsper elem
one mapgf2_127/pornin map x1, batchedgf2_127batch232 ns231 ns .. 232 nsper elem
one mapedwards127/elligator2 x1edwards127per-element1.32 µs1.32 µs .. 1.32 µsper elem
one mapweier127/sswu x1weier127per-element1.12 µs1.12 µs .. 1.13 µsper elem
two maps summedgf2_127/pornin map x2gf2_127per-element1.35 µs1.35 µs .. 1.36 µ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.

306 benchmarks
operationbenchmarkfamilymodetime95% CIunit
encode (hash + cells)xor-sha256.64/m=12150,n=3500xorper-element195 ns195 ns .. 196 nsper elem
encode (hash + cells)xor-sha256.64/m=1350,n=3500xorper-element163 ns163 ns .. 164 nsper elem
encode (hash + cells)xor-sha256.64/m=150,n=3500xorper-element138 ns138 ns .. 138 nsper elem
encode (hash + cells)xor-sha256.64/m=20,n=3500xorper-element114 ns114 ns .. 115 nsper elem
encode (hash + cells)xor-sha256.64/m=5,n=3500xorper-element96.2 ns95.9 ns .. 96.4 nsper elem
encode (hash + cells)xor-siphash.64/m=12150,n=3500xor-siphashper-element185 ns184 ns .. 185 nsper elem
encode (hash + cells)xor-siphash.64/m=12150,n=3500,map=mcg64xor-siphashper-element181 ns180 ns .. 181 nsper elem
encode (hash + cells)xor-siphash.64/m=1350,n=3500xor-siphashper-element153 ns153 ns .. 154 nsper elem
encode (hash + cells)xor-siphash.64/m=1350,n=3500,map=mcg64xor-siphashper-element149 ns149 ns .. 150 nsper elem
encode (hash + cells)xor-siphash.64/m=150,n=3500xor-siphashper-element127 ns127 ns .. 128 nsper elem
encode (hash + cells)xor-siphash.64/m=150,n=3500,map=mcg64xor-siphashper-element123 ns123 ns .. 123 nsper elem
encode (hash + cells)xor-siphash.64/m=20,n=3500xor-siphashper-element103 ns103 ns .. 104 nsper elem
encode (hash + cells)xor-siphash.64/m=20,n=3500,map=mcg64xor-siphashper-element98.6 ns98.3 ns .. 98.9 nsper elem
encode (hash + cells)xor-siphash.64/m=5,n=3500xor-siphashper-element85.3 ns85.1 ns .. 85.5 nsper elem
encode (hash + cells)xor-siphash.64/m=5,n=3500,map=mcg64xor-siphashper-element81.5 ns81.3 ns .. 81.7 nsper elem
encode (hash + cells)binary.109/m=1350,n=3500,h2c=tigf2_109per-element6.06 µs6.05 µs .. 6.07 µsper elem
encode (hash + cells)binary-lambda.109/m=1350,n=3500,h2c=ti-addendgf2_109-lambdaper-element4.93 µs4.92 µs .. 4.94 µsper elem
encode (hash + cells)binary-u.109/m=1350,n=3500,h2c=pornin-addendgf2_109-uper-element4.53 µs4.52 µs .. 4.54 µsper elem
encode (hash + cells)binary-w.109/m=1350,n=3500,h2c=tigf2_109-wper-element4.95 µs4.94 µs .. 4.96 µsper elem
encode (hash + cells)binary.122/m=1350,n=3500,h2c=tigf2_122per-element4.12 µs4.11 µs .. 4.12 µsper elem
encode (hash + cells)binary.122-gls/m=1350,n=3500,h2c=tigf2_122-glsper-element3.76 µs3.75 µs .. 3.76 µsper elem
encode (hash + cells)binary-lambda.122-gls/m=1350,n=3500,h2c=ti-addendgf2_122-gls-lambdaper-element3.23 µs3.22 µs .. 3.24 µsper elem
encode (hash + cells)binary-u.122-gls/m=1350,n=3500,h2c=tigf2_122-gls-uper-element2.90 µs2.90 µs .. 2.91 µsper elem
encode (hash + cells)binary-w.122-gls/m=1350,n=3500,h2c=tigf2_122-gls-wper-element3.23 µs3.23 µs .. 3.24 µsper elem
encode (hash + cells)binary-lambda.122/m=1350,n=3500,h2c=ti-addendgf2_122-lambdaper-element3.29 µs3.28 µs .. 3.29 µsper elem
encode (hash + cells)binary-u.122/m=1350,n=3500,h2c=tigf2_122-uper-element2.94 µs2.93 µs .. 2.95 µsper elem
encode (hash + cells)binary-w.122/m=1350,n=3500,h2c=tigf2_122-wper-element3.27 µs3.26 µs .. 3.27 µsper elem
encode (hash + cells)binary.127/m=12150,n=3500,h2c=ti,map=mcg64gf2_127per-element3.19 µs3.19 µs .. 3.19 µsper elem
encode (hash + cells)binary.127/m=1350,n=3500,h2c=tigf2_127per-element2.43 µs2.43 µs .. 2.44 µsper elem
encode (hash + cells)binary.127/m=1350,n=3500,h2c=ti,map=mcg64gf2_127per-element2.46 µs2.45 µs .. 2.46 µsper elem
encode (hash + cells)binary.127/m=150,n=3500,h2c=ti,map=mcg64gf2_127per-element1.75 µs1.75 µs .. 1.75 µsper elem
encode (hash + cells)binary.127/m=20,n=3500,h2c=ti,map=mcg64gf2_127per-element1.13 µs1.12 µs .. 1.13 µsper elem
encode (hash + cells)binary.127/m=5,n=3500,h2c=ti,map=mcg64gf2_127per-element738 ns737 ns .. 740 nsper elem
encode (hash + cells)binary-lambda.127/m=12150,n=3500,h2c=ti-addendgf2_127-lambdaper-element2.40 µs2.40 µs .. 2.41 µsper elem
encode (hash + cells)binary-lambda.127/m=12150,n=3500,h2c=ti-addend,proj=fp127,mapproj=fp127gf2_127-lambdaper-element2.29 µs2.28 µs .. 2.30 µsper elem
encode (hash + cells)binary-lambda.127/m=1350,n=3500,h2c=ti-addendgf2_127-lambdaper-element2.04 µs2.03 µs .. 2.04 µsper elem
encode (hash + cells)binary-lambda.127/m=1350,n=3500,h2c=ti-addend,proj=fp127,mapproj=fp127gf2_127-lambdaper-element1.98 µs1.97 µs .. 1.99 µsper elem
encode (hash + cells)binary-lambda.127/m=5,n=3500,h2c=ti-addendgf2_127-lambdaper-element629 ns627 ns .. 630 nsper elem
encode (hash + cells)binary-lambda.127/m=5,n=3500,h2c=ti-addend,proj=fp127,mapproj=fp127gf2_127-lambdaper-element571 ns569 ns .. 572 nsper elem
encode (hash + cells)binary-u.127/m=12150,n=3500,h2c=pornin-addendgf2_127-uper-element2.47 µs2.46 µs .. 2.47 µsper elem
encode (hash + cells)binary-u.127/m=12150,n=3500,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-uper-element2.45 µs2.45 µs .. 2.45 µsper elem
encode (hash + cells)binary-u.127/m=1350,n=3500,h2c=pornin-addendgf2_127-uper-element1.90 µs1.89 µs .. 1.91 µsper elem
encode (hash + cells)binary-u.127/m=1350,n=3500,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-uper-element1.89 µs1.88 µs .. 1.89 µsper elem
encode (hash + cells)binary-u.127/m=5,n=3500,h2c=pornin-addendgf2_127-uper-element615 ns614 ns .. 617 nsper elem
encode (hash + cells)binary-u.127/m=5,n=3500,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-uper-element568 ns567 ns .. 569 nsper elem
encode (hash + cells)binary-w.127/m=12150,n=3500,h2c=pornin-addendgf2_127-wper-element2.40 µs2.40 µs .. 2.41 µsper elem
encode (hash + cells)binary-w.127/m=12150,n=3500,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-wper-element2.37 µs2.36 µs .. 2.37 µsper elem
encode (hash + cells)binary-w.127/m=1350,n=3500,h2c=pornin-addendgf2_127-wper-element2.04 µs2.04 µs .. 2.05 µsper elem
encode (hash + cells)binary-w.127/m=1350,n=3500,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-wper-element2.01 µs2.01 µs .. 2.02 µsper elem
encode (hash + cells)binary-w.127/m=5,n=3500,h2c=pornin-addendgf2_127-wper-element632 ns631 ns .. 634 nsper elem
encode (hash + cells)binary-w.127/m=5,n=3500,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-wper-element584 ns583 ns .. 585 nsper elem
encode (hash + cells)edwards.127/m=12150,n=3500,h2c=tiedwards127per-element1.53 µs1.53 µs .. 1.53 µsper elem
encode (hash + cells)edwards.127/m=12150,n=3500,h2c=ti,proj=fp130,mapproj=fp127edwards127per-element1.47 µs1.47 µs .. 1.47 µsper elem
encode (hash + cells)edwards.127/m=1350,n=3500,h2c=tiedwards127per-element1.42 µs1.41 µs .. 1.42 µsper elem
encode (hash + cells)edwards.127/m=1350,n=3500,h2c=ti,proj=fp130,mapproj=fp127edwards127per-element1.35 µs1.35 µs .. 1.36 µsper elem
encode (hash + cells)edwards.127/m=150,n=3500,h2c=tiedwards127per-element1.32 µs1.31 µs .. 1.32 µsper elem
encode (hash + cells)edwards.127/m=20,n=3500,h2c=tiedwards127per-element1.24 µs1.24 µs .. 1.24 µsper elem
encode (hash + cells)edwards.127/m=5,n=3500,h2c=tiedwards127per-element1.18 µs1.18 µs .. 1.19 µsper elem
encode (hash + cells)edwards.127/m=5,n=3500,h2c=ti,proj=fp130,mapproj=fp127edwards127per-element1.10 µs1.10 µs .. 1.10 µsper elem
encode (hash + cells)weier.127/m=12150,n=3500,h2c=tiweier127per-element1.90 µs1.90 µs .. 1.91 µsper elem
encode (hash + cells)weier.127/m=12150,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127per-element1.84 µs1.83 µs .. 1.84 µsper elem
encode (hash + cells)weier.127/m=1350,n=3500,h2c=tiweier127per-element1.68 µs1.68 µs .. 1.69 µsper elem
encode (hash + cells)weier.127/m=1350,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127per-element1.61 µs1.61 µs .. 1.62 µsper elem
encode (hash + cells)weier.127/m=5,n=3500,h2c=tiweier127per-element1.20 µs1.20 µs .. 1.21 µsper elem
encode (hash + cells)weier.127/m=5,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127per-element1.12 µs1.12 µs .. 1.13 µsper elem
encode (hash + cells)weier-jacobian.127/m=12150,n=3500,h2c=tiweier127-jacobianper-element1.68 µs1.68 µs .. 1.69 µsper elem
encode (hash + cells)weier-jacobian.127/m=12150,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianper-element1.58 µs1.57 µs .. 1.58 µsper elem
encode (hash + cells)weier-jacobian.127/m=1350,n=3500,h2c=tiweier127-jacobianper-element1.56 µs1.56 µs .. 1.57 µsper elem
encode (hash + cells)weier-jacobian.127/m=1350,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianper-element1.49 µs1.49 µs .. 1.49 µsper elem
encode (hash + cells)weier-jacobian.127/m=150,n=3500,h2c=tiweier127-jacobianper-element1.40 µs1.40 µs .. 1.41 µsper elem
encode (hash + cells)weier-jacobian.127/m=20,n=3500,h2c=tiweier127-jacobianper-element1.26 µs1.26 µs .. 1.27 µsper elem
encode (hash + cells)weier-jacobian.127/m=5,n=3500,h2c=tiweier127-jacobianper-element1.17 µs1.17 µs .. 1.18 µsper elem
encode (hash + cells)weier-jacobian.127/m=5,n=3500,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianper-element1.09 µs1.09 µs .. 1.10 µsper elem
cell updatesxor-sha256.64/m=1350,n=3500xorper-element139 ns139 ns .. 139 nsper elem
cell updatesxor-siphash.64/m=1350,n=3500xor-siphashper-element139 ns139 ns .. 139 nsper elem
cell updatesbinary.109/m=1350,n=3500gf2_109per-element5.46 µs5.45 µs .. 5.47 µsper elem
cell updatesbinary-lambda.109/m=1350,n=3500gf2_109-lambdaper-element4.45 µs4.45 µs .. 4.46 µsper elem
cell updatesbinary-u.109/m=1350,n=3500gf2_109-uper-element3.95 µs3.94 µs .. 3.96 µsper elem
cell updatesbinary-w.109/m=1350,n=3500gf2_109-wper-element4.43 µs4.43 µs .. 4.44 µsper elem
cell updatesbinary.122/m=1350,n=3500gf2_122per-element3.68 µs3.67 µs .. 3.69 µsper elem
cell updatesbinary.122-gls/m=1350,n=3500gf2_122-glsper-element3.39 µs3.38 µs .. 3.40 µsper elem
cell updatesbinary-lambda.122-gls/m=1350,n=3500gf2_122-gls-lambdaper-element2.94 µs2.93 µs .. 2.94 µsper elem
cell updatesbinary-u.122-gls/m=1350,n=3500gf2_122-gls-uper-element2.55 µs2.54 µs .. 2.55 µsper elem
cell updatesbinary-w.122-gls/m=1350,n=3500gf2_122-gls-wper-element2.92 µs2.92 µs .. 2.93 µsper elem
cell updatesbinary-lambda.122/m=1350,n=3500gf2_122-lambdaper-element2.93 µs2.93 µs .. 2.94 µsper elem
cell updatesbinary-u.122/m=1350,n=3500gf2_122-uper-element2.55 µs2.54 µs .. 2.56 µsper elem
cell updatesbinary-w.122/m=1350,n=3500gf2_122-wper-element2.93 µs2.92 µs .. 2.94 µsper elem
cell updatesbinary.127/m=1350,n=3500gf2_127per-element2.20 µs2.20 µs .. 2.21 µsper elem
cell updatesbinary-lambda.127/m=12150,n=3500gf2_127-lambdaper-element2.21 µs2.21 µs .. 2.22 µsper elem
cell updatesbinary-lambda.127/m=1350,n=3500gf2_127-lambdaper-element1.86 µs1.86 µs .. 1.86 µsper elem
cell updatesbinary-lambda.127/m=5,n=3500gf2_127-lambdaper-element446 ns445 ns .. 447 nsper elem
cell updatesbinary-u.127/m=12150,n=3500gf2_127-uper-element2.25 µs2.24 µs .. 2.25 µsper elem
cell updatesbinary-u.127/m=1350,n=3500gf2_127-uper-element1.70 µs1.70 µs .. 1.70 µsper elem
cell updatesbinary-u.127/m=5,n=3500gf2_127-uper-element404 ns403 ns .. 405 nsper elem
cell updatesbinary-w.127/m=12150,n=3500gf2_127-wper-element2.21 µs2.21 µs .. 2.21 µsper elem
cell updatesbinary-w.127/m=1350,n=3500gf2_127-wper-element1.86 µs1.86 µs .. 1.86 µsper elem
cell updatesbinary-w.127/m=5,n=3500gf2_127-wper-element447 ns446 ns .. 448 nsper elem
cell updatesedwards.127/m=12150,n=3500edwards127per-element459 ns458 ns .. 461 nsper elem
cell updatesedwards.127/m=1350,n=3500edwards127per-element341 ns340 ns .. 341 nsper elem
cell updatesedwards.127/m=150,n=3500edwards127per-element243 ns242 ns .. 243 nsper elem
cell updatesedwards.127/m=20,n=3500edwards127per-element162 ns162 ns .. 163 nsper elem
cell updatesedwards.127/m=5,n=3500edwards127per-element111 ns111 ns .. 112 nsper elem
cell updatesweier.127/m=12150,n=3500weier127per-element875 ns873 ns .. 877 nsper elem
cell updatesweier.127/m=1350,n=3500weier127per-element633 ns632 ns .. 635 nsper elem
cell updatesweier.127/m=5,n=3500weier127per-element172 ns171 ns .. 172 nsper elem
cell updatesweier-jacobian.127/m=12150,n=3500weier127-jacobianper-element658 ns657 ns .. 660 nsper elem
cell updatesweier-jacobian.127/m=1350,n=3500weier127-jacobianper-element534 ns533 ns .. 535 nsper elem
cell updatesweier-jacobian.127/m=150,n=3500weier127-jacobianper-element377 ns376 ns .. 379 nsper elem
cell updatesweier-jacobian.127/m=20,n=3500weier127-jacobianper-element234 ns233 ns .. 235 nsper elem
cell updatesweier-jacobian.127/m=5,n=3500weier127-jacobianper-element147 ns146 ns .. 147 nsper elem
peel, per differencexor-sha256.64/d=1350,m=2700,prefilter=true,batch=truexorbatch670 ns664 ns .. 677 nsper elem
peel, per differencexor-siphash.64/d=1350,m=2700,prefilter=true,batch=truexor-siphashbatch662 ns657 ns .. 667 nsper elem
peel, per differencebinary.109/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_109batch7.58 µs7.54 µs .. 7.61 µsper elem
peel, per differencebinary-lambda.109/d=1350,m=2700,prefilter=true,batch=true,h2c=ti-addendgf2_109-lambdabatch5.97 µs5.95 µs .. 6.00 µsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch5.67 µs5.65 µs .. 5.68 µsper elem
peel, per differencebinary-w.109/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_109-wbatch5.91 µs5.89 µs .. 5.93 µsper elem
peel, per differencebinary.122/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122batch5.22 µs5.21 µs .. 5.23 µsper elem
peel, per differencebinary.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122-glsbatch4.83 µs4.81 µs .. 4.86 µsper elem
peel, per differencebinary-lambda.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=ti-addendgf2_122-gls-lambdabatch3.99 µs3.98 µs .. 4.00 µsper elem
peel, per differencebinary-u.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122-gls-ubatch3.86 µs3.85 µs .. 3.87 µsper elem
peel, per differencebinary-w.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122-gls-wbatch3.99 µs3.98 µs .. 4.00 µsper elem
peel, per differencebinary-lambda.122/d=1350,m=2700,prefilter=true,batch=true,h2c=ti-addendgf2_122-lambdabatch4.02 µs4.01 µs .. 4.03 µsper elem
peel, per differencebinary-u.122/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122-ubatch3.81 µs3.79 µs .. 3.82 µsper elem
peel, per differencebinary-w.122/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_122-wbatch4.00 µs4.00 µs .. 4.01 µsper elem
peel, per differencebinary.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tigf2_127batch3.25 µs3.24 µs .. 3.26 µsper elem
peel, per differencebinary-lambda.127/d=10000,m=20000,prefilter=true,batch=true,h2c=ti-addendgf2_127-lambdabatch3.51 µs3.50 µs .. 3.51 µsper elem
peel, per differencebinary-lambda.127/d=10000,m=20000,prefilter=true,batch=true,h2c=ti-addend,proj=fp127,mapproj=fp127gf2_127-lambdabatch3.34 µs3.34 µs .. 3.35 µsper elem
peel, per differencebinary-lambda.127/d=1350,m=2700,prefilter=true,batch=true,h2c=ti-addendgf2_127-lambdabatch2.73 µs2.72 µs .. 2.73 µsper elem
peel, per differencebinary-lambda.127/d=1350,m=2700,prefilter=true,batch=true,h2c=ti-addend,proj=fp127,mapproj=fp127gf2_127-lambdabatch2.51 µs2.51 µs .. 2.52 µsper elem
peel, per differencebinary-lambda.127/d=4,m=8,prefilter=true,batch=true,h2c=ti-addendgf2_127-lambdabatch1.27 µs1.26 µs .. 1.27 µsper elem
peel, per differencebinary-lambda.127/d=4,m=8,prefilter=true,batch=true,h2c=ti-addend,proj=fp127,mapproj=fp127gf2_127-lambdabatch1.06 µs1.06 µs .. 1.06 µsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch3.38 µs3.37 µs .. 3.38 µsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-ubatch3.28 µs3.27 µs .. 3.28 µsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch2.67 µs2.66 µs .. 2.67 µsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-ubatch2.49 µs2.48 µs .. 2.49 µsper elem
peel, per differencebinary-u.127/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch1.16 µs1.15 µs .. 1.16 µsper elem
peel, per differencebinary-u.127/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-ubatch1.06 µs1.06 µs .. 1.07 µsper elem
peel, per differencebinary-w.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch3.50 µs3.49 µs .. 3.50 µsper elem
peel, per differencebinary-w.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-wbatch3.35 µs3.34 µs .. 3.35 µsper elem
peel, per differencebinary-w.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch2.70 µs2.70 µs .. 2.71 µsper elem
peel, per differencebinary-w.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-wbatch2.44 µs2.44 µs .. 2.45 µsper elem
peel, per differencebinary-w.127/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch980 ns977 ns .. 983 nsper elem
peel, per differencebinary-w.127/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addend,proj=fp127,mapproj=fp127gf2_127-wbatch894 ns892 ns .. 896 nsper elem
peel, per differenceedwards.127/d=10000,m=20000,prefilter=false,batch=false,h2c=tiedwards127per-element3.73 µs3.72 µs .. 3.74 µsper elem
peel, per differenceedwards.127/d=10000,m=20000,prefilter=false,batch=true,h2c=tiedwards127batch2.77 µs2.77 µs .. 2.78 µsper elem
peel, per differenceedwards.127/d=10000,m=20000,prefilter=true,batch=false,h2c=tiedwards127per-element2.80 µs2.79 µs .. 2.80 µsper elem
peel, per differenceedwards.127/d=10000,m=20000,prefilter=true,batch=true,h2c=tiedwards127batch2.26 µs2.25 µs .. 2.26 µsper elem
peel, per differenceedwards.127/d=10000,m=20000,prefilter=true,batch=true,h2c=ti,proj=fp130,mapproj=fp127edwards127batch2.15 µs2.14 µs .. 2.15 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=false,batch=false,h2c=tiedwards127per-element3.48 µs3.47 µs .. 3.49 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=false,batch=true,h2c=tiedwards127batch2.53 µs2.52 µs .. 2.53 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=true,batch=false,h2c=tiedwards127per-element2.51 µs2.50 µs .. 2.52 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiedwards127batch1.96 µs1.95 µs .. 1.96 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=true,batch=true,h2c=ti,proj=fp130,mapproj=fp127edwards127batch1.78 µs1.78 µs .. 1.78 µsper elem
peel, per differenceedwards.127/d=150,m=300,prefilter=false,batch=false,h2c=tiedwards127per-element3.55 µs3.54 µs .. 3.56 µsper elem
peel, per differenceedwards.127/d=150,m=300,prefilter=false,batch=true,h2c=tiedwards127batch2.60 µs2.60 µs .. 2.61 µsper elem
peel, per differenceedwards.127/d=150,m=300,prefilter=true,batch=false,h2c=tiedwards127per-element2.38 µs2.38 µs .. 2.39 µsper elem
peel, per differenceedwards.127/d=150,m=300,prefilter=true,batch=true,h2c=tiedwards127batch1.84 µs1.84 µs .. 1.85 µsper elem
peel, per differenceedwards.127/d=20,m=40,prefilter=false,batch=false,h2c=tiedwards127per-element2.73 µs2.72 µs .. 2.73 µsper elem
peel, per differenceedwards.127/d=20,m=40,prefilter=false,batch=true,h2c=tiedwards127batch2.00 µs2.00 µs .. 2.01 µsper elem
peel, per differenceedwards.127/d=20,m=40,prefilter=true,batch=false,h2c=tiedwards127per-element2.13 µs2.13 µs .. 2.14 µsper elem
peel, per differenceedwards.127/d=20,m=40,prefilter=true,batch=true,h2c=tiedwards127batch1.68 µs1.67 µs .. 1.68 µsper elem
peel, per differenceedwards.127/d=4,m=8,prefilter=false,batch=false,h2c=tiedwards127per-element1.74 µs1.73 µs .. 1.75 µsper elem
peel, per differenceedwards.127/d=4,m=8,prefilter=false,batch=true,h2c=tiedwards127batch1.48 µs1.47 µs .. 1.48 µsper elem
peel, per differenceedwards.127/d=4,m=8,prefilter=true,batch=false,h2c=tiedwards127per-element1.79 µs1.78 µs .. 1.79 µsper elem
peel, per differenceedwards.127/d=4,m=8,prefilter=true,batch=true,h2c=tiedwards127batch1.52 µs1.52 µs .. 1.53 µsper elem
peel, per differenceedwards.127/d=4,m=8,prefilter=true,batch=true,h2c=ti,proj=fp130,mapproj=fp127edwards127batch2.32 µs2.32 µs .. 2.33 µsper elem
peel, per differenceweier.127/d=10000,m=20000,prefilter=true,batch=true,h2c=tiweier127batch2.64 µs2.63 µs .. 2.65 µsper elem
peel, per differenceweier.127/d=10000,m=20000,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127batch2.57 µs2.56 µs .. 2.57 µsper elem
peel, per differenceweier.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier127batch2.24 µs2.24 µs .. 2.25 µsper elem
peel, per differenceweier.127/d=1350,m=2700,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127batch2.11 µs2.10 µs .. 2.11 µsper elem
peel, per differenceweier.127/d=4,m=8,prefilter=true,batch=true,h2c=tiweier127batch1.03 µs1.03 µs .. 1.04 µsper elem
peel, per differenceweier.127/d=4,m=8,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127batch1.07 µs1.07 µs .. 1.08 µsper elem
peel, per differenceweier-jacobian.127/d=10000,m=20000,prefilter=false,batch=false,h2c=tiweier127-jacobianper-element3.05 µs3.04 µs .. 3.05 µsper elem
peel, per differenceweier-jacobian.127/d=10000,m=20000,prefilter=false,batch=true,h2c=tiweier127-jacobianbatch3.04 µs3.03 µs .. 3.05 µsper elem
peel, per differenceweier-jacobian.127/d=10000,m=20000,prefilter=true,batch=false,h2c=tiweier127-jacobianper-element2.52 µs2.52 µs .. 2.53 µsper elem
peel, per differenceweier-jacobian.127/d=10000,m=20000,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch2.48 µs2.47 µs .. 2.49 µsper elem
peel, per differenceweier-jacobian.127/d=10000,m=20000,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianbatch2.33 µs2.32 µs .. 2.34 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=false,batch=false,h2c=tiweier127-jacobianper-element2.70 µs2.69 µs .. 2.70 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=false,batch=true,h2c=tiweier127-jacobianbatch2.68 µs2.68 µs .. 2.69 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=true,batch=false,h2c=tiweier127-jacobianper-element2.11 µs2.10 µs .. 2.11 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch2.11 µs2.11 µs .. 2.12 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianbatch1.96 µs1.95 µs .. 1.96 µsper elem
peel, per differenceweier-jacobian.127/d=150,m=300,prefilter=false,batch=false,h2c=tiweier127-jacobianper-element2.63 µs2.62 µs .. 2.64 µsper elem
peel, per differenceweier-jacobian.127/d=150,m=300,prefilter=false,batch=true,h2c=tiweier127-jacobianbatch2.58 µs2.58 µs .. 2.59 µsper elem
peel, per differenceweier-jacobian.127/d=150,m=300,prefilter=true,batch=false,h2c=tiweier127-jacobianper-element1.92 µs1.91 µs .. 1.92 µsper elem
peel, per differenceweier-jacobian.127/d=150,m=300,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch1.89 µs1.89 µs .. 1.90 µsper elem
peel, per differenceweier-jacobian.127/d=20,m=40,prefilter=false,batch=false,h2c=tiweier127-jacobianper-element2.15 µs2.14 µs .. 2.15 µsper elem
peel, per differenceweier-jacobian.127/d=20,m=40,prefilter=false,batch=true,h2c=tiweier127-jacobianbatch2.15 µs2.15 µs .. 2.16 µsper elem
peel, per differenceweier-jacobian.127/d=20,m=40,prefilter=true,batch=false,h2c=tiweier127-jacobianper-element1.59 µs1.58 µs .. 1.59 µsper elem
peel, per differenceweier-jacobian.127/d=20,m=40,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch1.59 µs1.58 µs .. 1.60 µsper elem
peel, per differenceweier-jacobian.127/d=4,m=8,prefilter=false,batch=false,h2c=tiweier127-jacobianper-element937 ns933 ns .. 941 nsper elem
peel, per differenceweier-jacobian.127/d=4,m=8,prefilter=false,batch=true,h2c=tiweier127-jacobianbatch932 ns929 ns .. 935 nsper elem
peel, per differenceweier-jacobian.127/d=4,m=8,prefilter=true,batch=false,h2c=tiweier127-jacobianper-element967 ns964 ns .. 970 nsper elem
peel, per differenceweier-jacobian.127/d=4,m=8,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch981 ns977 ns .. 984 nsper elem
peel, per differenceweier-jacobian.127/d=4,m=8,prefilter=true,batch=true,h2c=ti,proj=fp127,mapproj=fp127weier127-jacobianbatch1.01 µs1.00 µs .. 1.01 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=10xorper-element652 ns649 ns .. 654 nsper elem
rateless encode and decode, per differencexor-sha256.64/d=100xorper-element1.41 µs1.40 µs .. 1.41 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=1000xorper-element2.53 µs2.52 µs .. 2.53 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=10000xorper-element4.14 µs4.12 µs .. 4.16 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=100000xorper-element6.90 µs6.89 µs .. 6.92 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=20xorper-element842 ns840 ns .. 844 nsper elem
rateless encode and decode, per differencexor-sha256.64/d=40xorper-element1.05 µs1.05 µs .. 1.06 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=50000xorper-element5.65 µs5.63 µs .. 5.67 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10xor-siphashper-element593 ns592 ns .. 594 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=10,map=mcg64xor-siphashper-element579 ns578 ns .. 580 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=100xor-siphashper-element1.33 µs1.33 µs .. 1.34 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100,map=mcg64xor-siphashper-element1.31 µs1.31 µs .. 1.31 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=1000xor-siphashper-element2.45 µs2.44 µs .. 2.46 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=1000,map=mcg64xor-siphashper-element2.43 µs2.42 µs .. 2.43 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000xor-siphashper-element4.06 µs4.05 µs .. 4.07 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000,map=chacha8xor-siphashper-element4.65 µs4.64 µs .. 4.67 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000,map=mcg64xor-siphashper-element4.02 µs4.01 µs .. 4.04 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000xor-siphashper-element6.81 µs6.80 µs .. 6.83 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000,map=chacha8xor-siphashper-element10.1 µs10.1 µs .. 10.1 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000,map=mcg64xor-siphashper-element6.33 µs6.31 µs .. 6.36 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=20xor-siphashper-element776 ns773 ns .. 778 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=20,map=mcg64xor-siphashper-element758 ns757 ns .. 760 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=40xor-siphashper-element987 ns985 ns .. 988 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=40,map=mcg64xor-siphashper-element960 ns957 ns .. 963 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=50000xor-siphashper-element5.58 µs5.55 µs .. 5.60 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=50000,map=mcg64xor-siphashper-element5.46 µs5.44 µs .. 5.48 µsper elem
rateless encode and decode, per differencebinary.109/d=1000,h2c=tigf2_109per-element44.3 µs44.2 µs .. 44.4 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=1000,h2c=ti-addendgf2_109-lambdaper-element39.1 µs39.0 µs .. 39.3 µsper elem
rateless encode and decode, per differencebinary-u.109/d=1000,h2c=pornin-addendgf2_109-uper-element29.4 µs29.3 µs .. 29.4 µsper elem
rateless encode and decode, per differencebinary-w.109/d=1000,h2c=tigf2_109-wper-element39.4 µs39.3 µs .. 39.5 µsper elem
rateless encode and decode, per differencebinary.122/d=1000,h2c=tigf2_122per-element21.5 µs21.4 µs .. 21.6 µsper elem
rateless encode and decode, per differencebinary.122-gls/d=1000,h2c=tigf2_122-glsper-element19.8 µs19.6 µs .. 20.1 µsper elem
rateless encode and decode, per differencebinary-lambda.122-gls/d=1000,h2c=ti-addendgf2_122-gls-lambdaper-element17.3 µs17.2 µs .. 17.3 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=1000,h2c=tigf2_122-gls-uper-element17.1 µs16.8 µs .. 17.4 µsper elem
rateless encode and decode, per differencebinary-w.122-gls/d=1000,h2c=tigf2_122-gls-wper-element17.6 µs17.5 µs .. 17.7 µsper elem
rateless encode and decode, per differencebinary-lambda.122/d=1000,h2c=ti-addendgf2_122-lambdaper-element18.0 µs17.9 µs .. 18.0 µsper elem
rateless encode and decode, per differencebinary-u.122/d=1000,h2c=tigf2_122-uper-element17.0 µs16.9 µs .. 17.1 µsper elem
rateless encode and decode, per differencebinary-w.122/d=1000,h2c=tigf2_122-wper-element18.1 µs18.1 µs .. 18.2 µsper elem
rateless encode and decode, per differencebinary.127/d=10,h2c=ti,map=mcg64gf2_127per-element6.00 µs5.94 µs .. 6.06 µsper elem
rateless encode and decode, per differencebinary.127/d=100,h2c=ti,map=mcg64gf2_127per-element10.1 µs10.1 µs .. 10.2 µsper elem
rateless encode and decode, per differencebinary.127/d=1000,h2c=tigf2_127per-element14.5 µs14.5 µs .. 14.5 µsper elem
rateless encode and decode, per differencebinary.127/d=1000,h2c=ti,map=mcg64gf2_127per-element14.5 µs14.4 µs .. 14.5 µsper elem
rateless encode and decode, per differencebinary.127/d=10000,h2c=ti,map=chacha8gf2_127per-element20.0 µs20.0 µs .. 20.1 µsper elem
rateless encode and decode, per differencebinary.127/d=10000,h2c=ti,map=mcg64gf2_127per-element19.1 µs19.0 µs .. 19.2 µsper elem
rateless encode and decode, per differencebinary.127/d=100000,h2c=ti,map=chacha8gf2_127per-element32.2 µs32.2 µs .. 32.2 µsper elem
rateless encode and decode, per differencebinary.127/d=100000,h2c=ti,map=mcg64gf2_127per-element28.2 µs28.1 µs .. 28.2 µsper elem
rateless encode and decode, per differencebinary.127/d=20,h2c=ti,map=mcg64gf2_127per-element7.36 µs7.35 µs .. 7.38 µsper elem
rateless encode and decode, per differencebinary.127/d=40,h2c=ti,map=mcg64gf2_127per-element8.46 µs8.37 µs .. 8.53 µsper elem
rateless encode and decode, per differencebinary.127/d=50000,h2c=ti,map=mcg64gf2_127per-element24.2 µs24.2 µs .. 24.2 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=10,h2c=ti-addendgf2_127-lambdaper-element5.16 µs5.15 µs .. 5.18 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=1000,h2c=ti-addendgf2_127-lambdaper-element12.6 µs12.6 µs .. 12.6 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=100000,h2c=ti-addendgf2_127-lambdaper-element25.7 µs25.6 µs .. 25.7 µsper elem
rateless encode and decode, per differencebinary-u.127/d=10,h2c=pornin-addendgf2_127-uper-element4.53 µs4.52 µs .. 4.53 µsper elem
rateless encode and decode, per differencebinary-u.127/d=1000,h2c=pornin-addendgf2_127-uper-element11.2 µs11.1 µs .. 11.2 µsper elem
rateless encode and decode, per differencebinary-u.127/d=100000,h2c=pornin-addendgf2_127-uper-element23.8 µs23.7 µs .. 23.8 µsper elem
rateless encode and decode, per differencebinary-w.127/d=10,h2c=pornin-addendgf2_127-wper-element4.32 µs4.31 µs .. 4.33 µsper elem
rateless encode and decode, per differencebinary-w.127/d=1000,h2c=pornin-addendgf2_127-wper-element11.5 µs11.5 µs .. 11.5 µsper elem
rateless encode and decode, per differencebinary-w.127/d=100000,h2c=pornin-addendgf2_127-wper-element24.4 µs24.4 µs .. 24.5 µsper elem
rateless encode and decode, per differenceedwards.127/d=10,h2c=tiedwards127per-element4.99 µs4.97 µs .. 5.00 µsper elem
rateless encode and decode, per differenceedwards.127/d=100,h2c=tiedwards127per-element7.15 µs7.12 µs .. 7.18 µsper elem
rateless encode and decode, per differenceedwards.127/d=1000,h2c=tiedwards127per-element9.08 µs9.06 µs .. 9.10 µsper elem
rateless encode and decode, per differenceedwards.127/d=10000,h2c=tiedwards127per-element11.3 µs11.3 µs .. 11.4 µsper elem
rateless encode and decode, per differenceedwards.127/d=100000,h2c=tiedwards127per-element18.2 µs18.2 µs .. 18.3 µsper elem
rateless encode and decode, per differenceedwards.127/d=20,h2c=tiedwards127per-element5.71 µs5.69 µs .. 5.72 µsper elem
rateless encode and decode, per differenceedwards.127/d=40,h2c=tiedwards127per-element6.22 µs6.16 µs .. 6.28 µsper elem
rateless encode and decode, per differenceedwards.127/d=50000,h2c=tiedwards127per-element14.9 µs14.8 µs .. 15.0 µsper elem
rateless encode and decode, per differenceweier.127/d=10,h2c=tiweier127per-element4.03 µs4.02 µs .. 4.03 µsper elem
rateless encode and decode, per differenceweier.127/d=1000,h2c=tiweier127per-element8.46 µs8.41 µs .. 8.51 µsper elem
rateless encode and decode, per differenceweier.127/d=100000,h2c=tiweier127per-element18.1 µs18.1 µs .. 18.1 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=10,h2c=tiweier127-jacobianper-element3.77 µs3.76 µs .. 3.78 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=100,h2c=tiweier127-jacobianper-element5.82 µs5.80 µs .. 5.84 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=1000,h2c=tiweier127-jacobianper-element7.81 µs7.78 µs .. 7.85 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=10000,h2c=tiweier127-jacobianper-element10.3 µs10.2 µs .. 10.3 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=100000,h2c=tiweier127-jacobianper-element16.9 µs16.9 µs .. 16.9 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=20,h2c=tiweier127-jacobianper-element4.41 µs4.39 µs .. 4.42 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=40,h2c=tiweier127-jacobianper-element4.99 µs4.98 µs .. 5.01 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=50000,h2c=tiweier127-jacobianper-element13.4 µs13.3 µs .. 13.4 µsper elem
mapping, per indexchacha8/nextmappingper-element10.3 ns10.3 ns .. 10.3 nsper elem
mapping, per indexmcg64/nextmappingper-element5.67 ns5.65 ns .. 5.69 nsper elem
mapping, per indexsha256-ctr/nextmappingper-element8.52 ns8.50 ns .. 8.55 nsper elem
mapping, per indexxoshiro256pp/nextmappingper-element5.72 ns5.70 ns .. 5.73 nsper elem
mapping, per itemchacha8/item,m=12150mappingper-element279 ns279 ns .. 279 nsper elem
mapping, per itemchacha8/item,m=1350mappingper-element245 ns244 ns .. 245 nsper elem
mapping, per itemchacha8/item,m=150mappingper-element210 ns210 ns .. 210 nsper elem
mapping, per itemchacha8/item,m=20mappingper-element177 ns177 ns .. 178 nsper elem
mapping, per itemchacha8/item,m=5mappingper-element156 ns155 ns .. 156 nsper elem
mapping, per itemmcg64/item,m=12150mappingper-element42.4 ns42.3 ns .. 42.5 nsper elem
mapping, per itemmcg64/item,m=1350mappingper-element24.1 ns24.0 ns .. 24.2 nsper elem
mapping, per itemmcg64/item,m=150mappingper-element13.3 ns13.2 ns .. 13.4 nsper elem
mapping, per itemmcg64/item,m=20mappingper-element6.50 ns6.48 ns .. 6.52 nsper elem
mapping, per itemmcg64/item,m=5mappingper-element3.38 ns3.34 ns .. 3.43 nsper elem
mapping, per itemsha256-ctr/item,m=12150mappingper-element197 ns196 ns .. 197 nsper elem
mapping, per itemsha256-ctr/item,m=1350mappingper-element159 ns159 ns .. 160 nsper elem
mapping, per itemsha256-ctr/item,m=150mappingper-element119 ns118 ns .. 119 nsper elem
mapping, per itemsha256-ctr/item,m=20mappingper-element67.6 ns67.2 ns .. 68.0 nsper elem
mapping, per itemsha256-ctr/item,m=5mappingper-element35.1 ns35.0 ns .. 35.2 nsper elem
mapping, per itemxoshiro256pp/item,m=12150mappingper-element57.4 ns57.2 ns .. 57.7 nsper elem
mapping, per itemxoshiro256pp/item,m=1350mappingper-element36.4 ns36.3 ns .. 36.5 nsper elem
mapping, per itemxoshiro256pp/item,m=150mappingper-element21.8 ns21.7 ns .. 21.8 nsper elem
mapping, per itemxoshiro256pp/item,m=20mappingper-element11.1 ns11.1 ns .. 11.1 nsper elem
mapping, per itemxoshiro256pp/item,m=5mappingper-element5.32 ns5.31 ns .. 5.33 nsper elem
map digest of an IDprojection-fp127/digest of idmappingper-element9.40 ns9.37 ns .. 9.43 nsper elem
map digest of an IDprojection-fp130/digest of idmappingper-element17.3 ns17.3 ns .. 17.3 nsper elem
map digest of an IDprojection-gf2_127/digest of idmappingper-element60.7 ns60.6 ns .. 60.8 nsper elem
map digest of an IDsalted-sha256/digest of idmappingper-element32.9 ns32.7 ns .. 33.1 nsper elem
per-salt keysprojection-fp127/keysmappingper-element261 ns260 ns .. 262 nsper elem
per-salt keysprojection-fp130/keysmappingper-element311 ns310 ns .. 312 nsper elem
per-salt keysprojection-gf2_127/keysmappingper-element363 ns362 ns .. 364 nsper elem
per-salt keyssalted-sha256/keysmappingper-element71.0 ns70.8 ns .. 71.2 nsper elem
item IDsha256/idxorper-element32.5 ns32.4 ns .. 32.6 nsper elem
map digestsalted-sha256/digestmappingper-element32.7 ns32.5 ns .. 32.8 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-element27.2 ns27.1 ns .. 27.3 nsper elem
digestgf2_109/batchgf2_109batch758 ns755 ns .. 761 nsper elem
digestgf2_122/batchgf2_122batch555 ns552 ns .. 557 nsper elem
digestgf2_122-gls/batchgf2_122-glsbatch586 ns575 ns .. 595 nsper elem
digestgf2_127/batchgf2_127batch283 ns281 ns .. 284 nsper elem
digestedwards127/batchedwards127batch1.09 µs1.09 µs .. 1.09 µsper elem
digestweier127/batchweier127batch1.07 µs1.07 µs .. 1.07 µ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 x13.39 µsbinary.109/mode=throughput403 ns4.56 µs5.52 µs7.09 µs8.86 µs10.6 µs
gf2_109batchedbinary.109/mode=batch,n=1024518 nsbinary.109/mode=throughput403 ns1.69 µs2.65 µs4.22 µs5.99 µs7.75 µs
gf2_109-lambdaone at a timegf2_109-lambda/pornin map x1 to (x, λ)3.28 µsbinary-lambda.109/mode=throughput331 ns4.24 µs5.03 µs6.32 µs7.77 µs9.23 µs
gf2_109-lambdabatchedbinary-lambda.109/mode=batch,n=1024517 nsbinary-lambda.109/mode=throughput331 ns1.48 µs2.27 µs3.56 µs5.01 µs6.47 µs
gf2_109-uone at a timegf2_109-u/pornin map x1 to (u, v)3.34 µsbinary-u.109/mode=throughput289 ns4.18 µs4.87 µs6.00 µs7.27 µs8.54 µs
gf2_109-ubatchedbinary-u.109/mode=batch,n=1024592 nsbinary-u.109/mode=throughput289 ns1.43 µs2.12 µs3.25 µs4.52 µs5.79 µs
gf2_109-wone at a timegf2_109-w/pornin map x1 to (x, λ)3.27 µsbinary-w.109/mode=throughput332 ns4.24 µs5.03 µs6.33 µs7.78 µs9.24 µs
gf2_109-wbatchedbinary-w.109/mode=batch,n=1024516 nsbinary-w.109/mode=throughput332 ns1.48 µs2.27 µs3.57 µs5.02 µs6.48 µs
gf2_122one at a timegf2_122/pornin map x1897 nsbinary.122/mode=throughput263 ns1.66 µs2.29 µs3.31 µs4.47 µs5.62 µs
gf2_122batchedbinary.122/mode=batch,n=1024350 nsbinary.122/mode=throughput263 ns1.11 µs1.74 µs2.77 µs3.92 µs5.07 µs
gf2_122-glsone at a timegf2_122-gls/pornin map x1865 nsbinary.122-gls/mode=latency240 ns1.56 µs2.14 µs3.07 µs4.12 µs5.18 µs
gf2_122-glsbatchedbinary.122-gls/mode=batch,n=1024309 nsbinary.122-gls/mode=latency240 ns1.01 µs1.58 µs2.52 µs3.57 µs4.62 µs
gf2_122-gls-lambdaone at a timegf2_122-gls-lambda/pornin map x1 to (x, λ)788 nsbinary-lambda.122-gls/mode=throughput216 ns1.42 µs1.93 µs2.78 µs3.72 µs4.67 µs
gf2_122-gls-lambdabatchedbinary-lambda.122-gls/mode=batch,n=1024315 nsbinary-lambda.122-gls/mode=throughput216 ns942 ns1.46 µs2.30 µs3.25 µs4.20 µs
gf2_122-gls-uone at a timegf2_122-gls-u/pornin map x1 to (u, v)843 nsbinary-u.122-gls/mode=throughput182 ns1.37 µs1.81 µs2.52 µs3.32 µs4.12 µs
gf2_122-gls-ubatchedbinary-u.122-gls/mode=batch,n=1024359 nsbinary-u.122-gls/mode=throughput182 ns888 ns1.32 µs2.04 µs2.83 µs3.64 µs
gf2_122-gls-wone at a timegf2_122-gls-w/pornin map x1 to (x, λ)791 nsbinary-w.122-gls/mode=throughput217 ns1.42 µs1.94 µs2.78 µs3.73 µs4.68 µs
gf2_122-gls-wbatchedbinary-w.122-gls/mode=batch,n=1024311 nsbinary-w.122-gls/mode=throughput217 ns939 ns1.46 µs2.30 µs3.25 µs4.20 µs
gf2_122-lambdaone at a timegf2_122-lambda/pornin map x1 to (x, λ)801 nsbinary-lambda.122/mode=throughput217 ns1.43 µs1.95 µs2.80 µs3.75 µs4.70 µs
gf2_122-lambdabatchedbinary-lambda.122/mode=batch,n=1024350 nsbinary-lambda.122/mode=throughput217 ns979 ns1.50 µs2.35 µs3.30 µs4.25 µs
gf2_122-uone at a timegf2_122-u/pornin map x1 to (u, v)857 nsbinary-u.122/mode=throughput183 ns1.39 µs1.83 µs2.54 µs3.34 µs4.15 µs
gf2_122-ubatchedbinary-u.122/mode=batch,n=1024391 nsbinary-u.122/mode=throughput183 ns922 ns1.36 µs2.07 µs2.88 µs3.68 µs
gf2_122-wone at a timegf2_122-w/pornin map x1 to (x, λ)799 nsbinary-w.122/mode=throughput211 ns1.41 µs1.91 µs2.74 µs3.66 µs4.58 µs
gf2_122-wbatchedbinary-w.122/mode=batch,n=1024328 nsbinary-w.122/mode=throughput211 ns938 ns1.44 µs2.26 µs3.19 µs4.11 µs
gf2_127one at a timegf2_127/pornin map x1619 nsbinary.127/mode=throughput155 ns1.07 µs1.44 µs2.05 µs2.73 µs3.41 µs
gf2_127batchedbinary.127/mode=batch,n=1024196 nsbinary.127/mode=throughput155 ns646 ns1.02 µs1.62 µs2.30 µs2.98 µs
gf2_127-lambdaone at a timegf2_127-lambda/pornin map x1 to (x, λ)567 nsbinary-lambda.127/mode=throughput132 ns949 ns1.26 µs1.78 µs2.35 µs2.93 µs
gf2_127-lambdabatchedgf2_127-lambda/pornin map x1 to (x, λ), batched184 nsbinary-lambda.127/mode=throughput132 ns566 ns880 ns1.39 µs1.97 µs2.55 µs
gf2_127-uone at a timegf2_127-u/pornin map x1 to (u, v)598 nsbinary-u.127/mode=throughput116 ns935 ns1.21 µs1.67 µs2.18 µs2.69 µs
gf2_127-ubatchedgf2_127-u/pornin map x1 to (u, v), batched213 nsbinary-u.127/mode=throughput116 ns550 ns828 ns1.28 µs1.79 µs2.30 µs
gf2_127-wone at a timegf2_127-w/pornin map x1 to (x, λ)569 nsbinary-w.127/mode=throughput131 ns949 ns1.26 µs1.77 µs2.35 µs2.92 µs
gf2_127-wbatchedgf2_127-w/pornin map x1 to (x, λ), batched184 nsbinary-w.127/mode=throughput131 ns565 ns878 ns1.39 µs1.96 µs2.54 µs
edwards127one at a timeedwards.127/mode=indep1.07 µsedwards.127/mode=throughput19.9 ns1.12 µs1.17 µs1.25 µs1.34 µs1.42 µs
edwards127batchededwards.127/mode=batch,n=10241.06 µsedwards.127/mode=throughput19.9 ns1.12 µs1.17 µs1.25 µs1.33 µs1.42 µs
weier127one at a timeweier.127/mode=indep1.03 µsweier.127/mode=throughput44.7 ns1.16 µs1.27 µs1.44 µs1.64 µs1.83 µs
weier127batchedweier.127/mode=batch,n=10241.03 µsweier.127/mode=throughput44.7 ns1.16 µs1.27 µs1.44 µs1.64 µs1.83 µs
weier127-jacobianone at a timeweier-jacobian.127/mode=indep1.03 µsweier-jacobian.127/mode=throughput36.6 ns1.14 µs1.22 µs1.37 µs1.53 µs1.69 µs
weier127-jacobianbatchedweier-jacobian.127/mode=batch,n=10241.00 µsweier-jacobian.127/mode=throughput36.6 ns1.11 µs1.20 µs1.34 µs1.50 µs1.66 µs

Apple M4 · rustc 1.98.1 · RUSTFLAGS=-C target-cpu=generic · ef9e82d39fbf · full profile · 2026-10-08