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

Ephemeral ECMH

Authorship and disclaimer

The author formulated the research question, defined the threat model (Adversary) and security arguments not related to curve selection, and directed the language models that carried out the work. The implementation and evaluation were carried out almost entirely by Claude Opus 5.5, with review and contributions from Codex Astra 6 and Claude Fable 5.1.

The author is not an expert in elliptic curve cryptography and has only a vague familiarity with binary elliptic curves. This report was written for the author as much as under his direction: the models assembled most of the security arguments for curve selection and the literature they rest on, with most of the cited works being new to the author. It is shared before the author is able to verify it fully, and has not been reviewed by a specialist.

Synopsis

This repository evaluates elliptic-curve multiset hashes (ECMH) [maitin-shepard-et-al-2016] over small curves as the cell checksum of rateless invertible Bloom lookup tables (RIBLTs) [yang-gilad-alizadeh-2024].

When the sets being reconciled contain potentially adversarial inputs, RIBLT can be susceptible to collisions. This can be addressed using a secret shared by the peers engaging in reconciliation, or by utilizing ECMH.

The aim is to relax the requirement for a shared secret and mitigate collisions caused by adversarial inputs, using only a public beacon value as a salt, but without paying the full cost of ECMH on standard curves.

Weaker curves can be randomly selected periodically based on the public randomness beacon, and this project investigates the suitability and performance of such curves (and their underlying fields) in the context of RIBLT over sets with potentially adversarial items. The question is whether such a checksum attains a work factor between and group operations for each curve, and which field, curve model, and representation minimize its cost per item.

Motivation

Set reconciliation lets two peers that hold similar sets exchange only their difference. In peer-to-peer networks the sets often accept items from any party: Erlay proposes set reconciliation for the transaction relay of Bitcoin nodes [naumenko-et-al-2019], and IBLT-based reconciliation has been evaluated for the channel and node announcements of Lightning gossip [bolt-7, chen-et-al-2026]; neither is deployed, and both networks relay by flooding. Their items may be adversarial inputs. The adversary considered here is a third party that authors items and places them in the sets of honest peers, for instance by broadcasting them, aiming to make two honest peers fail to reconcile or obtain a wrong difference; resistance to it is what Meyer and Scherer call censorship resistance [meyer-scherer-2024]. A participating peer can always disrupt reconciliation by sending corrupt data or misrepresenting its set; that is unavoidable and not considered (Adversary).

A RIBLT [yang-gilad-alizadeh-2024] recognizes a coded symbol that holds a single item by a checksum. In the reference implementation the checksum is the XOR of item hashes. An adversary who can evaluate the item hash constructs two distinct sets with equal checksums by linear algebra over , at negligible cost and with any hash function (yangl1996/riblt#3). Addition modulo in place of XOR has the same weakness, by lattice reduction and Wagner’s algorithm [wagner-2002].

A secret key defeats the attack when the adversary cannot evaluate the keyed hash. This is the model of short keyed hashes such as SipHash [aumasson-bernstein-2012], designed against hash flooding of hash tables. Bitcoin’s compact block relay keys the 48-bit short identifiers of a block’s transactions with a hash of the block header and a nonce [corallo-2016]: the header commits to the transactions, so the set is fixed before the key is revealed and no transaction can be chosen against it. Open sets have no such ordering. Items keep arriving after a key shared by all peers is published, and the attack on the XOR checksum applies whatever the hash. A key kept per connection, as Erlay’s salts are [naumenko-et-al-2019], or a secret key coordinated by the two peers, as the Rateless IBLT paper proposes against injected items, repeats the hashing of every item for each key, and the checksums of coded symbols no longer serve every peer, though their sums do [yang-gilad-alizadeh-2024, Section 4.3]. Meyer and Scherer count that cost against randomizing per session [meyer-scherer-2024].

The hashing can instead be shared within an epoch. In a namespace salted by a beacon value, such as a key derived from a block hash, an adversary who can neither predict nor influence that value cannot search for collisions before the namespace begins. Unlike in compact block relay, it can still author items afterwards, so the checksum must resist relation finding without a secret until the next beacon value; with a block hash as the beacon, new blocks determine how long that is.

An ECMH sums hashed points in an elliptic-curve group. For maps to the curve that satisfy the hypotheses of the known reductions, its collision resistance reduces to the discrete-logarithm problem in that group [maitin-shepard-et-al-2016]; whether the maps used here satisfy them is open (Known weaknesses). The curves in use for this purpose have about points and about 128-bit security, and hashing an item to them costs about 110 to 195 times the SHA-256 hash of the XOR checksum (see Findings). A shorter horizon and a failure confined to one namespace suggest that a work factor of to suffices, provided the application detects a sketch collision by other means and recovers, for example by re-keying or by another reconciliation method. This is an application assumption.

A small fixed curve is exposed to precomputation [bernstein-lange-2012]. With the discrete logarithms of the item hashes, the checksum becomes AdHash modulo the group order, and the attack on the XOR checksum carries over through Wagner’s algorithm or lattice reduction; without them, the group does not expose the residues modulo its order that these algorithms need. Hoyte reports such collisions modulo in about 28 hours on eight cores [hoyte-2023]. The group orders here are below , where the leading-order estimate for Wagner’s algorithm is smaller by a factor of to , so a discrete-logarithm break makes the attack practical. The curve is therefore derived from the beacon value as well, deterministically, by a public candidate-selection procedure. A participant must be able to derive and check the curve for each new beacon value.

Design

The checksum uses hashing to the curve, point addition, and negation; scalar multiplication occurs only in curve selection. The items are public, so the arithmetic may run in variable time and items may be hashed by try-and-increment; the map from an item’s SHA-256 digest to the group need not be uniform, only such that relations are hard to find within the subset it reaches (Adversary). Over binary fields, the complete formulas of Pornin [pornin-2022, pornin-2023] have an operation count for addition independent of the extension degree , negation is one field addition, and a dense curve constant enters Pornin’s extended coordinates only through two multiplications by per addition. Scaling the addends by the inverse of when they are decoded removes these, leaving seven field multiplications and two squarings () per mixed addition.

The curve of a namespace is the first candidate derived from the beacon value whose group order is an admissible cofactor times a prime . A participant can check that choice without counting points: a certificate gives and a nonidentity point with for the accepted candidate, and a witness of an inadmissible order for each earlier candidate. Its conclusion is conditional on the primality of , which is tested to 24 fixed Miller–Rabin bases, not proven (Parameter selection and verification).

Random short Weierstrass and Edwards curves over prime fields are the conservative alternatives: their field multiplication uses the integer multiplier of every target, and a prime field has no subfield over which a Weil descent applies.

With , admits Galbraith–Lin–Scott (GLS) curves, whose constants range over about values and whose automorphism lowers the rho cost by a factor beyond that of the negation map. A coordinate fits one 64-bit word, and points have 16-byte encodings; the 107-bit and 109-bit families have 14-byte encodings. Weil descent constrains the choice of binary field. Candidate constructions lists the constructions compared and their operation counts.

In a RIBLT, an item’s point is added to about of the first coded symbols, and the item is hashed once per namespace, so additions outnumber hashes (Workload). The simulator reproduces the forgery of yangl1996/riblt#3 against the XOR checksum, and every curve group rejects the forged cells.

Findings

The figures below are from runs of source revision ef9e82d3 in the full profile: on an Apple M4, run 01a1196a-88e4-7cdd-97ef-f46747dd8ab0, unless they are given for an Intel Xeon W-1390P, run 01a11cd2-6ca3-73a7-8501-245c98af23fc, built for x86-64-v3 with PCLMULQDQ. Those of the portable build are from run 01a11a5b-9046-7637-b5af-cfa347a1a47d on the M4, built for -C target-cpu=generic, and run 01a12137-de75-762e-8d58-604336dcc781 on the Xeon, built for -C target-cpu=x86-64. Batched hashing processes 1024 items per batch, addition costs are throughput figures, and RIBLT encoding is per item, for items into a sketch of cells.

Gains from the Go-to-Rust port or the mapping-generator change (xoshiro256++ in place of ChaCha8) are not attributed to this project; matched comparisons in the Rust harness measure checksum substitution (comparison conditions).

  • The binary families over and lead. Their fastest representation, unscaled accumulators with Pornin’s complete formulas, encodes into a RIBLT sketch at 282 and 288 ns per item and adds in 9.8 and 10.7 ns, against 165 ns per item for the XOR baseline and 5.84 µs for ristretto255. The incomplete λ-projective variants add in 12.0 and 14.9 ns and encode at 303 and 326 ns; the extended coordinates, also complete, at 324 and 329 ns.
  • encodes a point in 14 bytes, against 16 for , so each coded symbol’s checksum is two bytes shorter, at a nominal rho cost of against . Both fields occupy two 64-bit limbs, and the smaller one is only slightly faster on the M4 and slightly slower on the Xeon; Code generation (section 4) compares their reductions, which differ by modulus.
  • Pornin’s map is the faster hash, batched or not. To the unscaled addend, in batches, it takes 60.7 and 57.2 ns per item over and , against 81.2 and 85.8 ns for try-and-increment; one item at a time, 533 and 461 ns against 874 and 869 ns, mainly for the field inversion. The RIBLT benchmarks therefore hash every binary family by Pornin’s map, as the plan derived from the group operations selects (The RIBLT plan). Summing two maps costs 916 ns over .
  • Over the GLS-shaped and dense families encode at 306 and 308 ns; with extended coordinates the GLS family adds about 6% faster (16.8 against 17.8 ns), at a nominal rho cost 0.5 bits lower ( against ).
  • The prime-field families hash an item in 0.62 to 1.92 µs, mainly for the square root, which batching does not share, and add in 12.5 to 45.4 ns across the implemented formulas. The fastest of them in RIBLT encoding, twisted Edwards over with , takes 900 ns per item.
  • XOR of SHA-256 digests, the insecure baseline, costs 24.2 ns per item and 0.38 ns per cell. ristretto255 hashes an item in 4.72 µs and secp256k1 in 4.49 µs, 185 to 195 times the baseline.
  • The binary-field figures require carry-less multiplication (PMULL or PCLMULQDQ) to be enabled in the build; the portable backend executes 13 to 19 times the instructions (Code generation). Built without it, stays in the class of the prime-field curves: its families encode into the sketch at 1.90 to 2.43 µs per item, against 1.42 to 1.68 µs for those over . The families over take 2.90 to 4.12 µs and those over 4.53 to 6.06 µs, up to about four times the prime-field curves. On the Xeon takes 3.60 to 4.73 µs, about twice the 1.88 to 2.24 µs over , 4.45 to 6.11 µs and 7.69 to 10.15 µs.
  • Hashing an item anew in each namespace need not repeat SHA-256 (Adversary): projecting its 32-byte identifier, the item’s SHA-256 at 33.1 ns, to 128 bits under the namespace’s key costs 5.1 ns over , 9.6 ns over and 16.5 ns over , against 33.0 ns for the salted SHA-256 of the identifier. Keyed by projections of identifiers computed beforehand, the unscaled accumulators over and encode at 222 and 227 ns per item, against 282 and 288 ns by salted SHA-256 of the items (Costs by lifetime). Without carry-less multiplication the projection over costs 60.7 ns on the M4 and 114 ns on the Xeon, more than the salted hash, and the portable build’s RIBLT plan projects over instead.
  • Over four seeds, finding a curve took 2.4 to 23.6 ms and certifying it, search included, 2.4 to 23.8 ms. Verifying a certificate counts no points and takes 55 to 68 µs across the families, 45 to 55% of it in the embedding-degree bound, or up to 0.59 ms when it also checks every rejected candidate. For the prime-field families the implemented prover counts points with PARI.
  • On the Xeon the unscaled accumulators over and encode at 422 and 414 ns per item and add in 13.5 and 13.2 ns, against 218 ns per item for the XOR baseline and 7.69 µs for ristretto255. Pornin’s map remains the faster hash: in batches it takes 110 and 98.0 ns per item against 125 ns for try-and-increment, and one item at a time 657 and 249 ns against 1154 and 401 ns, over about half the M4’s cost. The prime-field families hash an item in 0.70 to 2.21 µs, and the fastest of them encodes at 1.18 µs. SHA-256 takes 53.4 ns, so ristretto255 and secp256k1, at 6.03 and 6.17 µs, hash at 113 to 116 times the baseline. Projecting an identifier costs 9.7 to 26.0 ns by field, against 51.4 ns for its salted SHA-256, and keyed by projections the unscaled accumulators encode at 331 and 320 ns. Verifying a certificate takes 70 to 91 µs.
  • The nominal rho costs of the families range from to . The documented attacks obtain discrete logarithms and then solve additive relations; their costs and limitations are given in Known weaknesses.

License

MIT

Contents

Study

  • Background - The RIBLT checksum, its linearity over (yangl1996/riblt#3), why AdHash does not repair it, and keyed and group-based alternatives.
  • Problem statement - The adversary, the beacon-salted setting and its reference work factor, per-namespace curves against precomputation, curve selection and certificates, design criteria and scope.
  • Workload - The multiset digest, the operations a RIBLT performs on it, and their counts in repeated reconciliation.
  • Candidate constructions - The fields, curve models, accumulators, encodings and hash maps compared, and the models excluded.
  • Security considerations - Nominal rho costs per family, extension-field attacks, the limits of the security evidence, and the known weaknesses.
  • Measurement methodology - What the benchmarks measure, the decision table and dominance rule, how to run checks, benchmarks and reports, and how results are published.

Evidence

Reference

  • Annotated literature - For each key of references.bib, what the work contributes to the evaluation of ECMH-based RIBLT checksums over per-namespace curves; in the book, headed by the formatted entry.
  • Repository organization - Where the field arithmetic, curves, group capabilities, benchmarks, reports, published results and reference programs live.

Background

The RIBLT checksum

A RIBLT reconciles two sets: the decoder recovers their symmetric difference rather than reading back stored values. A coded symbol holds three sums over the items mapped to it: the XOR of the items, an item count, and a checksum. The checksum is the XOR of fixed-width item hashes. Decoding peels a pure symbol, which holds exactly one item, and uses the checksum to recognize purity.

In the construction studied here the checksum is an ECMH: a coded symbol holds the signed sum of the items’ salted hashes to an elliptic curve, in place of the XOR of fixed-width hashes. The item field remains the XOR of the item bytes (Workload). A variant in which each item is itself a curve point, a 128-bit identifier recovered from the point sum, is not implemented.

Linearity of the checksum

yangl1996/riblt#3 observes that this checksum is linear over . An adversary who can evaluate the item hash can find a set of distinct, non-colliding items whose hashes XOR to a target value. Gaussian elimination over slightly more candidates than the hash width suffices, at negligible cost. The weakness lies in the XOR combination (XHASH [bellare-micciancio-1997]) rather than in the hash function, so it persists with SHA-256. The issue demonstrates two constructed sets that the decoder wrongly reports as equal. Whether such relations can also suppress one chosen item across every coded symbol it maps to is left open there. In either case the checksum provides no resistance to relation finding.

Replacing XOR with addition modulo (AdHash [bellare-micciancio-1997]) does not remove the weakness. Relations with small integer coefficients among hash values modulo a 64-bit integer are found efficiently by lattice reduction [maitin-shepard-et-al-2016, Appendix B]. Given an unrestricted number of terms, Wagner’s generalized birthday algorithm [wagner-2002] finds them in time subexponential in the size of the modulus. The security of AdHash rests on the hardness of a weighted knapsack problem, which requires a modulus of thousands of bits [bellare-micciancio-1997, wagner-2002]; a variant of one incremental hash of this kind was proposed with its modulus raised from to in response to Wagner’s algorithm [phan-wagner-2006, Section 2] (Known weaknesses).

Keyed and group-based checksums

Keying the item hash with a secret prevents the attack by parties that cannot evaluate the keyed hash. Short keyed hashes such as SipHash [aumasson-bernstein-2012] serve this purpose against hash flooding of hash tables, where the key does not leave one process: the adversary neither holds the key nor obtains keyed hashes of candidates of its choosing. Under such a key a RIBLT gives up universality: coded symbols computed under one key cannot serve peers that do not share it. This repository assumes less. The salt and the set are public, the set accepts items from anyone, the adversary included, and the salt is a value of a randomness beacon outside the adversary’s control, renewed often enough that discrete logarithms in the checksum group cannot be computed while it is in use (Setting and reference work factor).

The issue discussion proposes computing the checksum in a finite abelian group in which relations with small coefficients among hash outputs are hard to find. ECMH is such a construction. An implementation over ristretto255 [riblt-ecmh] reports 256-bit checksums in place of 64-bit ones and a higher end-to-end cost. It also replaces the pseudorandom generator that maps items to coded symbols, so its timings do not isolate the cost of the group.

Problem statement

Adversary

The sets considered accept items from any party, and the peers that hold them reconcile with one another. The mempools of Bitcoin nodes, for whose transaction relay Erlay proposes set reconciliation [naumenko-et-al-2019], and the channel and node announcements of Lightning gossip [bolt-7], for which IBLT-based reconciliation has been evaluated [chen-et-al-2026], are such sets: their items are adversarial inputs. Neither proposal is deployed; both networks relay by flooding. Meyer and Scherer call the property required of reconciliation censorship resistance: a malicious party cannot generate sets that two honest nodes fail to reconcile [meyer-scherer-2024]. Hoyte states the same adversary for the fingerprints of range-based reconciliation: a third party inserts crafted elements so that innocent ones fail to synchronize [hoyte-2023].

The adversary is a third party. It can evaluate the item hash once the salt is published, and it can place items of its choosing in the sets of honest peers, for instance by broadcasting them. It authors items whose hashes satisfy a relation, aiming to make two honest peers fail to reconcile, or obtain a wrong difference, when the items lie in the symmetric difference of their sets; items common to both sets cancel. The RIBLT’s mapping of items to coded symbols admits a similar attack that does not involve the checksum (Known weaknesses).

The items, the salt and the curve are public, so the timing of the computation reveals nothing that the adversary could not compute itself, and implementations may run in variable time. Hashing may therefore use try-and-increment [boneh-lynn-shacham-2001], whose number of attempts depends on the item. RFC 9380 specifies deterministic maps instead and recommends against rejection sampling because its timing has leaked secret inputs [rfc9380, Section 1]; it requires constant-time hashing when the inputs to an encoding are secret [rfc9380, Section 10.3], which they are not here.

The item hash assumes secure hash functions of three kinds, which differ in what they bind and in how long their outputs live. An item is identified by a 256-bit digest that does not depend on the salt: tagged SHA-256 of its encoding, or an identifier the application already holds, such as a transaction’s txid. The identifier is computed once and serves every namespace. The adversary chooses it, through the preimage, and only its collision resistance, about , binds an item to it.

Hashing to the curve and the RIBLT’s mapping depend on the salt, although the curve already changes with the beacon value. Each map starts from a field element and a sign, taken from at most 128 bits of a digest, before the curve enters, and two items whose elements and signs agree hash to the same point on every curve that accepts that element. Without the salt, such a pair would cost about digests once and serve in every namespace; with it, the search is repeated for each namespace. An unsalted mapping would likewise let colliding schedules be searched for before the beacon (Known weaknesses). The two keys serve different ends. The hash to the curve keeps the public salt, under which an item’s point identifies it, and resists collisions, in every session of the namespace. The schedule is better keyed by a secret that each pair of peers shares, where one is available: no third party can then search for colliding schedules, and a peer whose neighbours have converged receives independent streams from them rather than one stream repeated. The benchmarks derive both keys from one salt, which changes no cost.

Neither use needs a salted 256-bit digest of each item. Once per namespace, salted SHA-256, modelled as a random oracle, derives keys from the beacon value, or the schedule’s from a secret, under a tag for each use; once per item and namespace, a universal hash under these keys projects the identifier to 128 bits [wegman-carter-1981]. With the identifier read as two elements of a field of about elements and a nonzero key , the projection is Poly1305’s polynomial on a two-block message, without its clamping or one-time pad [bernstein-2005]. Two identifiers fixed before the salt collide for at most two keys, with probability about . Once the salt is published, the adversary can evaluate the projection, but its inputs are SHA-256 outputs, which it does not choose: a random oracle followed by a fixed function whose fibres are of nearly equal size is a random oracle into the field, and a colliding pair costs a generic search over about identifiers, as for a salted 128-bit digest. The projection’s linearity gives no shortcut. Items are mapped to the curve independently and added only as points, so a relation among projections is a relation among points only through a symmetry of the map, such as for simplified SWU and Elligator 2 [rfc9380, bernstein-et-al-2013]; to exploit one before the salt, two identifiers must agree up to sign as field elements in both halves, about 254 bits. The field is therefore chosen by cost: where the target has carry-less multiplication, where it does not, with Poly1305’s measured as a comparison (hash). The attempts of a try-and-increment map after the first use further keys over the same identifier, so their candidates are linear in the first attempt’s rather than independent; the deterministic maps, Pornin’s [pornin-2023], Elligator 2 and simplified SWU, use only the first. For the mapping, 128 bits suffice as well: two items stall a rateless decoder indefinitely only if their schedules agree entirely, which after the salt requires equal seeds, about identifiers. Schedules that agree on a prefix only delay decoding, at a cost that does not depend on the seed’s width; that is a property of the sketch, not of its checksum. The implementation digests items with salted SHA-256 for both uses by default. Riblt::projected keys cells by the items’ identifiers and replaces both digests by projections, each under keys of its own and in a field chosen for its cost; both are benched (Costs by lifetime).

What need not be uniform on the group, or indifferentiable from a random oracle, is the map from digests to points: relations must be hard to find within the subset of the group that it reaches. Maitin-Shepard et al. give a sufficient condition. Let the group have a direct factor of prime order whose complement can be sampled efficiently, and let the output of a random oracle be mapped to the group by an -weak encoding: one whose preimages can be counted efficiently and sampled uniformly, of which no point has more than , and of which a uniformly random point has on average at least . Then finding a multiset collision with multiplicities below is as hard as computing discrete logarithms, at a cost of simulating the oracle of about scalar multiplications per query and half the success probability [maitin-shepard-et-al-2016, Section 4.1, Theorem 1, and Appendix A]. An encoding that misses a fixed fraction of the points can qualify: their characteristic-2 Shallue–van de Woestijne encoding misses about of them and has close to 3 [maitin-shepard-et-al-2016, Section 4.2]. Whether the maps used here meet these hypotheses is open (Known weaknesses).

A participating peer can always prevent reconciliation by misrepresenting its set; no checksum prevents this, and it is not considered. Corrupt coded symbols are the pollution attack of network coding, in which forwarded packets are linear combinations of a source’s packets, and there the source authenticates the space that the combinations must lie in. Homomorphic hashes of a publisher’s blocks let a receiver verify each encoded block of a rateless erasure code as it arrives [krohn-freedman-mazieres-2004], authenticated LT codes such as Falcon codes verify each symbol with a message authentication code under a key shared by sender and receiver [juels-et-al-2015], and signatures on the linear subspace spanned by a source’s packets let any node derive and verify signatures on their combinations in random linear network coding [boneh-freeman-katz-waters-2009]. A coded symbol of a RIBLT is likewise a sum, and its checksum a homomorphic hash of the items it holds, but none of these schemes applies: each authenticates data against a source or a key from which every legitimate symbol derives, whereas the items of a reconciled set are authored by any party, the adversary included, and carry no signature or key that distinguishes an honest item from an adversarial one. Whoever supplies a curve certificate stands in a separate relation to its verifier (Parameter selection and verification).

Setting and reference work factor

In the universal setting the item hash is public, and the checksum must resist relation finding without a secret. Keying the hash with a secret the peers coordinate, as the Rateless IBLT paper proposes [yang-gilad-alizadeh-2024, Section 4.3], defeats the precomputation of relations among item hashes but repeats the hashing of every item for each key; randomized for each reconciliation session, it does so in every session [meyer-scherer-2024, Section II]. This repository considers namespaces whose salt is published by a randomness beacon, such as a block hash [bonneau-clark-goldfeder-2015], and whose checksums are shared by all sessions within a bounded epoch. Bitcoin’s compact block relay keys the short identifiers of a block’s transactions with a hash of the block header and a nonce [corallo-2016]. The header commits to those transactions, so they cannot have been chosen in relation to the key: as in the keyed model, the set is fixed before the key is revealed, and a short keyed hash serves. Items reconciled within an epoch carry no such guarantee: the adversary may author them after the salt is published, so the checksum must resist relation finding for the duration of the epoch, which the regular publication of new blocks bounds. A forgery affects reconciliation within one namespace only. This study assumes that the protocol validates the items it obtains independently of reconciliation, as Bitcoin nodes validate transactions, so that a failed or wrong decoding costs a repeated reconciliation and admits no invalid item. A failure of soundness for one curve, even a discrete logarithm computed in its group, is then a failure of liveness, and a transient one: the next beacon value selects a new curve. The short horizon and the limited scope of failure motivate a reference work factor between and group operations, with the upper part of the range preferred; the families compared here lie between and (Security considerations). This range is an application assumption under evaluation; salting does not by itself imply it.

Maitin-Shepard et al. [maitin-shepard-et-al-2016, Section 4.1] reduce collision finding with bounded multiplicities to the discrete-logarithm problem in a large prime-order component of the checksum group, under the random-oracle and encoding assumptions stated there. For a prime component of order , group operations serve here as the generic reference cost. An order near gives a reference cost near . Several curve models over fields of about 127 bits admit 16-byte encodings of such groups. The security assessment must also cover the hash maps and parameter selection actually used.

Precomputation and per-namespace curves

A public salt over a fixed checksum group serves here as a point of comparison, not as a design under consideration: the salt changes the item-to-point map, but the group, and any precomputation against it, serves every epoch. Bernstein and Lange [bernstein-lange-2012] give a discrete-logarithm algorithm that, after about operations of precomputation, uses a table of about entries and about group operations per logarithm; [bernstein-lange-2013] discusses the cost model for such precomputation. For near these scales are , , and respectively. They are leading-order estimates for a time–memory tradeoff, not measured costs and not the cost of a RIBLT forgery. Their significance depends on offline resources, storage, and the number of targets.

Each beacon value therefore determines both the salt and the curve. Subject to the entropy of the beacon and to the parameter-selection procedure, this prevents direct reuse of tables computed for earlier curves. It does not exclude all useful precomputation, nor does it guarantee the generic work factor in every namespace.

Parameter selection and verification

Candidate curves are derived from the beacon value by hashing, and a namespace uses the first candidate whose group order is an admissible cofactor times a prime . Deriving curves from public randomness has precedent in verifiably random seeds [ansi-x9-62-1998, rfc5639], lottery draws [baigneres-et-al-2015], and a beacon whose outputs seed a stream of curves [lenstra-wesolowski-2017]; those curves serve general use at the 128-bit level, whereas here each beacon value selects a smaller one for its namespace. A participant may determine that curve by counting points itself, or may check a certificate: for the accepted candidate, and a hashed point whose cofactor multiple is not and satisfies , and for each earlier candidate a witness that its order is inadmissible, as trx proposes for its own enumeration. The verifier accepts any witness that satisfies the certificate rules. This repository’s prover derives its witnesses from hashed points, so its certificate is determined by the seed and the rejection policy (how labels are chosen, and whether by factoring). Checking a certificate requires scalar multiplications, a probable-prime test, and an embedding-degree bound, but no point counting.

The probable-prime test is Miller–Rabin to 24 fixed bases, so the primality of is probable, not proven. A candidate with the required prime-order structure has no valid rejection witness, so a certificate cannot skip it. The prover supplies for the accepted candidate; the verifier checks its admissible interval, the condition with not , and the 24 Miller–Rabin bases. The second condition establishes that the order of divides . If is prime, has order , and the family’s cofactor and the Hasse bound then establish . The fixed-base test does not prove that is prime.

The direct checker and certificate verifier share the order-parameter predicates: the probable-prime test, the Hasse interval at the required cofactor, exclusion of , and the embedding-degree bound. Direct checking takes the full order from a trusted point counter. Certificate verification uses the nonidentity point and Hasse argument above instead; its order conclusion remains conditional on being prime.

These formats do not certify every possible outcome of direct checking. An order-admissible candidate can fail the fixed certificate-point check, and the formats have no rejection witness for an anomalous order or a failed embedding bound. A family without a full-order rejection witness also needs a factor for a rejected composite. Direct selection can proceed without those witnesses; the prover reports failure rather than skipping an uncertifiable candidate. Whenever certification succeeds, its selected index agrees with direct selection under the same candidate criteria and filters that reject only candidates failing those criteria.

The families differ in the cost of point counting. Two implementations count points here. PARI/GP [pari-gp] is a computer algebra system for number theory: a C library, PARI, with an interpreter, GP. The optional pari feature links the library and calls it for point counting and integer factorization (curvegen::pari). SageMath (Sage) [sagemath], in which the reference programs are written, also counts points through PARI. The other implementation is this repository’s own, in Rust, for binary fields only; it has no dependency on PARI.

Over binary fields, Satoh’s canonical lift [satoh-2000] and Mestre’s arithmetic–geometric mean, in the form compared and combined by Gaudry [gaudry-2002], count points in polynomial time using 2-adic arithmetic alone. The repository implements this for , and (curvegen::agm), counting the dense 122-bit curves in a pentanomial basis and the Galbraith–Lin–Scott (GLS) curves [galbraith-lin-scott-2009] through their subfield curve over . A GLS constant is for in , so GLS candidates are drawn from about constants, against about for the dense family; the accepted curves are a subset of each. For all three fields the Rust prover produces certificates without PARI: a candidate whose odd part is composite with no prime factor below the trial-division bound ( for , otherwise) is rejected by its full order rather than by a factor.

The known-answer certificates were produced with Sage, which derives its witnesses as the Rust prover does, from hashed points (sage/kat_common.sage). For the 109- and 122-bit families it labels a rejection by the smallest prime factor of its odd part (below in the 122-bit scripts, without a bound in the 109-bit one). Without PARI, the Rust prover reproduces the indices and orders of these certificates and the 122-bit certificates byte for byte; with PARI supplying the factors, it reproduces the 109-bit certificates byte for byte as well.

Over prime fields, the corresponding method is the Schoof–Elkies–Atkin algorithm [schoof-1995], which requires modular polynomials. The repository does not implement it: prime-field and curves are counted by PARI, which handles curves with complex multiplication by a small discriminant separately before falling back to it. A participant in a prime-field namespace who does not run PARI or an equivalent system must therefore rely on another party’s certificate to establish which curve is in use, whereas a binary curve can be derived and checked independently by a small, self-contained program. In a setting where every participant derives the curve from a public beacon, this is an advantage of binary curves, separate from their arithmetic cost.

The cost of selection is paid once per namespace. Each run report’s Curve selection section gives, per family and seed of curvegen.csv, the wall-clock time to find a curve from a seed, to find and certify it, and to verify the certificate, and how the prover’s time divides among the phases of the search. The number of candidates before an admissible order is geometric, so the time to find varies severalfold between seeds. On an Apple M4 the Rust implementation finds a curve in about 20 ms on average, an order of magnitude faster than PARI on the same seeds; PARI finds the prime-field and curves in 0.25 to 2 s on average; and certificates verify in under a millisecond on average.

Binary fields add a structural check that prime fields do not need: Weil descent through subfields. For the prime extension degrees 127 and 109 the only proper subfield is [menezes-qu-2001]. For , 2 has order 36 modulo 109 and every descent has genus at least . For , 2 has order 7, and the generalized Gaudry–Hess–Smart (GHS) descent [gaudry-hess-smart-2002, hess-2003], which extends to isogenous curves [galbraith-hess-smart-2002], reaches curves of admissible order with heuristic probability about per epoch: 65 isogeny classes of order , against none among the 36 classes the basic descent reaches (sage/ghs.sage). No check is made; a descent compromises only the epoch whose curve it reaches. The composite degree 122 is assessed in curvegen::select122.

Design criteria

These assumptions differ from those of fixed-curve design:

  • The operations that dominate the cost are one hash-to-curve per item, followed by one point addition or subtraction per coded symbol the item maps to, plus encoding and equality tests during peeling. Scalar multiplication is not among them; only curve selection and certification use it.
  • Curve parameters vary by namespace. An optimization tied to particular parameters must include its setup cost and its amortization within one namespace. Constants fixed by the field or the curve model remain available.
  • The arithmetic processes public data, so variable-time implementations are acceptable (Adversary).
  • Point counting and parameter certification occur once per namespace and are amortized, but must remain tractable for each new beacon value (Parameter selection and verification).
  • Field and curve structure require separate analysis for attacks below the reference work factor, including applicable Weil-descent methods [gaudry-hess-smart-2002, hess-2005, gaudry-2009, diem-2011, joux-vitse-2012]. The existence of a descent does not by itself establish such an attack.

Candidate constructions lists the constructions compared, at 128-bit and shorter encodings. Their arithmetic costs are measured here; their security conditions are assessed separately.

Questions outside this study

Which beacon value salts which data, and the interval in which a participant can withhold or delay a value it has observed, are questions for the protocol that uses the checksum; they are not addressed here. Whether the checksum covers sets or multisets changes the bounds on relation finding of Setting and reference work factor but not the constructions compared. Targets without carry-less multiplication, WebAssembly among them, are represented only by the portable build described in Measurement methodology. How the RIBLT performs when a peer reconciles with several others, and how far a third party can delay decoding with items whose schedules agree, are questions for the sketch rather than for its checksum.

Workload

For a namespace , let map an item to a group element. The digest of a multiset is

D_N(S) = sum of H_N(x), with multiplicity, over x in S.

Insertion and removal add or subtract a hashed point. A prepared representation of is reused for every coded symbol the item maps to. The measured costs are hashing to a reusable addend, signed accumulation, and encoding or decoding accumulated points.

The encoding must represent the additive closure of the hash outputs, including the identity, negatives, and sums, because coded symbols hold arbitrary sums. Prime order is not required. A subgroup or quotient group is sufficient if hashing, equality, accumulation, and canonical encoding all refer to the same group. Not every bit string needs to be a valid encoding.

The RIBLT workload implements encoding and peeling with an XOR item field, an integer count, and an ECMH checksum. It is a cost model for these operations, not a specification of a wire protocol.

Cost in repeated reconciliation

The RIBLT mapping includes an item in coded symbol with probability , so an item enters , about , of the first symbols, and symbol holds about of items: the first symbols are dense. Reconciling a difference of items takes of about symbols [yang-gilad-alizadeh-2024]. Under three assumptions,

  1. weights are expected weights,
  2. every round reconciles the same number of new items, and
  3. each round rebuilds its symbols from the full set,

one round over a set of items costs additions, about . Hashing is per item and its result can be kept, so a set that grows to items by rounds of new items costs hashes in all, but

sum over rounds of n_j k(1.35d), about (N^2 / d) ln(1.35d) additions.

Under this model the number of additions grows quadratically in and the number of hashes linearly: a round performs hashes against additions. Which dominates the elapsed time also depends on their measured unit costs. Decoding adds about subtractions per round, and one equality test per examined symbol, lower order than rebuilding when is much larger than . If instead each party keeps its symbol sums between rounds and adds only new items (assumption 3 dropped), encoding falls to about additions, linear in , with one hash per additions; decoding is then of the same order. Kept hashes and sums are valid only within one namespace: a new beacon value changes the salt, the curve and the mapping, and everything is recomputed.

Comparison with the reference implementations

The Go benchmarks of yangl1996/riblt#3 run at pinned revisions of [riblt-ecmh]: the upstream XOR checksum, the ristretto255 ECMH with the reference 64-bit mapping, and the same with a ChaCha8 mapping. All three are run by nix run .#riblt-go-bench. riblt.stream follows their BenchmarkEncodeAndDecode. The decoder holds items of its own and the common ones, and the encoder holds of its own and the common ones; symbols are 64 bytes, and insertion is outside the timed routine. riblt.encode per item corresponds to BenchmarkSketchAddSymbol at smaller . ristretto255 runs as a family of the RIBLT suites, so that a small curve and the fixed group are measured in one harness.

The implementations differ in ways that affect the comparison:

  • Items are hashed with tagged, salted SHA-256 (two digests for ristretto255), where riblt-ecmh hashes the bare symbol with SHA-512. The upstream XOR checksum is SipHash-2-4 under a fixed key; xor-siphash.64 keys it with the salt.
  • The rateless decoder recovers an item with the addend its purity check prepared; the ristretto255 version of riblt-ecmh hashes the item to the curve again when it recovers it.
  • The ristretto255 addend is the point itself, since curve25519-dalek does not expose its cached form.
  • The Rust default mapping uses xoshiro256++ seeded by the whole 32-byte map digest. Rows marked map=chacha8 use ChaCha8, and map=mcg64 rows use the reference 64-bit generator. The Go ChaCha8 version of riblt-ecmh replaced that generator because two items with equal 64-bit seeds have equal mappings, and the decoder cannot separate them (yangl1996/riblt#3; Known weaknesses). Even Rust’s ChaCha8 comparison uses different output from Go’s ChaCha8Rand, so their cells differ. An unmarked mapping row uses the default of its recorded source revision; historical runs are not relabelled when the default changes.

The checksum work is hashing items to addends, adding addends to cells, checking purity while peeling, and encoding or decoding points. Rows that differ only in the group, in the same Rust harness with the same mapping, workload, batching and build, measure checksum substitution, including the choice of hash and point representation. A time ratio against Go riblt-ecmh also includes the mapping generator, the reuse policies above and the port from Go to Rust; these implementation gains are not attributed to this project. Replacing ChaCha8 with xoshiro256++ is of the same kind: it is chosen to make the checksum’s cost clearer in the end-to-end figures. Matched map=chacha8 rows provide a comparison of the generator’s effect once the new clean runs are measured; historical timings do not quantify this change.

Candidate constructions

ConstructionFieldRepresentation choicesSources
Ordinary binary curves, Extended, unscaled or lambda-projective accumulation; subgroup encodings, by or by Pornin’s [pornin-2022, oliveira-et-al-2013, crrl, pornin-2024]
Binary curves over a quadratic towerDense or subfield (GLS) curve constants; the same accumulators and encodings[galbraith-lin-scott-2009, pornin-2023, oliveira-et-al-2013]
Complete Edwards curves, , or ; , Montgomery affine points, Edwards accumulators, cached addends[bernstein-lange-2007, hisil-et-al-2008, montgomery-1987]
Short Weierstrass curves, The same three fieldsComplete projective or Jacobian accumulation[renes-costello-batina-2016, efd]
Complete twisted Edwards curves, , ; , , or Quotient by the rational 2-torsion subgroup, a construction related to Decaf; canonical 16-byte encoding[bernstein-et-al-2008, hisil-et-al-2008, hamburg-2015, pornin-2024]
ristretto255 (reference), Upstream implementation[rfc9496, bernstein-2006, curve25519-dalek]
secp256k1 (reference), Upstream implementation[certicom-2010, libsecp256k1]

The 107- and 109-bit families give 14-byte encodings. Their nominal rho costs range from to group operations (Security considerations). They show the cost of trading security margin for width. The two 256-bit groups are fixed-curve references at conventional security levels.

Binary Edwards curves [bernstein-lange-farashahi-2008] are excluded on inspected operation counts under equal field arithmetic; they are not implemented or measured. Every ordinary binary curve is birationally equivalent to a complete binary Edwards curve [bernstein-lange-farashahi-2008, Theorem 4.3], so the exclusion is one of cost, not availability. Their complete mixed addition costs , and with the formulas of Kim, Lee and Negre [kim-lee-negre-2014]; the complete unscaled formulas used here [pornin-2022] cost . , and denote a field multiplication, a squaring and a multiplication by a curve constant, counted as a full multiplication for generic dense parameters. Mixed addition is the most frequent operation of the workload (Workload). The binary Edwards formulas with lower operation counts [bernstein-2009] are differential: they compute from , and , as a Montgomery ladder supplies them, and a coded-symbol update adds an independent hashed point with no known difference.

The quadratic extensions fit 16-byte encodings with one-word base arithmetic. Goldilocks [polygon-zero-2022] uses Plonky3’s implementation [plonky3]; its 2-adicity of 32 makes square roots, and so decoding and hashing, slower than over ; the benchmark report’s Goldilocks rows measure the difference. The 31-bit primes of current proof systems, M31 [haboeck-levit-papini-2024] and BabyBear [bruestle-gafni-2023], would need extensions of degree 4 to reach the same group size. Degree-4 extensions admit the heuristic index-calculus asymptotic [gaudry-2009], below the generic , so group size alone does not justify the target security there; these fields are excluded from the comparison.

The variable-curve families hash by try-and-increment [boneh-lynn-shacham-2001]. Alternatives are Elligator 2 [bernstein-et-al-2013] on every Edwards and twisted Edwards family, simplified SWU [rfc9380] on every Weierstrass family, and Pornin’s map [pornin-2023, crrl] on every binary family, each wherever its preconditions hold; curve::h2c tabulates the cells and the reason for each empty one. These are map-level alternatives. A single map is not indifferentiable from a random oracle, which the checksum does not require; the Adversary section states what it does require, and a sufficient condition that is not established for these maps or for try-and-increment. The fixed-curve references use the maps named by their benchmarks. The RIBLT benchmarks hash each family by the construction its run measured cheapest (The RIBLT plan).

Security considerations

Encoded width, group order, and attack cost are distinct quantities. A 128-bit encoding does not imply 128-bit collision resistance. Generic estimates must be read together with extension-field structure, endomorphisms, the parameter selection procedure, and the distribution of the hash map. A discrete-logarithm estimate is not by itself a proof of hardness for every multiset relation problem.

The table gives the nominal cost of rho with the negation map, group operations [pollard-1978, wiener-zuccherato-1998], divided by a further for the GLS automorphism group of order 4 [duursma-gaudry-morain-1999], for the largest prime dividing each family’s group order. The “Families compared” table of each run report computes the same quantity from the recorded by that run’s group suite:

FamilyGroup order of rho cost
Binary, , near 62.8
Binary, , dense constant, near 60.3
Binary, , GLS, near 59.8 (automorphism group of order 4)
Binary, , near 53.8
Weierstrass, , 63.3
Edwards, , 62.3
Twisted Edwards, , ; , or Goldilocks62.8
Weierstrass, , 60.8
Edwards and twisted Edwards, , 59.8
Weierstrass, , 53.3
Edwards, , 52.3

For curves over , index calculus over the extension [gaudry-2009] costs about group operations up to logarithmic factors, the same as rho; the GHS descent for [hankerson-karabina-menezes-2009] likewise gives no gain over rho. Candidates over whose -invariant lies in are excluded as a conservative policy.

The setting is an ephemeral public namespace, with salt and curve derived from a beacon value. It is distinct from a secret-keyed namespace, in which keyed XOR checksums suffice under the adversary assumptions of Keyed and group-based checksums. Conclusions for one setting do not transfer to the other. The implementation provides tagged, salted hashing.

The parameter-selection code and the reference programs state the acceptance conditions for each family. Tests combine field reference computations, independent affine group laws, Sage/PARI fixtures, canonical-encoding checks, signed accumulation, and complete workload checks. Sampled tests are evidence, not proof, and probable-prime tests do not certify primality.

Known weaknesses

Each weakness below is accepted at the reference work factor, stated as an assumption on the application, or left open, as indicated.

Discrete logarithms reduce the checksum to an insecure AdHash. Write for a generator of the prime-order component and for the discrete logarithm of the hash of item , so that its prime-order part is . An adversary who knows for a collection of items converts a relation into the congruence , with a further condition modulo the cofactor, which is at most 4. The checksum is then AdHash [bellare-micciancio-1997] with modulus [maitin-shepard-et-al-2016, Section 8], the group order and not a modulus chosen for AdHash: for the families compared, lies between about and , where AdHash’s security requires thousands of bits (below). The following are leading-order estimates of the resulting attacks:

  • A nonzero relation with coefficients in gives two distinct sets with equal checksums. Wagner’s algorithm [wagner-2002] finds one in about operations on about as many hashed items, to here, for a relation of about terms; list sizes and sorting contribute further factors. A relation with coefficients in and right side the logarithm of a target checksum gives one set with checksum ; with coefficients in it gives two sets whose checksums differ by .
  • Relations with small integer coefficients give the corresponding multiset relations. The estimate of [maitin-shepard-et-al-2016, Appendix B] gives a coefficient vector of Euclidean norm about from items, for a lattice reduction algorithm of Hermite factor constant . With LLL ( about 1.021), this is a heuristically expected norm of 12 to 15 from 59 to 65 items, and so no coefficient larger in magnitude. Such relations are forgeries only where the application admits multiplicities; they are not in general set relations.

For comparison, additive hashes with 128-bit security against Wagner’s algorithm need 2688 bits of output when a relation may have at most terms, and 4160 bits without that bound [mihajloska-gligoroski-samardjiska-2015, Section 4; meyer-2022, Section V-B]. Against lattice reduction on multisets, at the Hermite factor constant of about 1.007 that 128-bit security requires, AdHash needs a modulus of over 400,000 bits [maitin-shepard-et-al-2016, Appendix B]. For an additive fingerprint modulo , where the leading-order estimate above is about operations, Hoyte reports a -dimensional birthday solver that finds collisions in about 28 hours on eight cores, with 60 GB of memory and 1.5 TB of storage [hoyte-2023]. The checksum does not expose the residues modulo that these algorithms need until the logarithms are known. Once they are, the modulus is , at most , and the estimate falls by a factor of to , low enough that a relation among the residues can be found in practice.

In these attacks the cost is dominated by computing the logarithms; this bounds the cost of a forgery from above, not from below. For logarithms in one group, with well below , rho with retained distinguished points costs on the order of times one logarithm [bernstein-lange-2012, Section 1, after Kuhn and Struik]: about times the tabulated cost for the multiset relation above, and to times for Wagner’s algorithm, as order-of-magnitude estimates. Whether lattice methods find set relations from fewer logarithms is not assessed. The attack of yangl1996/riblt#3 on the XOR checksum is the case of this structure in which the relation is found by linear algebra over at negligible cost. The step from a relation to a decoding failure, which depends on the cells the items map to, is not assessed here (Linearity of the checksum).

Generic work factor. The 107- and 109-bit families have rho costs of to , in the lower part of the reference range. Curve-specific precomputation is limited, not excluded, by deriving a curve per beacon value (Precomputation and per-namespace curves).

Weil descent. A curve is reachable by the generalized GHS descent with heuristic probability about per beacon value, and no check excludes it (Parameter selection and verification).

Probable primality. The verifier tests with Miller–Rabin to 24 fixed bases. Composites passing all of them can be constructed, so no error bound holds against a prover who chooses . The conclusion that the group order is the cofactor times is conditional on the primality of .

Pairing reductions. The embedding degree of is checked to exceed , which excludes the reductions of Menezes–Okamoto–Vanstone and Frey–Rück to that bound; the degree is not otherwise determined. The check, a baby-step giant-step search for , takes about products modulo , which the curve-generation benchmarks time alone (curvegen/embedding). Anomalous curves, of order , are rejected.

Hash to curve. Items are hashed with tagged, salted SHA-256 and a counter (hash). A deterministic map takes one 128-bit half of the first digest (hash_to_curve_map1) or sums the images of both halves (hash_to_curve_map2); try-and-increment takes the two halves of each digest in order and increments the counter when both fail. The reduction of a candidate to the field and the sign convention are defined per map. No RFC 9380 hash-to-curve suite is implemented. Uniformity on the group is not required (Adversary), but the weak-encoding hypotheses of the reduction of [maitin-shepard-et-al-2016] are not established for these maps.

Mapping-seed collisions in the RIBLT. This weakness belongs to the RIBLT’s mapping, not to the checksum, and lies outside the research question; it is stated because the RIBLT comparison rows use both mappings. The cells an item maps to are determined by its digest under the mapping tag (riblt), through the gap law of the reference implementation [yang-gilad-alizadeh-2024]. Two items whose generators start in the same state map to the same cells in the same order for every prefix of the coded symbols. If both lie in the symmetric difference, every cell they map to holds both: after the other items are peeled, its count is even and its checksum is the sum or difference of their two points, so no cell containing them becomes pure and neither item is recovered, unless a checksum collision or false singleton occurs independently. A finite peel returns failure; a rateless decoder that requests coded symbols until decoding succeeds does not terminate. No checksum collision is required, and the group’s work factor does not enter. The reference implementation seeds a 64-bit multiplicative generator with the item’s 64-bit hash. If the mapping input is public, two items with equal seeds are found by a birthday search over about digests, below the rho cost of every curve family compared, and an item sharing a chosen item’s seed costs about . Between honest items, a coincidence has probability about for items in the difference. Buchanan’s implementation [riblt-ecmh] replaces the generator with ChaCha8, citing this case (yangl1996/riblt#3, comment of 2026-02-24). The implemented default seeds xoshiro256++ with the whole 256-bit map digest. Its state is the digest itself, so equal generator states require equal digests, at a cost of about for a pair, with one exception in : the all-zero digest is reseeded from SplitMix64 and shares a state with the one digest that encodes that state. Since the generator runs through its nonzero states in one cycle, distinct states yield distinct sample streams; whether two streams place their items in the same cells of a given table is the gap recurrence’s matter, as for any generator. The generator need not be cryptographic: the digest is already a salted hash, and the mapping is public. The gap law is unchanged, and ChaCha8 (ChaCha8) and the 64-bit generator (Mcg64) remain as comparisons. Nor does the seed need 256 bits: a 128-bit seed puts equal seeds at about identifiers after the salt. Riblt::projected seeds the generator with the whole projection of the item’s identifier under keys of the mapping’s own (Adversary), in a field chosen for its cost apart from the checksum’s. Its halves are a linear map of the identifier’s halves under two keys, invertible unless a key is zero or the two are equal, so equal seeds require equal identifiers; under , whose halves are truncated to 128 bits, they require a coincidence of 256 bits. Either costs about . The projection’s cost is benched, but it is not the default. The mapping need not depend only on the public salt of the checksum: a schedule keyed by a secret shared between the peers prevents a third party from searching offline for equal seeds, even with a 64-bit generator, while the checksum’s namespace remains public. The coincidence between honest items is unchanged by the key, since it does not depend on who can compute seeds. Schedules that agree only on a prefix delay a rateless decoder without stalling it; that delay, and any other a third party induces through the schedule, concerns the sketch rather than its checksum and is not assessed (Questions outside this study).

Side channels. Hashing, field inversion, and batched inversion run in variable time. This is acceptable only because the hashed items are public in the setting considered (Adversary); the code is unsuitable for secret inputs. Power and electromagnetic leakage are not considered.

Assumptions on the application. The beacon value is assumed unpredictable until the epoch begins; withholding, delay, and grinding by its producer, whose cost Bonneau, Clark and Goldfeder bound for block hashes [bonneau-clark-goldfeder-2015], are outside this study (Questions outside this study). A checksum collision causes a decoding error within one namespace. The protocol is assumed to validate the items it obtains independently, so that such an error, or a curve whose discrete logarithms are computed, is a failure of liveness until the next beacon value selects a new curve (Setting and reference work factor); recovery is left to the protocol.

Measurement methodology

The benchmarks report operation latency, throughput with independent accumulators, and batch costs. Batch size and representation conversion are part of the workload. A component estimate such as

hash + prepare + k * add

where is the number of coded symbols an item maps to, is a sum of separately measured operations. The RIBLT workload measures complete executions for comparison.

The benchmark report opens with a decision table. For each family it gives the nominal rho of Security considerations; the measured cost of addition, of hashing and preparation, and of encoding and decoding; the two estimates of Cost in repeated reconciliation at and ; and the cost of curve selection. One family dominates another if its rho is at least as large and, for each of the four operations, it either reads the same measurement or is faster beyond both confidence intervals, and it is faster on at least one. Families that no other dominates are not thereby ranked against each other.

Code-generation inspection identifies implementation effects. Static instruction counts are not timings. Binary-field performance depends on the build’s carry-less multiplication: without PMULL or PCLMULQDQ the field product falls back to a portable routine, and the binary families’ measurements do not carry over to such a build. bench-bins-generic measures that backend. Each result is bound to its source revision, compiler, target features, machine, and measurement method. The code-generation report records observations for the revisions and configurations it names.

With Nix installed, the checks run from the repository root:

nix flake check

The book builds with:

nix build .#site

A group and reconciliation measurement run:

nix run .#bench-run -- group riblt

Each run is identified by a fresh UUIDv7, which sorts by start time and needs no coordination between machines. The executables come from a Nix derivation built for a named target CPU: bench-bins is the architecture’s default (apple-m4 on aarch64, x86-64-v3 with PCLMULQDQ on x86_64), and bench-bins-generic is the baseline without carry-less multiplication. BENCH_BINS selects another such build. The runner refuses executables that need a feature the host lacks, times the suites serially, and records metadata and raw Criterion output under bench-runs/<id>/, together with a report. Other builds and measurements should not run during timing. To show whether they did, the runner samples the load averages every 5 seconds, the interval at which the kernel updates them, into load.tsv, beginning and ending with 30 seconds idle that measure the machine’s own load; the report gives each phase’s mean and recovers the threads runnable from successive 1-minute averages where the kernel does not report them.

The Go benchmarks of the reference implementations run separately (Comparison with the reference implementations):

nix run .#riblt-go-bench

A report can be regenerated from an existing run whose benchmark identifiers the reporter recognizes; runs recorded under an earlier schema need the reporter of their revision:

nix run .#bench-report -- bench-runs/ID report-output

Published runs are kept in the repository in a compact form, one directory results/<id>/ per run. benchmarks.csv has one row per benchmark: Criterion’s group, function and parameter, the estimate the report reads (the slope where Criterion fits one, otherwise the mean), its 95% confidence interval, and the declared throughput. meta.json is the run’s metadata without the host name, curvegen.csv, present when the run timed curve selection, the searches per seed, and load.tsv the load samples. Criterion’s output, the figures and the report are not kept; the classification into layers, families and operations is not stored either, and is applied by the reporter of the revision that renders the run. Only a run of a committed source is exported, since no published revision reproduces one with uncommitted edits. Each run is exported into its own directory under results/, which must not exist yet:

nix run .#bench-report -- --export bench-runs/ID results/ID

The reporter renders the directory as it renders the run’s Criterion output, to the same tables and figures, except that only the default estimate is available. The site build renders each run under results/ as a chapter of the book’s evidence, whose first paragraph states the commit, machine, build and start time recorded in meta.json.

The group plan

The group suite times each family in two passes. The first times what the insertion model and the RIBLT plan read: hashing, preparation, encoding and decoding in batches of 1024, addition, negation, the identity test, and equality on impure cells. The second times, for the families the first pass singles out, batches of 8 and 64, subtraction, equality on pure cells, and the hash of 32-byte IDs to addends under salted SHA-256 and under each projection (Adversary). A family is singled out when its modeled insertion at (below) is within 50% of the least of any family; if none of these is over a field of odd characteristic, the cheapest such family is added as a contrast. The plan is recorded in group-plan.tsv and meta.json; GROUP_PLAN reuses another run’s.

The RIBLT plan

The RIBLT suite times a family under one hash construction and at a scope chosen from the group operations of the same run, which the suites before it time. For each family, the construction is the one whose modeled insertion, hash + prepare + k * add or a fused hash to the addend, costs least at among the constructions the RIBLT benchmarks implement for it. The scope follows that cost’s ratio to the least of any family: within 15% every sweep, within 50% a reduced sweep of each axis’s endpoints and middle, and otherwise a single point of each benchmark. A new construction therefore enters the RIBLT measurements through its group benchmark, without a change of any family’s default hash. A family timed beyond a single point also gets the field whose projection hashes its IDs to the addend cheapest under its construction, and its encoding and peeling are timed again, at the reduced sweep’s points, with cells keyed by IDs under that projection. Their mappings are seeded by the projection that digests IDs cheapest, which does not depend on the family; the RIBLT suite times its mapping rows first to choose it. The XOR checksums and ristretto255 reproduce the Go reference implementations and are timed in full regardless. The plan is recorded in riblt-plan.tsv and meta.json; RIBLT_PLAN reuses another run’s.

Reading a run report

Values are Criterion’s estimate and 95% confidence interval, per element where the benchmark declares an element count and otherwise per iteration. A table colours each value by its ratio to its column’s minimum on matplotlib’s inferno scale, from pale yellow at the minimum to purple at 16 times or more. The minimum is bold when no other interval overlaps its own; otherwise the values that overlap it are tied, in italics. Overlap leaves an order unresolved. A tag after a row’s name marks work unlike the rest of its column: addition formulas that are not complete (they branch on the identity and on doubling), or a term another suite timed. The XOR baseline is excluded from column minima. Tooltips name the benchmark each value reads.

A modeled cost sums separately measured operations, and its interval combines their half-widths in quadrature; it has no independently measured coverage, and neither has a range over curve-selection seeds, which spans their point estimates. The insertion model uses of Workload and compatible representations: a recipe either hashes, prepares the hash’s output, and adds the prepared addend, or hashes straight to the addend and skips the preparation. Pornin’s map returns the extended binary addend, and its variants to and the λ and addends; Elligator 2 and SSWU return affine points, which the measured preparation takes. Preparation and addition are timed on try-and-increment inputs, so a recipe with another map is a model, not an end-to-end measurement. Every recipe also adds the salted map digest and the walk of the mapping’s indices below , timed alone by riblt.mapping and the same for every family, which is why the model’s ratios between families are smaller than those of their hashes and additions. The model omits cell allocation, the key XOR and the counts; the measured RIBLT encoding includes them.

Preparation occurs once per source item, addition once per cell update, and subtraction negates an addend before adding it. Encoding and decoding occur per transmitted and received cell. Throughput runs eight independent accumulators, latency one dependent chain. A batched operation reports time per element at its batch size, 1024 unless a sweep states another. Batch inversion (Montgomery’s trick) replaces inversions with one and multiplications; binary hashing shares them across the pending candidates of each round, and preparation, normalization and decoding where the representation needs an inversion. The prime-field hashes are bound by a square root per item, which batching does not share. An encoder can batch all its source items, a decoder only the cells of the current peeling wave. The binary w-codec families hash to reusable addends, so their preparation is a copy.

Costs by lifetime

An insertion into cells keyed by IDs is reported by how long each of its terms remains valid. The ID, an item’s SHA-256, is computed once and outlives every salt. Once per salt, a curve is accepted and each hash’s keys are derived. Once per salt and item, the ID is hashed to the addend and to the mapping’s seed, and the seed’s indices are walked below . Once per cell update an addend is added, and once per transmitted cell a sum is encoded and decoded. Each term is given under salted SHA-256 of the ID and under the projections, followed by two measured encodings: by salted SHA-256 of the items themselves, and by projections of IDs computed before the timed routine. A per-salt term is amortized over the items inserted under that salt, a number the benchmarks do not fix.

Contributing a run

A run on another machine is added to results/ by pull request. The runner records the commit of the checkout it runs in, and only a run of a committed source is exported, so the run happens in a clean clone of a published commit:

git clone https://github.com/nothingmuch/ephemeral-ecmh
cd ephemeral-ecmh
nix build --no-link .#bench-bins
nix run .#bench-run -- --profile full

The run’s directory, bench-runs/ID, is named by its UUIDv7; the report describes the machine and build from meta.json. Building beforehand keeps compilation out of the timed window. The full profile (3 s warm-up, 5 s measurement and 100 samples per benchmark) takes several hours over all suites; runs under the default quick profile are preliminary. On x86_64 the native build needs AVX2 and PCLMULQDQ; BENCH_BINS and suite arguments select another build or a subset, as above. The run is then exported:

nix run .#bench-report -- --export bench-runs/ID results/ID

The Go benchmarks of the reference implementations, timed on the same machine, can accompany the run as results/ID/riblt-go.txt, which the reporter does not read:

nix run .#riblt-go-bench | tee results/ID/riblt-go.txt

The export is committed on a branch, whose pull request adds only results/ID/:

git switch -c runs/ID
git add results/ID
git commit -m "runs: ID"

Field and curve code generation

This report examines optimized field arithmetic and curve operations for implementation effects that could confound the ECMH and RIBLT comparison. It records observations from the source revision and target configurations below. Instruction counts identify code for inspection; they do not measure execution time or establish a ranking of fields. Branch counts are static branch sites, not executed branches. Native timing evidence is reported separately in the benchmark results.

Run:

  • nix run .#asm-report at 2d6c7e3c (rustc 1.98.1, LLVM 22.1.8, release profile, --features asm-probes).
  • 24 configurations × 239 probes. Each probe is an #[inline(never)] wrapper in src/asm_probes.rs around one field operation, or one group add, sub, equals, prepare or decode, for each of 29 group representations.
  • “Closure” is the probe plus every crate-local function it reaches. Calls out of the crate are listed but not counted: crrl’s set_invert, Plonky3’s try_inverse, the allocator. Merged functions are reported as aliases.
  • The listings, meta.json, summary.md and probes.tsv are archived outside the repository, in ephemeral-ecmh-archive/asm-runs/matrix-20261003.
  • nix build .#asm-listings builds the same matrix from the flake source and records the source revision in place of the host and date. A listing at any revision can therefore be rebuilt without the archive.
  • Probe and row names use the benchmark report’s family identifiers: the curve model (binary, weier, edwards, twisted) followed by the field, 127 for or for with , 61x2 for with , goldilocks2 for over the Goldilocks prime, and so on. Candidate constructions describes each family. All counts are of static instructions.

Interpretation

The inspected instruction sequences are consistent with the stated arithmetic counts. The following implementation and target effects qualify the corresponding measurements. This inspection does not establish that each implementation is optimal, or that the measured ordering generalizes to other processors.

findingrows affectedstatus
Binary fields get carry-less multiply only from build flagsevery row off the carry-less targetsthe binary-field timings hold only for builds with PMULL/PCLMULQDQ; bench-bins-generic measures the other backend
The single-item Edwards prepare performs an inversiongroup/*/prepare for edwards127/107/61x2intended; the comparison uses the batched rows

Other observations explained by the inspected code:

  • The unscaled binary form has the fewest carry-less products per add and the most per equality test (§4).
  • ’s multiply needs more carry-less products than ’s, from its representation (§3).
  • fp127’s short sqrt is a loop (§6).
  • The Goldilocks panic stubs are unreachable bounds checks, and the Goldilocks² add’s branches are upstream’s rare-carry paths (§5, §6).
  • The merged adds follow from the formulas (§4).

1. Binary-field backend selection

configurationPMULL/PCLMULQDQ in gf2_127::mulbinary127::add closure
Apple, every model, default (apple-m1) included4239
Apple generic04707
Android default, cortex-x404707, 3324
Android cortex-{a55,a78,a720,x4,x925}+aes, oryon-14243–255
x86-64 default, v3, v405951, 5885, 5176
x86-64 v3+pclmulqdq4225
znver4, znver5, sapphirerapids, arrowlake4193–225
  • Android: In the inspected LLVM configurations, the Cortex models leave out the optional crypto extension. Without it, the binary-field implementations compile to their portable backends, carry-less products from integer multiplications of masked operands (crrl’s gfb254_m64 for , soft.rs for and ): 13 to 19 times the instruction count. Among the inspected Android models, only oryon-1 enables it by default. A deployment using the carry-less backend must establish hardware support and enable +aes, either as a baseline requirement or through runtime detection and dispatch.
  • x86-64: none of the distribution baselines (v1–v4) includes PCLMULQDQ. Adding +pclmulqdq alone to v3 changes only the binary-field probes: the multiplies use PCLMULQDQ with the counts of the named cores, and binary127::add falls from 5885 to 225 instructions. The feature, not the CPU model, selects the backend.
  • Benchmarks: bench-bins compiles for apple-m4 and for x86-64-v3+pclmulqdq, bench-bins-generic for generic and x86-64; all four are in this matrix. A portable build uses the path of the last two.

For comparison, edwards127::add is 361–370 on every Android model, 362 on M4 and 524 on Zen 4. These are code sizes on two different paths, not speeds.

2. Apple: the configurations compiled are byte-identical through M4

Compiled: aarch64-apple-darwin at default (apple-m1), apple-a14, a15, a16, a17, m4 and m5, and generic. No iOS target was built: the A-series models were compiled for macOS. These are compiler-tuning probes, not iOS ABI coverage or phone measurements.

  • default through apple-m4: the whole listings are byte-identical.
  • apple-m5: 14 of the 239 probe closures differ: the binary127 equals in every representation, and the decode, equals or prepare of the Edwards and Weierstrass families. In each, LLVM uses umin/umax where the others use cmp + cset/csel, with the neighboring instructions rescheduled.
  • generic: no crypto extension, so the binary fields take the portable path (binary127::add 4707, as on Android default). The CPU model also changes the prime-curve code: 149 probes differ from apple-m4 in their closure metrics, among them the Edwards, and Jacobian adds, by a few percent (edwards127::add 373 against 362). The generic benchmark subset therefore carries prime-field control rows.

Identical code removes the need to review each configuration’s code separately, not the need to measure each machine.

3. Multiplies per binary field (M4; PCLMULQDQ counts on x86 are the same)

fieldPMULL per mul / squarewhere the products gomul closure
, crrl4 / 2schoolbook ; the trinomial folds with shifts21
, local6 / 44 products; two PMULL folds (pentanomial, elements kept unreduced in 128 bits)23
tower, local7 / 63 Karatsuba products; 2 folds per half, paired in one vector30
, local3 / 31 product, 2 folds15
  • The code matches src/field/gf2_122/pmull.rs. The standalone probe uses 4 instructions to materialize the reduction constant; the inspected inlined callers hoist them.
  • Critical path: ’s is three dependent PMULLs (product, then two folds); ’s is one PMULL plus shifts.
  • Per extended point add: 44 PMULLs over , 68 over , 82 over . Pentanomial reduction requires more PMULL instructions than Karatsuba saves in the multiplication step.

These counts arise from this representation and reduction schedule; they do not establish a lower bound for arithmetic in the field, and they are not timings.

4. Binary fields and representations: against , dense against GLS over

and both hold an element in two 64-bit words and differ in the modulus. Degree 109 has no irreducible trinomial, so the pentanomial folds with two PMULLs where the trinomial folds with shifts (§3), and its is dense, so a square root costs a multiplication where costs two shifts. The PMULL counts do not order the timings: in the M4 native run at 7d4c6aa1 the add, at 68 PMULLs against 44, took 12.8 against 14.6 ns at throughput, while its square root took 2.89 against 1.26 ns.

PMULLs per operation’s closure, M4 (x86 carry-less targets equal):

operationcoordinates GLS
addextended44688280
add (and encoding)46749393
addunscaled32506161
equalsextended8121414
equals (and encoding)4677
equalsunscaled12182121
prepareextended10162018
prepare encoding, unscaled0000
  • Formulas: the add counts equal the formulas’ costs at the per-field counts of §3: extended (Pornin’s complete addition) , unscaled (the same formula with cancelled) . Equality is in coordinates, extended and unscaled, which compares with ().
  • Unscaled: the fewest products per add and the most per equality test. RIBLT adds once per item and cell (the cost model’s adds per item); equality tests are paid per difference during peeling, which the decision model leaves out. The counts therefore point toward the unscaled form for this workload; the timing rows decide.
  • Prepare: the encoding and unscaled addends are the decoded affine point itself, so preparation is a copy (3–6 instructions). The form’s prepare computes : one inversion (crrl’s set_invert, uncounted, over ; 170–220 PMULLs in the crate over and ).
  • Merged: rustc merges binary122_lambda::add, sub and equals (Curve<Gf>) with the binary122_gls_w ones (Curve<Gf61>). Curve<K> selects the representation of and its derived constants and ; mixed addition uses none of them, so identical code is expected.
  • GLS: only the extended add and prepare differ, by the multiplication by : 82 versus 80 PMULLs, 20 versus 18. These counts do not imply a corresponding speedup; the GLS endomorphism concerns scalar multiplication, outside the primary RIBLT workload.

5. Point adds: branches and stack

Static counts over the add’s closure; ranges are over the configurations of each architecture.

  • Branches:
    • Extended and unscaled binary adds, and the Edwards and adds over fp127, fp107, for and , are branch-free.
    • adds have 4–5 branches: and the identity, exceptional cases of the formulas.
    • Weierstrass projective adds (Renes–Costello–Batina) have one branch, the test for an addend, which has no affine representation (two over fp107 and on x86 over ). Jacobian adds have 4–7 and include the inlined doubling (746–880 instructions on M4, against 528–670 for the complete projective form), so only timings can compare them.
    • twisted128’s add has 4 branches on M4, from fp128’s carry handling, which its source documents as variable-time; its inputs are public.
    • twisted-goldilocks2’s add has 61 branch sites on aarch64 and 20 on x86. They are Plonky3’s Goldilocks reductions, which branch on carries and borrows that upstream marks rare (branch_hint). They are not exceptional cases of the point formulas, and a static count does not say how often they are taken.
  • Stack:
    • The binary addition probes on carry-less targets have at most two stack accesses (on aarch64, none outside the adds; on x86, a push and pop of one callee-saved register); their field elements use vector registers. The portable path spills: 111–767 accesses on x86 without PCLMULQDQ.
    • The prime-curve additions spill on x86: 34–110 stack accesses, against 8–31 on aarch64 apart from weier61x2 (22–55). Register pressure from the multi-limb representations is a platform-dependent implementation effect in this comparison.

6. Prime fields and extensions

  • Multiplication: the M4 prime multiply rows have no calls out of the crate. Their reduction sequences differ; counts alone do not determine which field is faster.
  • fp127 sqrt: the 71-instruction body includes a loop initialized to 125. The 26× difference in static closure size relative to fp128 (1878) does not give the ratio of executed instructions or timings.
  • Goldilocks:
    • Inversion is an external call to Plonky3’s try_inverse, so closure counts omit its body.
    • The base field’s and Goldilocks²’s panic_bounds_check paths come from the upstream Tonelli–Shanks table indexing, which Goldilocks²’s square root reaches through the base field’s. The source establishes i < m <= 32, so they are unreachable, not a runtime cost.
  • Extensions: for and , and Goldilocks², each carry an Edwards or group and, for , a Weierstrass group; their decode closures (1.1–1.6k on M4) include the square root in .

7. Hash-to-curve side

  • prepare:
    • Preparation for the variants whose affine representation is already the addend consists of copying it: 3–6 instructions (binary encoding and unscaled, Weierstrass).
    • For extended binary forms it costs 73–100 on M4 (computing ).
    • For Edwards, the single-item probe is 1.7–3.6k instructions and allocates. It delegates to to_cached_batch on one item. The inversion is intrinsic to the coordinate conversion (the affine is the Montgomery point); the Vec is an implementation choice. RIBLT’s encode and batched peel use prepare_batch, which amortizes the inversion.
  • decode:
    • ’s is 193–274 with PMULL; its inversion is crrl’s set_invert, uncounted here.
    • ’s and ’s are 640–950 on carry-less targets, all in the crate (half-trace and inversion). On x86 without PCLMULQDQ they are 1900–2210 and 1340–1490.

8. Coverage limitations

  • The inspected matrix has no probes for sqrt_ratio or the whole hash-to-addend batch path.
  • No iOS targets, and no measured phones: core-model names do not identify a Snapdragon or Dimensity device.
  • Out-of-crate callees are not counted (Run, above).

Summary across runs

Each run’s measurements stay separate; boxes span recorded 95% intervals, with a line at the estimate, read as in Reading a run report. The displayed measurements keep their benchmark identifiers.

Coverage: Apple M4 · generic · full · ef9e82d3 appears in Insertion, Scaling, Batching, Native and generic builds, Hash to curve, Insertion cost model, Curve selection time, Cost per item with selection. Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3 appears in Insertion, Scaling, Batching, Hash to curve, Insertion cost model, Curve selection, Curve selection time, Cost per item with selection. Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3 appears in Insertion, Scaling, Batching, Hash to curve, Insertion cost model, Curve selection time, Cost per item with selection.

  • Apple M4 · apple-m4 · full · ef9e82d3: The run started 2026-10-08T02:49:59Z 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=apple-m4, in the full profile.

  • Apple M4 · generic · full · ef9e82d3: The run 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.

  • Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3: The run started 2026-10-08T18:42:23Z on Intel(R) Xeon(R) W-1390P @ 3.50GHz (?, x86_64) and timed commit ef9e82d39fbf06c605e1740360370f0003dc4ca4, built by rustc 1.98.1 (48a229cea 2026-09-01) with RUSTFLAGS -C target-cpu=x86-64-v3 -C target-feature=+pclmulqdq, in the full profile.

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

Insertion

Box plot of measured RIBLT encoding time per item by family and run, on a log scale, with XOR as a dashed reference.Box plot of measured RIBLT encoding time per item by family and run, on a log scale, with XOR as a dashed reference.

RIBLT encoding per item: items into a sketch of cells, the coded symbols that decode differences, under each family’s cheapest measured hash; each run’s three fastest curves, those whose intervals overlap the third, and the representative families, ristretto255 among them. The first row is the insecure XOR baseline, SHA-256 digests XORed into 32-byte cells; the dashed line carries its estimate across the families.

Apple M4 · apple-m4 · full · ef9e82d3: binary 109-u 281.8 ns (281.4–282.2); binary 127-u 287.6 ns (287.0–288.1); binary 109-w 302.2 ns (301.6–302.8). The first two recorded intervals are separated. The third estimate takes 7.2% more time than the first. Also overlapping the third interval: binary 109 λ.

Apple M4 · generic · full · ef9e82d3: edwards127 1415.2 ns (1412.4–1418.1); weier127-jacobian 1562.7 ns (1559.9–1565.6); weier127 1683.2 ns (1679.6–1686.8). The first two recorded intervals are separated. The third estimate takes 18.9% more time than the first.

Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3: binary 127-u 414.3 ns (413.8–414.9); binary 109-u 422.3 ns (421.7–422.9); binary 122 GLS-u 432.0 ns (431.1–432.9). The first two recorded intervals are separated. The third estimate takes 4.3% more time than the first.

Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3: edwards127 1879.9 ns (1873.4–1887.5); weier127-jacobian 2034.9 ns (2030.2–2039.9); weier127 2235.7 ns (2227.7–2245.0). The first two recorded intervals are separated. The third estimate takes 18.9% more time than the first.

Coverage: Apple M4 · apple-m4 · full · ef9e82d3: 12 displayed curves of 32 measured rows (including baselines); Apple M4 · generic · full · ef9e82d3: 11 displayed curves of 21 measured rows (including baselines); Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3: 12 displayed curves of 32 measured rows (including baselines); Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3: 11 displayed curves of 21 measured rows (including baselines).

Scaling

Line graphs on log axes of measured time per item or difference against the number of cells, the number of differences and the hash batch size, a line per family, map and run, intervals as bands.Line graphs on log axes of measured time per item or difference against the number of cells, the number of differences and the hash batch size, a line per family, map and run, intervals as bands.

Encoding per item against the sketch’s cells , items; peeling per difference against the set difference , in a sketch of cells with the prefilter and batched hashes; hashing per item against the batch size, try-and-increment filled and the comparison maps open; the hashes of ristretto255 and of the XOR baseline, a SHA-256 digest, have no batched form and are a single mark at batch size 1. Bands are recorded intervals; line style tells the runs apart.

Batching

Paired hollow and filled boxes compare individual and batched hashing times for each family and run on a log scale.Paired hollow and filled boxes compare individual and batched hashing times for each family and run on a log scale.

Hashing per item by construction, one item at a time and in batches of 1024; a grey line joins a construction’s two estimates. Batching shares the field inversion; the prime-field hashes are bound by a square root per item, which it does not share. ristretto255’s hash and the XOR baseline’s SHA-256 digest have no batched form: each is a single hollow box, labelled one at a time only. The table gives the time saved, .

RunFamilyHashBatch time change
Apple M4 · apple-m4 · full · ef9e82d3xor (baseline)SHA-256 digest, no curveindividual only; the digest is timed one at a time
Apple M4 · apple-m4 · full · ef9e82d3binary 109try-and-increment90.6% saved
Apple M4 · apple-m4 · full · ef9e82d3binary 109Pornin’s map88.6% saved
Apple M4 · apple-m4 · full · ef9e82d3binary 127try-and-increment90.6% saved
Apple M4 · apple-m4 · full · ef9e82d3binary 127Pornin’s map87.3% saved
Apple M4 · apple-m4 · full · ef9e82d3binary 122 GLStry-and-increment86.0% saved
Apple M4 · apple-m4 · full · ef9e82d3binary 122 GLSPornin’s map83.2% saved
Apple M4 · apple-m4 · full · ef9e82d3edwards127try-and-increment0.0% more time
Apple M4 · apple-m4 · full · ef9e82d3edwards127Elligator 2only one mode measured
Apple M4 · apple-m4 · full · ef9e82d3weier127try-and-increment0.9% more time
Apple M4 · apple-m4 · full · ef9e82d3weier127simplified SWUonly one mode measured
Apple M4 · apple-m4 · full · ef9e82d3ristretto255upstream mapindividual only; comparison harness has no batched entrypoint
Apple M4 · apple-m4 · full · ef9e82d3secp256k1upstream mapindividual only; comparison harness has no batched entrypoint
Apple M4 · generic · full · ef9e82d3binary 109try-and-increment91.2% saved
Apple M4 · generic · full · ef9e82d3binary 109Pornin’s map81.3% saved
Apple M4 · generic · full · ef9e82d3binary 127try-and-increment78.0% saved
Apple M4 · generic · full · ef9e82d3binary 127Pornin’s map62.6% saved
Apple M4 · generic · full · ef9e82d3binary 122 GLStry-and-increment74.4% saved
Apple M4 · generic · full · ef9e82d3binary 122 GLSPornin’s map52.7% saved
Apple M4 · generic · full · ef9e82d3edwards127try-and-increment0.1% saved
Apple M4 · generic · full · ef9e82d3edwards127Elligator 2only one mode measured
Apple M4 · generic · full · ef9e82d3weier127try-and-increment0.1% saved
Apple M4 · generic · full · ef9e82d3weier127simplified SWUonly one mode measured
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3xor (baseline)SHA-256 digest, no curveindividual only; the digest is timed one at a time
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3binary 109try-and-increment89.2% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3binary 109Pornin’s map83.2% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3binary 127try-and-increment69.2% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3binary 127Pornin’s map60.0% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3binary 122 GLStry-and-increment83.3% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3binary 122 GLSPornin’s map74.3% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3edwards127try-and-increment1.1% more time
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3edwards127Elligator 2only one mode measured
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3weier127try-and-increment0.4% more time
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3weier127simplified SWUonly one mode measured
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3ristretto255upstream mapindividual only; comparison harness has no batched entrypoint
Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3secp256k1upstream mapindividual only; comparison harness has no batched entrypoint
Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3binary 109try-and-increment91.1% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3binary 109Pornin’s map80.0% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3binary 127try-and-increment73.2% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3binary 127Pornin’s map53.0% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3binary 122 GLStry-and-increment64.0% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3binary 122 GLSPornin’s map41.3% saved
Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3edwards127try-and-increment0.5% more time
Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3edwards127Elligator 2only one mode measured
Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3weier127try-and-increment0.6% more time
Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3weier127simplified SWUonly one mode measured

Native and generic builds

Box plot of generic-to-native time ratios for matched operations, with a dashed parity line.Box plot of generic-to-native time ratios for matched operations, with a dashed parity line.

Generic over native time for benchmarks matched on one CPU, source and compiler; the dashed line is parity, boxes the propagated ranges. ristretto255’s point addition and the XOR baseline’s addition of 32-byte digests, both at throughput, are matched as references where both runs timed them.

Matched group models in Apple M4 · generic · full · ef9e82d3: edwards127, binary 109, binary 109 λ, binary 109-u, binary 109-w, binary 122 GLS, binary 122 GLS λ, binary 122 GLS-u, binary 122 GLS-w, binary 127, binary 127 λ, binary 127-u, binary 127-w. Other models need corresponding generic measurements.

Hash to curve

Box plot of measured hash-to-curve time per item for each family and map construction, hollow boxes one item at a time and filled boxes in batches of 1024, on a log scale.Box plot of measured hash-to-curve time per item for each family and map construction, hollow boxes one item at a time and filled boxes in batches of 1024, on a log scale.

Hashing per item by construction for the representative families, one item at a time and in batches of 1024; a grey line joins a construction’s two estimates. Constructions differ in the representation they return, as the benchmark identifiers in the data state. The XOR baseline’s row is its SHA-256 digest, which maps to no curve, and the dashed line carries its estimate across the families; ristretto255’s and secp256k1’s hashes are their libraries’ maps, timed one at a time only.

Insertion cost model

Stacked bars split modeled insertion work into hashing plus preparation and lighter addition work; whiskers show propagated ranges and ticks mark measured insertion.Stacked bars split modeled insertion work into hashing plus preparation and lighter addition work; whiskers show propagated ranges and ticks mark measured insertion.

Modeled insertion per item under each family’s cheapest compatible recipe, a fused hash to the addend counting as hash and prepare, and additions at throughput. A sketch of cells, the coded symbols that decode differences, maps an item to cells on average (Workload). The measured insertion includes what the model omits. ristretto255 and the XOR baseline have no batched hash: they hash one item at a time and add the hash output as is, with nothing to prepare. The XOR baseline is absent from Apple M4 · generic · full · ef9e82d3, Intel(R) Xeon(R) W-1390P @ 3.50GHz · generic · full · ef9e82d3: its addition was not timed at throughput, with eight accumulators, there. The time axis is logarithmic, as the totals span more than a factor of ten: a segment’s boundaries read as cumulative times, its length not as its share.

Curve selection

Log-log curves show selection-stage work relative to measured insertion work as item volume grows, with observed seed ranges and dashed partial stages.Log-log curves show selection-stage work relative to measured insertion work as item volume grows, with observed seed ranges and dashed partial stages.

Selection work per salt as a percentage of the insertion work it is amortised over, , against the items inserted per salt, with the measured insertion per item ( items into a sketch of cells, as in Insertion). The band spans the seeds, the fastest thick and the slowest thin; dashed curves are partial stages, lower bounds on . Normalised by each family’s own , the figure reads as the volume that amortises selection, but it credits a family that is slow to insert with a smaller ratio for the same ; the next two figures give and the cost per item in absolute time. The baselines, XOR and ristretto255, select no curve: their ratio is zero, which a log axis cannot show, and they appear in the absolute figures.

Curve selection time

Box plot on a log scale of each curve selection stage's time per salt by family and run, a tick at each seed's estimate and a band across the seeds, with rows stating that the baselines select no curve.Box plot on a log scale of each curve selection stage's time per salt by family and run, a tick at each seed's estimate and a band across the seeds, with rows stating that the baselines select no curve.

The time per salt of each selection stage, on a log scale: a tick at each seed’s estimate, or at the single candidate fixture of a point count, and a band from the fastest seed to the slowest; dashed marks are partial stages, lower bounds on . Unlike the ratio above, these times compare across families whatever their insertion cost. XOR has no curve and ristretto255 is a fixed group: neither selects a curve, as their rows state.

Cost per item with selection

Log-log curves show insertion plus amortised selection time per item as item volume grows, with observed seed ranges, dashed partial stages, and the baselines' insertion as flat dotted lines.Log-log curves show insertion plus amortised selection time per item as item volume grows, with observed seed ranges, dashed partial stages, and the baselines' insertion as flat dotted lines.

Insertion and amortised selection per item, , against the items inserted per salt, with the measured insertion per item ( items into a sketch of cells) and the selection time per salt above. As grows each curve falls to its family’s . The band spans the seeds, the fastest thick and the slowest thin; dashed curves are partial stages, lower bounds on . The dotted flat lines are the insertion of the baselines, XOR and ristretto255, which select no curve, so that is their whole cost per item.

Benchmark run Apple M4 · apple-m4 · full · ef9e82d3

Run Apple M4 · apple-m4 · full · ef9e82d3 started 2026-10-08T02:49:59Z 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=apple-m4, in the full profile.

1523 benchmarks from run Apple M4 · apple-m4 · 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 84 to 100% of each rebuilt estimate.

curvesecurityper cellper new itemper party and roundcurve selectiondominated by
rhoaddencodedecodehash + preparesums retained, sums rebuilt, , findverifymeasured methodavailable tools
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas; Pornin x1: hash to addend; output already an addend62.814.1 ns (1.44× the best)13.1 ns (1.62× the best)14.0 ns (1.06× the best)61.5 ns (1.15× the best)252 ns (1.31× the best)19.2 ms (1.44× the best)14.6 ms150 µsagm+sieveRust (AGM), PARInone
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators; Pornin x1: hash to addend; output already an addend62.814.9 ns (1.53× the best)10.1 ns (1.25× the best)14.0 ns (1.06× the best)53.5 ns (tied for the best, within noise)256 ns (1.33× the best)20.3 ms (1.52× the best)14.6 ms150 µsagm+sieveRust (AGM), PARInone
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine; Pornin x1: hash to addend; output already an addend62.814.9 ns (1.53× the best)10.3 ns (1.28× the best)15.1 ns (1.14× the best)53.5 ns (tied for the best, within noise)256 ns (1.32× the best)20.3 ms (1.52× the best)14.6 ms150 µsagm+sieveRust (AGM), PARInone
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes; Pornin x1: hash to addend; output already an addend62.810.7 ns (1.09× the best)9.17 ns (1.14× the best)18.3 ns (1.39× the best)57.2 ns (1.07× the best)202 ns (1.05× the best)14.6 ms (1.09× the best)14.6 ms150 µsagm+sieveRust (AGM), PARInone
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended; Pornin x1: hash to addend; output already an addend60.317.8 ns (1.83× the best)15.7 ns (1.94× the best)13.5 ns (1.02× the best)62.8 ns (1.17× the best)305 ns (1.58× the best)24.3 ms (1.82× the best)17.6 ms86.8 µsagmRust (AGM), PARInone
gf2_122-lambdaincompleteλ-projective; Pornin x1: hash to addend; output already an addend60.316.6 ns (1.70× the best)11.9 ns (1.48× the best)13.5 ns (1.02× the best)53.9 ns (1.01× the best)279 ns (1.44× the best)22.6 ms (1.69× the best)17.6 ms86.8 µsagmRust (AGM), PARInone
gf2_122-wincompleteλ-projective, w codec; Pornin x1: hash to addend; output already an addend60.316.6 ns (1.70× the best)14.4 ns (1.79× the best)14.4 ns (1.09× the best)54.0 ns (1.01× the best)279 ns (1.44× the best)22.6 ms (1.69× the best)17.6 ms86.8 µsagmRust (AGM), PARIgf2_127-lambda
gf2_122-uunscaled (X:S:Z), w codec; Pornin x1: hash to addend; output already an addend60.313.1 ns (1.34× the best)12.1 ns (1.49× the best)18.7 ns (1.42× the best)57.1 ns (1.07× the best)234 ns (1.21× the best)17.8 ms (1.34× the best)17.6 ms86.8 µsagmRust (AGM), PARInone
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended; Pornin x1: hash to addend; output already an addend59.816.8 ns (1.72× the best)15.2 ns (1.88× the best)13.2 ns (tied for the best, within noise)62.0 ns (1.16× the best)290 ns (1.50× the best)22.9 ms (1.71× the best)5.48 ms107 µsagmRust (AGM), PARInone
gf2_122-gls-lambdaincompleteλ-projective; Pornin x1: hash to addend; output already an addend59.816.6 ns (1.70× the best)11.6 ns (1.44× the best)13.2 ns (tied for the best, within noise, 1.00×)55.4 ns (1.04× the best)280 ns (1.45× the best)22.6 ms (1.69× the best)5.48 ms107 µsagmRust (AGM), PARInone
gf2_122-gls-wincompleteλ-projective, w codec; Pornin x1: hash to addend; output already an addend59.816.6 ns (1.70× the best)14.4 ns (1.79× the best)14.3 ns (1.08× the best)55.4 ns (1.04× the best)280 ns (1.45× the best)22.6 ms (1.69× the best)5.48 ms107 µsagmRust (AGM), PARIgf2_127-lambda
gf2_122-gls-uunscaled (X:S:Z), w codec; Pornin x1: hash to addend; output already an addend59.813.1 ns (1.34× the best)12.3 ns (1.52× the best)16.8 ns (1.27× the best)55.7 ns (1.04× the best)233 ns (1.21× the best)17.9 ms (1.34× the best)5.48 ms107 µsagmRust (AGM), PARInone
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended; Pornin x1: hash to addend; output already an addend53.812.8 ns (1.32× the best)10.9 ns (1.36× the best)14.2 ns (1.08× the best)63.7 ns (1.19× the best)238 ns (1.23× the best)17.5 ms (1.31× the best)17.8 ms93.6 µsagm+factorRust (AGM), PARInone
gf2_109-lambdaincompleteλ-projective; Pornin x1: hash to addend; output already an addend53.812.0 ns (1.23× the best)8.13 ns (1.01× the best)14.1 ns (1.07× the best)55.2 ns (1.03× the best)218 ns (1.13× the best)16.4 ms (1.23× the best)17.8 ms93.6 µsagm+factorRust (AGM), PARInone
gf2_109-wincompleteλ-projective, w codec; Pornin x1: hash to addend; output already an addend53.812.0 ns (1.23× the best)10.4 ns (1.28× the best)15.5 ns (1.17× the best)54.5 ns (1.02× the best)217 ns (1.12× the best)16.3 ms (1.22× the best)17.8 ms93.6 µsagm+factorRust (AGM), PARInone
gf2_109-uunscaled (X:S:Z), w codec; Pornin x1: hash to addend; output already an addend53.89.76 ns (best)9.88 ns (1.22× the best)18.4 ns (1.39× the best)60.7 ns (1.13× the best)193 ns (best)13.3 ms (best)17.8 ms93.6 µsagm+factorRust (AGM), PARInone
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached62.320.1 ns (2.06× the best)22.0 ns (2.72× the best)486 ns (36.80× the best)1.10 µs (20.50× the best)1.37 µs (7.09× the best)29.0 ms (2.17× the best)760 ms435 µspari+sievePARIgf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
weier127short Weierstrass, projective += affine63.345.4 ns (4.65× the best)10.1 ns (1.25× the best)485 ns (36.73× the best)1.04 µs (19.37× the best)1.65 µs (8.56× the best)63.3 ms (4.74× the best)888 ms210 µspari+sievePARInone
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine63.337.5 ns (3.84× the best)15.7 ns (1.94× the best)485 ns (36.77× the best)1.04 µs (19.42× the best)1.55 µs (8.01× the best)52.6 ms (3.94× the best)888 ms210 µspari+sievePARInone
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached52.315.5 ns (1.59× the best)20.3 ns (2.51× the best)354 ns (26.79× the best)828 ns (15.47× the best)1.04 µs (5.37× the best)22.3 ms (1.67× the best)Sagegf2_109, gf2_109-lambda, gf2_109-u, gf2_109-w, gf2_122-gls-u, gf2_122-u, gf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
weier107short Weierstrass, projective += affine53.330.5 ns (3.12× the best)11.5 ns (1.42× the best)352 ns (26.66× the best)749 ns (13.99× the best)1.16 µs (6.02× the best)42.6 ms (3.19× the best)Sagegf2_109, gf2_109-lambda, gf2_109-u, gf2_109-w, gf2_127-lambda, gf2_127-u, gf2_127-w
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine53.328.7 ns (2.94× the best)15.3 ns (1.90× the best)352 ns (26.63× the best)746 ns (13.94× the best)1.13 µs (5.88× the best)40.2 ms (3.01× the best)Sagegf2_109, gf2_109-lambda, gf2_109-u, gf2_109-w, 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^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached62.823.9 ns (2.45× the best)16.0 ns (1.98× the best)952 ns (72.09× the best)1.93 µs (36.08× the best)2.25 µs (11.68× the best)35.7 ms (2.67× the best)Sagegf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w, twisted64x2
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached59.813.3 ns (1.37× the best)16.2 ns (2.01× the best)404 ns (30.63× the best)639 ns (11.94× the best)820 ns (4.25× the best)19.3 ms (1.45× the best)360 ms200 µspari+sievePARIgf2_122-gls-u, gf2_122-u, gf2_127-u
weier61x2short Weierstrass, signed-x codec, projective += affine60.826.8 ns (2.74× the best)8.11 ns (tied for the best, within noise, 1.00×)412 ns (31.22× the best)637 ns (11.91× the best)1.00 µs (5.18× the best)37.5 ms (2.81× the best)401 ms132 µspari+sievePARInone
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine60.831.6 ns (3.24× the best)11.7 ns (1.45× the best)413 ns (31.25× the best)638 ns (11.92× the best)1.07 µs (5.53× the best)44.2 ms (3.31× the best)401 ms132 µspari+sievePARIgf2_127-lambda, gf2_127-u, gf2_127-w
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached59.812.5 ns (1.28× the best)8.07 ns (tied for the best, within noise)420 ns (31.80× the best)636 ns (11.88× the best)805 ns (4.17× the best)18.2 ms (1.36× the best)803 ms272 µspari+sievePARInone
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached62.817.2 ns (1.77× the best)10.3 ns (1.28× the best)718 ns (54.39× the best)1.11 µs (20.66× the best)1.34 µs (6.94× the best)25.5 ms (1.91× the best)1.33 s545 µspari+sievePARIgf2_127-lambda, gf2_127-u
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached62.815.0 ns (1.54× the best)11.3 ns (1.40× the best)1.52 µs (114.99× the best)1.76 µs (32.80× the best)1.96 µs (10.14× the best)24.2 ms (1.81× the best)1.19 s596 µspari+sievePARIgf2_127-lambda, gf2_127-u, gf2_127-w

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 · apple-m4 · 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=apple-m4
field backend featuresaes, neon
commitef9e82d39fbf06c605e1740360370f0003dc4ca4
suitescompare compare107 compare109 compare122 compare_fp2 group riblt agm sieve curvegen
profilefull
criterion arguments–warm-up-time 3 –measurement-time 5 –sample-size 100 –nresamples 100000
run2026-10-08T02:49:59Z .. 2026-10-08T07:06:13Z

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

phaseseconds1-minute average, meanrunnable, meanrunnable, most
idle before253.471.874.0
compare6703.863.9526.0
compare1072453.893.7214.0
compare1092504.585.0311.0
compare1224105.074.7215.0
compare_fp25653.413.436.0
group36601.991.9918.0
group wide27402.282.2559.1
riblt mapping3101.781.8710.1
riblt plan202.522.754.0
riblt56802.022.0150.1
agm852.252.7512.0
sieve2252.001.914.1
curvegen902.002.066.2
curvegen searches2352.192.357.9
idle after252.662.393.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
binary-u.109lead
binary-u.127lead
binary-w.109lead
binary-lambda.109lead
binary-u.122-glslead
binary-u.122lead
binary.109lead
binary.127lead
binary-w.127lead
binary-lambda.127lead
binary-lambda.122lead
binary-w.122lead
binary-w.122-glslead
binary-lambda.122-glslead
twisted.61x2contrast

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.109pornin-addendfullgf2_127gf2_127
binary-lambda.122pornin-addendbuffergf2_127gf2_127
binary-lambda.122-glspornin-addendbuffergf2_127gf2_127
binary-lambda.127pornin-addendbuffergf2_127gf2_127
binary-u.109pornin-addendfullgf2_127gf2_127
binary-u.122pornin-addendbuffergf2_127gf2_127
binary-u.122-glspornin-addendbuffergf2_127gf2_127
binary-u.127pornin-addendfullgf2_127gf2_127
binary-w.109pornin-addendfullgf2_127gf2_127
binary-w.122pornin-addendbuffergf2_127gf2_127
binary-w.122-glspornin-addendbuffergf2_127gf2_127
binary-w.127pornin-addendbuffergf2_127gf2_127
binary.109porninbuffergf2_127gf2_127
binary.122porninbuffer
binary.122-glsporninbuffer
binary.127porninbuffergf2_127gf2_127
edwards.107tispot
edwards.127tispot
edwards.61x2tispot
twisted.128tispot
twisted.61x2tispot
twisted.64x2tispot
twisted.goldilocks2tispot
weier-jacobian.107tispot
weier-jacobian.127tispot
weier-jacobian.61x2tispot
weier.107tispot
weier.127tispot
weier.61x2tispot

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). The references (xor, ristretto255) have no batched hash: they hash one item at a time, add the hash output as is, and are in the figure and the second grid. 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): 39.4 ns at , 44.6 ns at , 54.4 ns at , 68.8 ns at , 90.0 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 formulas72.9 ns (1.36× the best)3.54 ns (7.69× the best)14.1 ns (1.44× the best)157 ns (1.23× the best)195 ns (1.25× the best)260 ns (1.27× the best)336 ns (1.28× the best)419 ns (1.29× the best)
gf2_127compare suitePornin x1: hash to addend; output already an addend61.5 ns (1.15× the best)in the hash14.1 ns (1.44× the best)142 ns (1.11× the best)180 ns (1.15× the best)245 ns (1.20× the best)321 ns (1.23× the best)404 ns (1.24× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators75.6 ns (1.41× the best)6.33 ns (13.74× the best)14.9 ns (1.53× the best)165 ns (1.29× the best)205 ns (1.31× the best)274 ns (1.34× the best)353 ns (1.35× the best)440 ns (1.35× the best)
gf2_127-lambdaincompletecompare suitehashed straight to : no prepare72.8 ns (1.36× the best)in the hash14.9 ns (1.53× the best)156 ns (1.22× the best)196 ns (1.25× the best)264 ns (1.29× the best)344 ns (1.31× the best)431 ns (1.32× the best)
gf2_127-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend53.5 ns (tied for the best, within noise)in the hash14.9 ns (1.53× the best)136 ns (1.07× the best)177 ns (1.13× the best)245 ns (1.20× the best)325 ns (1.24× the best)412 ns (1.26× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine83.3 ns (1.56× the best)0.48 ns (1.05× the best)14.9 ns (1.53× the best)166 ns (1.30× the best)207 ns (1.32× the best)275 ns (1.34× the best)355 ns (1.35× the best)441 ns (1.35× the best)
gf2_127-wincompletecompare suitePornin x1: hash to addend; output already an addend53.5 ns (tied for the best, within noise)in the hash14.9 ns (1.53× the best)136 ns (1.07× the best)177 ns (1.13× the best)245 ns (1.20× the best)324 ns (1.24× the best)411 ns (1.26× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes85.8 ns (1.60× the best)0.49 ns (1.06× the best)10.7 ns (1.09× the best)157 ns (1.23× the best)187 ns (1.19× the best)239 ns (1.17× the best)300 ns (1.14× the best)368 ns (1.13× the best)
gf2_127-ucompare suitePornin x1: hash to addend; output already an addend57.2 ns (1.07× the best)in the hash10.7 ns (1.09× the best)128 ns (tied for the best, within noise)158 ns (tied for the best, within noise, 1.01×)210 ns (1.02× the best)271 ns (1.03× the best)339 ns (1.04× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended74.9 ns (1.40× the best)5.02 ns (10.91× the best)17.8 ns (1.83× the best)171 ns (1.34× the best)219 ns (1.40× the best)298 ns (1.46× the best)391 ns (1.49× the best)490 ns (1.50× the best)
gf2_122compare suitePornin x1: hash to addend; output already an addend62.8 ns (1.17× the best)in the hash17.8 ns (1.83× the best)154 ns (1.21× the best)202 ns (1.29× the best)281 ns (1.37× the best)374 ns (1.43× the best)473 ns (1.45× the best)
gf2_122-lambdaincompleteλ-projective74.9 ns (1.40× the best)7.55 ns (16.38× the best)16.6 ns (1.70× the best)170 ns (1.33× the best)215 ns (1.37× the best)289 ns (1.41× the best)376 ns (1.44× the best)470 ns (1.44× the best)
gf2_122-lambdaincompletecompare suitehashed straight to : no prepare72.3 ns (1.35× the best)in the hash16.6 ns (1.70× the best)160 ns (1.25× the best)204 ns (1.30× the best)279 ns (1.36× the best)366 ns (1.40× the best)460 ns (1.41× the best)
gf2_122-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend53.9 ns (1.01× the best)in the hash16.6 ns (1.70× the best)141 ns (1.11× the best)186 ns (1.19× the best)261 ns (1.27× the best)347 ns (1.33× the best)441 ns (1.35× the best)
gf2_122-wincompleteλ-projective, w codec76.8 ns (1.43× the best)0.46 ns (tied for the best, within noise)16.6 ns (1.70× the best)165 ns (1.29× the best)209 ns (1.34× the best)284 ns (1.39× the best)371 ns (1.42× the best)465 ns (1.43× the best)
gf2_122-wincompletecompare suitePornin x1: hash to addend; output already an addend54.0 ns (1.01× the best)in the hash16.6 ns (1.70× the best)141 ns (1.11× the best)186 ns (1.19× the best)261 ns (1.27× the best)348 ns (1.33× the best)442 ns (1.35× the best)
gf2_122-uunscaled (X:S:Z), w codec87.6 ns (1.64× the best)0.48 ns (1.04× the best)13.1 ns (1.34× the best)165 ns (1.30× the best)202 ns (1.29× the best)263 ns (1.28× the best)334 ns (1.28× the best)413 ns (1.27× the best)
gf2_122-ucompare suitePornin x1: hash to addend; output already an addend57.1 ns (1.07× the best)in the hash13.1 ns (1.34× the best)134 ns (1.05× the best)171 ns (1.09× the best)232 ns (1.13× the best)303 ns (1.16× the best)382 ns (1.17× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended74.7 ns (1.40× the best)4.44 ns (9.63× the best)16.8 ns (1.72× the best)167 ns (1.31× the best)213 ns (1.35× the best)288 ns (1.41× the best)376 ns (1.43× the best)471 ns (1.44× the best)
gf2_122-glscompare suitePornin x1: hash to addend; output already an addend62.0 ns (1.16× the best)in the hash16.8 ns (1.72× the best)150 ns (1.18× the best)195 ns (1.25× the best)271 ns (1.32× the best)358 ns (1.37× the best)453 ns (1.39× the best)
gf2_122-gls-lambdaincompleteλ-projective76.5 ns (1.43× the best)7.53 ns (16.36× the best)16.6 ns (1.70× the best)171 ns (1.34× the best)216 ns (1.38× the best)291 ns (1.42× the best)378 ns (1.44× the best)472 ns (1.45× the best)
gf2_122-gls-lambdaincompletecompare suitehashed straight to : no prepare73.8 ns (1.38× the best)in the hash16.6 ns (1.70× the best)161 ns (1.26× the best)206 ns (1.31× the best)281 ns (1.37× the best)367 ns (1.40× the best)461 ns (1.42× the best)
gf2_122-gls-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend55.4 ns (1.04× the best)in the hash16.6 ns (1.70× the best)143 ns (1.12× the best)188 ns (1.20× the best)262 ns (1.28× the best)349 ns (1.33× the best)443 ns (1.36× the best)
gf2_122-gls-wincompleteλ-projective, w codec78.6 ns (1.47× the best)0.49 ns (1.06× the best)16.6 ns (1.70× the best)167 ns (1.31× the best)211 ns (1.35× the best)286 ns (1.40× the best)373 ns (1.42× the best)467 ns (1.43× the best)
gf2_122-gls-wincompletecompare suitePornin x1: hash to addend; output already an addend55.4 ns (1.04× the best)in the hash16.6 ns (1.70× the best)143 ns (1.12× the best)188 ns (1.20× the best)262 ns (1.28× the best)349 ns (1.33× the best)443 ns (1.36× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec80.2 ns (1.50× the best)0.48 ns (1.04× the best)13.1 ns (1.34× the best)158 ns (1.24× the best)195 ns (1.24× the best)255 ns (1.25× the best)327 ns (1.25× the best)406 ns (1.25× the best)
gf2_122-gls-ucompare suitePornin x1: hash to addend; output already an addend55.7 ns (1.04× the best)in the hash13.1 ns (1.34× the best)133 ns (1.04× the best)170 ns (1.08× the best)231 ns (1.13× the best)302 ns (1.15× the best)381 ns (1.17× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended81.7 ns (1.53× the best)2.79 ns (6.06× the best)12.8 ns (1.32× the best)161 ns (1.26× the best)197 ns (1.26× the best)257 ns (1.25× the best)328 ns (1.25× the best)405 ns (1.24× the best)
gf2_109compare suitePornin x1: hash to addend; output already an addend63.7 ns (1.19× the best)in the hash12.8 ns (1.32× the best)140 ns (1.10× the best)176 ns (1.12× the best)236 ns (1.15× the best)307 ns (1.17× the best)385 ns (1.18× the best)
gf2_109-lambdaincompleteλ-projective82.0 ns (1.53× the best)5.17 ns (11.22× the best)12.0 ns (1.23× the best)161 ns (1.27× the best)195 ns (1.24× the best)252 ns (1.23× the best)319 ns (1.22× the best)392 ns (1.20× the best)
gf2_109-lambdaincompletecompare suitehashed straight to : no prepare77.6 ns (1.45× the best)in the hash12.0 ns (1.23× the best)152 ns (1.19× the best)186 ns (1.18× the best)242 ns (1.18× the best)309 ns (1.18× the best)383 ns (1.17× the best)
gf2_109-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend55.2 ns (1.03× the best)in the hash12.0 ns (1.23× the best)129 ns (1.01× the best)163 ns (1.04× the best)220 ns (1.07× the best)287 ns (1.09× the best)361 ns (1.11× the best)
gf2_109-wincompleteλ-projective, w codec79.4 ns (1.48× the best)0.48 ns (1.04× the best)12.0 ns (1.23× the best)154 ns (1.21× the best)188 ns (1.20× the best)244 ns (1.19× the best)311 ns (1.19× the best)385 ns (1.18× the best)
gf2_109-wincompletecompare suitePornin x1: hash to addend; output already an addend54.5 ns (1.02× the best)in the hash12.0 ns (1.23× the best)129 ns (tied for the best, within noise, 1.01×)162 ns (1.04× the best)219 ns (1.07× the best)286 ns (1.09× the best)360 ns (1.10× the best)
gf2_109-uunscaled (X:S:Z), w codec81.2 ns (1.52× the best)0.49 ns (1.05× the best)9.76 ns (tied for the best, within noise)149 ns (1.17× the best)178 ns (1.13× the best)226 ns (1.10× the best)283 ns (1.08× the best)347 ns (1.06× the best)
gf2_109-ucompare suitePornin x1: hash to addend; output already an addend60.7 ns (1.13× the best)in the hash9.76 ns (tied for the best, within noise)128 ns (tied for the best, within noise, 1.01×)157 ns (tied for the best, within noise)205 ns (best)262 ns (best)326 ns (best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.07 µs (19.97× the best)28.3 ns (61.37× the best)20.1 ns (2.06× the best)1.19 µs (9.37× the best)1.25 µs (7.95× the best)1.34 µs (6.52× the best)1.44 µs (5.49× the best)1.55 µs (4.75× the best)
weier127short Weierstrass, projective += affine1.04 µs (19.36× the best)0.46 ns (tied for the best, within noise, 1.00×)45.4 ns (4.65× the best)1.21 µs (9.47× the best)1.32 µs (8.42× the best)1.51 µs (7.36× the best)1.72 µs (6.57× the best)1.94 µs (5.96× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.04 µs (19.41× the best)0.49 ns (1.06× the best)37.5 ns (3.84× the best)1.19 µs (9.31× the best)1.28 µs (8.17× the best)1.44 µs (7.02× the best)1.62 µs (6.17× the best)1.80 µs (5.53× the best)
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached805 ns (15.04× the best)22.7 ns (49.36× the best)15.5 ns (1.59× the best)912 ns (7.15× the best)954 ns (6.08× the best)1.02 µs (5.00× the best)1.11 µs (4.23× the best)1.20 µs (3.67× the best)
weier107short Weierstrass, projective += affine748 ns (13.98× the best)0.49 ns (1.07× the best)30.5 ns (3.12× the best)876 ns (6.87× the best)954 ns (6.08× the best)1.08 µs (5.29× the best)1.23 µs (4.70× the best)1.39 µs (4.25× the best)
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine745 ns (13.93× the best)0.48 ns (1.04× the best)28.7 ns (2.94× the best)868 ns (6.81× the best)942 ns (6.01× the best)1.06 µs (5.19× the best)1.20 µs (4.60× the best)1.35 µs (4.14× the best)
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached1.92 µs (35.93× the best)8.08 ns (17.55× the best)23.9 ns (2.45× the best)2.04 µs (15.99× the best)2.10 µs (13.40× the best)2.20 µs (10.77× the best)2.32 µs (8.87× the best)2.45 µs (7.51× the best)
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached620 ns (11.59× the best)18.8 ns (40.87× the best)13.3 ns (1.37× the best)717 ns (5.62× the best)754 ns (4.81× the best)816 ns (3.98× the best)889 ns (3.39× the best)969 ns (2.97× the best)
weier61x2short Weierstrass, signed-x codec, projective += affine637 ns (11.90× the best)0.72 ns (1.56× the best)26.8 ns (2.74× the best)754 ns (5.92× the best)824 ns (5.25× the best)938 ns (4.58× the best)1.07 µs (4.08× the best)1.21 µs (3.71× the best)
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine638 ns (11.91× the best)0.54 ns (1.18× the best)31.6 ns (3.24× the best)769 ns (6.03× the best)850 ns (5.42× the best)984 ns (4.80× the best)1.14 µs (4.34× the best)1.30 µs (3.98× the best)
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached632 ns (11.81× the best)3.60 ns (7.81× the best)12.5 ns (1.28× the best)711 ns (5.58× the best)746 ns (4.76× the best)805 ns (3.93× the best)874 ns (3.34× the best)950 ns (2.91× the best)
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached1.10 µs (20.55× the best)5.51 ns (11.96× the best)17.2 ns (1.77× the best)1.19 µs (9.37× the best)1.24 µs (7.91× the best)1.32 µs (6.44× the best)1.41 µs (5.38× the best)1.51 µs (4.62× the best)
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached1.75 µs (32.71× the best)4.51 ns (9.78× the best)15.0 ns (1.54× the best)1.84 µs (14.41× the best)1.88 µs (11.98× the best)1.95 µs (9.51× the best)2.03 µs (7.74× the best)2.11 µs (6.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.

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. ristretto255 and the XOR baseline have no batched hash: they hash one item at a time and add the hash output as is. 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. ristretto255 and the XOR baseline have no batched hash: they hash one item at a time and add the hash output as is. 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): : : : :
baseline
xorcompare suitehash output added as is: no prepare24.2 nsin the hash0.71 ns65.6 ns72.5 ns85.1 ns103 ns127 ns
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas779 ns (2.47× the best)3.88 ns (6.33× the best)14.1 ns (1.44× the best)863 ns (2.18× the best)902 ns (2.08× the best)967 ns (1.96× the best)1.04 µs (1.84× the best)1.13 µs (1.75× the best)
gf2_127compare suitePornin x1: hash to addend; output already an addend485 ns (1.54× the best)in the hash14.1 ns (1.44× the best)566 ns (1.43× the best)604 ns (1.40× the best)669 ns (1.36× the best)745 ns (1.32× the best)828 ns (1.29× the best)
gf2_127compare suitePornin x2: hash to addend; output already an addend916 ns (2.91× the best)in the hash14.1 ns (1.44× the best)996 ns (2.51× the best)1.03 µs (2.39× the best)1.10 µs (2.23× the best)1.18 µs (2.08× the best)1.26 µs (1.95× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators806 ns (2.56× the best)340 ns (553.91× the best)14.9 ns (1.53× the best)1.23 µs (3.10× the best)1.27 µs (2.93× the best)1.34 µs (2.71× the best)1.42 µs (2.51× the best)1.50 µs (2.33× the best)
gf2_127-lambdaincompletecompare suitehashed straight to : no prepare761 ns (2.42× the best)in the hash14.9 ns (1.53× the best)843 ns (2.13× the best)884 ns (2.04× the best)952 ns (1.93× the best)1.03 µs (1.83× the best)1.12 µs (1.74× the best)
gf2_127-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend456 ns (1.45× the best)in the hash14.9 ns (1.53× the best)538 ns (1.36× the best)579 ns (1.34× the best)647 ns (1.31× the best)727 ns (1.29× the best)814 ns (1.26× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine865 ns (2.75× the best)0.63 ns (1.02× the best)14.9 ns (1.53× the best)948 ns (2.39× the best)989 ns (2.28× the best)1.06 µs (2.14× the best)1.14 µs (2.01× the best)1.22 µs (1.90× the best)
gf2_127-wincompletecompare suitePornin x1: hash to addend; output already an addend455 ns (1.44× the best)in the hash14.9 ns (1.53× the best)538 ns (1.36× the best)578 ns (1.34× the best)646 ns (1.31× the best)726 ns (1.28× the best)812 ns (1.26× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes869 ns (2.76× the best)0.63 ns (1.03× the best)10.7 ns (1.09× the best)940 ns (2.37× the best)971 ns (2.24× the best)1.02 µs (2.07× the best)1.08 µs (1.92× the best)1.15 µs (1.79× the best)
gf2_127-ucompare suitePornin x1: hash to addend; output already an addend461 ns (1.46× the best)in the hash10.7 ns (1.09× the best)531 ns (1.34× the best)562 ns (1.30× the best)613 ns (1.24× the best)674 ns (1.19× the best)742 ns (1.15× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended510 ns (1.62× the best)4.92 ns (8.02× the best)17.8 ns (1.83× the best)606 ns (1.53× the best)653 ns (1.51× the best)733 ns (1.48× the best)825 ns (1.46× the best)925 ns (1.44× the best)
gf2_122compare suitePornin x1: hash to addend; output already an addend373 ns (1.18× the best)in the hash17.8 ns (1.83× the best)464 ns (1.17× the best)512 ns (1.18× the best)591 ns (1.20× the best)684 ns (1.21× the best)783 ns (1.22× the best)
gf2_122-lambdaincompleteλ-projective509 ns (1.62× the best)166 ns (271.21× the best)16.6 ns (1.70× the best)762 ns (1.92× the best)807 ns (1.86× the best)882 ns (1.79× the best)968 ns (1.71× the best)1.06 µs (1.65× the best)
gf2_122-lambdaincompletecompare suitehashed straight to : no prepare520 ns (1.65× the best)in the hash16.6 ns (1.70× the best)607 ns (1.53× the best)652 ns (1.51× the best)727 ns (1.47× the best)813 ns (1.44× the best)907 ns (1.41× the best)
gf2_122-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend326 ns (1.04× the best)in the hash16.6 ns (1.70× the best)414 ns (1.04× the best)459 ns (1.06× the best)533 ns (1.08× the best)620 ns (1.10× the best)714 ns (1.11× the best)
gf2_122-wincompleteλ-projective, w codec517 ns (1.64× the best)0.63 ns (1.03× the best)16.6 ns (1.70× the best)605 ns (1.53× the best)650 ns (1.50× the best)724 ns (1.47× the best)811 ns (1.43× the best)905 ns (1.40× the best)
gf2_122-wincompletecompare suitePornin x1: hash to addend; output already an addend326 ns (1.04× the best)in the hash16.6 ns (1.70× the best)414 ns (1.04× the best)459 ns (1.06× the best)533 ns (1.08× the best)620 ns (1.10× the best)714 ns (1.11× the best)
gf2_122-uunscaled (X:S:Z), w codec531 ns (1.69× the best)0.61 ns (tied for the best, within noise, 1.00×)13.1 ns (1.34× the best)609 ns (1.54× the best)646 ns (1.49× the best)706 ns (1.43× the best)778 ns (1.38× the best)857 ns (1.33× the best)
gf2_122-ucompare suitePornin x1: hash to addend; output already an addend326 ns (1.03× the best)in the hash13.1 ns (1.34× the best)403 ns (1.02× the best)440 ns (1.02× the best)500 ns (1.01× the best)572 ns (1.01× the best)651 ns (1.01× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended535 ns (1.70× the best)4.31 ns (7.02× the best)16.8 ns (1.72× the best)628 ns (1.58× the best)673 ns (1.55× the best)748 ns (1.52× the best)836 ns (1.48× the best)931 ns (1.44× the best)
gf2_122-glscompare suitePornin x1: hash to addend; output already an addend369 ns (1.17× the best)in the hash16.8 ns (1.72× the best)457 ns (1.15× the best)502 ns (1.16× the best)577 ns (1.17× the best)665 ns (1.18× the best)760 ns (1.18× the best)
gf2_122-gls-lambdaincompleteλ-projective515 ns (1.64× the best)167 ns (273.01× the best)16.6 ns (1.70× the best)770 ns (1.94× the best)815 ns (1.88× the best)889 ns (1.80× the best)976 ns (1.73× the best)1.07 µs (1.66× the best)
gf2_122-gls-lambdaincompletecompare suitehashed straight to : no prepare504 ns (1.60× the best)in the hash16.6 ns (1.70× the best)592 ns (1.49× the best)637 ns (1.47× the best)711 ns (1.44× the best)798 ns (1.41× the best)892 ns (1.38× the best)
gf2_122-gls-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend315 ns (tied for the best, within noise)in the hash16.6 ns (1.70× the best)402 ns (1.01× the best)447 ns (1.03× the best)522 ns (1.06× the best)608 ns (1.08× the best)703 ns (1.09× the best)
gf2_122-gls-wincompleteλ-projective, w codec509 ns (1.62× the best)0.63 ns (1.03× the best)16.6 ns (1.70× the best)597 ns (1.51× the best)642 ns (1.48× the best)716 ns (1.45× the best)803 ns (1.42× the best)897 ns (1.39× the best)
gf2_122-gls-wincompletecompare suitePornin x1: hash to addend; output already an addend316 ns (tied for the best, within noise, 1.00×)in the hash16.6 ns (1.70× the best)403 ns (1.02× the best)448 ns (1.03× the best)522 ns (1.06× the best)609 ns (1.08× the best)703 ns (1.09× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec522 ns (1.66× the best)0.63 ns (1.02× the best)13.1 ns (1.34× the best)600 ns (1.51× the best)637 ns (1.47× the best)698 ns (1.41× the best)769 ns (1.36× the best)848 ns (1.32× the best)
gf2_122-gls-ucompare suitePornin x1: hash to addend; output already an addend319 ns (1.01× the best)in the hash13.1 ns (1.34× the best)396 ns (best)433 ns (best)494 ns (best)565 ns (best)644 ns (best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended870 ns (2.76× the best)2.77 ns (4.51× the best)12.8 ns (1.32× the best)949 ns (2.40× the best)985 ns (2.28× the best)1.05 µs (2.12× the best)1.12 µs (1.97× the best)1.19 µs (1.85× the best)
gf2_109compare suitePornin x1: hash to addend; output already an addend560 ns (1.78× the best)in the hash12.8 ns (1.32× the best)637 ns (1.61× the best)673 ns (1.55× the best)733 ns (1.48× the best)803 ns (1.42× the best)881 ns (1.37× the best)
gf2_109-lambdaincompleteλ-projective873 ns (2.77× the best)349 ns (568.88× the best)12.0 ns (1.23× the best)1.30 µs (3.27× the best)1.33 µs (3.07× the best)1.39 µs (2.81× the best)1.45 µs (2.57× the best)1.53 µs (2.37× the best)
gf2_109-lambdaincompletecompare suitehashed straight to : no prepare938 ns (2.98× the best)in the hash12.0 ns (1.23× the best)1.01 µs (2.55× the best)1.05 µs (2.42× the best)1.10 µs (2.23× the best)1.17 µs (2.07× the best)1.24 µs (1.93× the best)
gf2_109-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend550 ns (1.75× the best)in the hash12.0 ns (1.23× the best)624 ns (1.58× the best)658 ns (1.52× the best)715 ns (1.45× the best)782 ns (1.38× the best)856 ns (1.33× the best)
gf2_109-wincompleteλ-projective, w codec855 ns (2.72× the best)0.61 ns (tied for the best, within noise)12.0 ns (1.23× the best)930 ns (2.35× the best)964 ns (2.23× the best)1.02 µs (2.07× the best)1.09 µs (1.92× the best)1.16 µs (1.80× the best)
gf2_109-wincompletecompare suitePornin x1: hash to addend; output already an addend535 ns (1.70× the best)in the hash12.0 ns (1.23× the best)609 ns (1.54× the best)643 ns (1.48× the best)699 ns (1.42× the best)766 ns (1.35× the best)840 ns (1.30× the best)
gf2_109-uunscaled (X:S:Z), w codec874 ns (2.77× the best)0.63 ns (1.02× the best)9.76 ns (tied for the best, within noise)942 ns (2.38× the best)970 ns (2.24× the best)1.02 µs (2.06× the best)1.08 µs (1.90× the best)1.14 µs (1.77× the best)
gf2_109-ucompare suitePornin x1: hash to addend; output already an addend533 ns (1.69× the best)in the hash9.76 ns (tied for the best, within noise)600 ns (1.51× the best)629 ns (1.45× the best)677 ns (1.37× the best)734 ns (1.30× the best)798 ns (1.24× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.07 µs (3.39× the best)582 ns (948.36× the best)20.1 ns (2.06× the best)1.75 µs (4.41× the best)1.80 µs (4.16× the best)1.89 µs (3.83× the best)1.99 µs (3.52× the best)2.10 µs (3.26× the best)
edwards127compare suiteElligator 2 x1: hash + prepare1.29 µs (4.08× the best)582 ns (948.36× the best)20.1 ns (2.06× the best)1.96 µs (4.96× the best)2.02 µs (4.66× the best)2.11 µs (4.26× the best)2.21 µs (3.90× the best)2.32 µs (3.60× the best)
weier127short Weierstrass, projective += affine1.03 µs (3.26× the best)0.61 ns (tied for the best, within noise, 1.00×)45.4 ns (4.65× the best)1.20 µs (3.02× the best)1.31 µs (3.03× the best)1.50 µs (3.04× the best)1.71 µs (3.03× the best)1.93 µs (3.00× the best)
weier127compare suiteSSWU x1: hash + prepare1.10 µs (3.50× the best)0.61 ns (tied for the best, within noise, 1.00×)45.4 ns (4.65× the best)1.27 µs (3.21× the best)1.39 µs (3.20× the best)1.57 µs (3.19× the best)1.79 µs (3.16× the best)2.01 µs (3.12× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.03 µs (3.28× the best)0.62 ns (tied for the best, within noise, 1.01×)37.5 ns (3.84× the best)1.18 µs (2.98× the best)1.28 µs (2.95× the best)1.43 µs (2.90× the best)1.61 µs (2.85× the best)1.80 µs (2.79× the best)
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached806 ns (2.56× the best)546 ns (889.89× the best)15.5 ns (1.59× the best)1.44 µs (3.62× the best)1.48 µs (3.41× the best)1.55 µs (3.14× the best)1.63 µs (2.88× the best)1.72 µs (2.67× the best)
edwards107compare suiteElligator 2 x1: hash + prepare1.07 µs (3.38× the best)546 ns (889.89× the best)15.5 ns (1.59× the best)1.70 µs (4.28× the best)1.74 µs (4.01× the best)1.81 µs (3.66× the best)1.89 µs (3.34× the best)1.98 µs (3.07× the best)
weier107short Weierstrass, projective += affine746 ns (2.37× the best)0.62 ns (tied for the best, within noise, 1.01×)30.5 ns (3.12× the best)874 ns (2.21× the best)952 ns (2.20× the best)1.08 µs (2.19× the best)1.23 µs (2.17× the best)1.38 µs (2.15× the best)
weier107compare suiteSSWU x1: hash + prepare1.04 µs (3.30× the best)0.62 ns (tied for the best, within noise, 1.01×)30.5 ns (3.12× the best)1.17 µs (2.95× the best)1.25 µs (2.88× the best)1.37 µs (2.78× the best)1.52 µs (2.69× the best)1.68 µs (2.60× the best)
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine742 ns (2.36× the best)0.62 ns (tied for the best, within noise, 1.00×)28.7 ns (2.94× the best)866 ns (2.18× the best)939 ns (2.17× the best)1.06 µs (2.15× the best)1.20 µs (2.12× the best)1.35 µs (2.09× the best)
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached1.92 µs (6.11× the best)8.24 ns (13.43× the best)23.9 ns (2.45× the best)2.04 µs (5.15× the best)2.10 µs (4.86× the best)2.21 µs (4.47× the best)2.33 µs (4.11× the best)2.45 µs (3.81× the best)
twisted128compare suiteElligator 2 x1: hash + prepare3.32 µs (10.55× the best)8.24 ns (13.43× the best)23.9 ns (2.45× the best)3.44 µs (8.68× the best)3.50 µs (8.09× the best)3.60 µs (7.30× the best)3.72 µs (6.58× the best)3.85 µs (5.98× the best)
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached624 ns (1.98× the best)216 ns (352.47× the best)13.3 ns (1.37× the best)918 ns (2.32× the best)956 ns (2.21× the best)1.02 µs (2.06× the best)1.09 µs (1.93× the best)1.17 µs (1.82× the best)
edwards61x2compare suiteElligator 2 x1: hash + prepare734 ns (2.33× the best)216 ns (352.47× the best)13.3 ns (1.37× the best)1.03 µs (2.59× the best)1.07 µs (2.46× the best)1.13 µs (2.28× the best)1.20 µs (2.12× the best)1.28 µs (1.99× the best)
weier61x2short Weierstrass, signed-x codec, projective += affine637 ns (2.02× the best)0.63 ns (1.02× the best)26.8 ns (2.74× the best)755 ns (1.90× the best)824 ns (1.90× the best)938 ns (1.90× the best)1.07 µs (1.89× the best)1.21 µs (1.88× the best)
weier61x2compare suiteSSWU x1: hash + prepare703 ns (2.23× the best)0.63 ns (1.02× the best)26.8 ns (2.74× the best)820 ns (2.07× the best)889 ns (2.05× the best)1.00 µs (2.03× the best)1.14 µs (2.01× the best)1.27 µs (1.98× the best)
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine638 ns (2.03× the best)0.63 ns (1.02× the best)31.6 ns (3.24× the best)770 ns (1.94× the best)851 ns (1.97× the best)985 ns (1.99× the best)1.14 µs (2.01× the best)1.30 µs (2.01× the best)
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached630 ns (2.00× the best)3.41 ns (5.55× the best)12.5 ns (1.28× the best)709 ns (1.79× the best)744 ns (1.72× the best)803 ns (1.63× the best)872 ns (1.54× the best)948 ns (1.47× the best)
twisted61x2compare suiteElligator 2 x1: hash + prepare892 ns (2.83× the best)3.41 ns (5.55× the best)12.5 ns (1.28× the best)971 ns (2.45× the best)1.01 µs (2.33× the best)1.07 µs (2.16× the best)1.13 µs (2.01× the best)1.21 µs (1.88× the best)
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached1.10 µs (3.49× the best)5.43 ns (8.85× the best)17.2 ns (1.77× the best)1.19 µs (3.01× the best)1.24 µs (2.86× the best)1.32 µs (2.67× the best)1.41 µs (2.49× the best)1.50 µs (2.33× the best)
twisted64x2compare suiteElligator 2 x1: hash + prepare1.53 µs (4.85× the best)5.43 ns (8.85× the best)17.2 ns (1.77× the best)1.62 µs (4.09× the best)1.67 µs (3.85× the best)1.75 µs (3.53× the best)1.84 µs (3.25× the best)1.93 µs (3.00× the best)
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached1.73 µs (5.50× the best)4.48 ns (7.30× the best)15.0 ns (1.54× the best)1.82 µs (4.59× the best)1.86 µs (4.30× the best)1.93 µs (3.90× the best)2.01 µs (3.55× the best)2.10 µs (3.25× the best)
twisted-goldilocks2compare suiteElligator 2 x1: hash + prepare2.16 µs (6.87× the best)4.48 ns (7.30× the best)15.0 ns (1.54× the best)2.25 µs (5.68× the best)2.29 µs (5.29× the best)2.36 µs (4.78× the best)2.44 µs (4.31× the best)2.53 µs (3.92× the best)
references, 32 and 33 bytes
ristretto255compare suitehash output added as is: no prepare4.72 µs (14.98× the best)in the hash65.1 ns (6.67× the best)4.95 µs (12.48× the best)5.11 µs (11.80× the best)5.37 µs (10.87× the best)5.67 µs (10.03× the best)5.98 µs (9.28× 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.

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 formulas779 ns72.9 ns (best)10.7×2.33.88 ns3.54 ns (7.69× the best)1.1×0371 ns13.1 ns (1.62× the best)28.3×1.1367 ns14.0 ns (1.06× the best)26.2×1.1
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators806 ns75.6 ns (1.04× the best)10.7×2.3340 ns6.33 ns (13.74× the best)53.7×1.1361 ns10.1 ns (1.25× the best)35.7×1.1364 ns14.0 ns (1.06× the best)26.1×1.1
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine865 ns83.3 ns (1.14× the best)10.4×2.50.63 ns0.48 ns (1.05× the best)1.3×0361 ns10.3 ns (1.28× the best)35.0×1.1361 ns15.1 ns (1.14× the best)24.0×1.1
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes869 ns85.8 ns (1.18× the best)10.1×2.50.63 ns0.49 ns (1.06× the best)1.3×0355 ns9.17 ns (1.14× the best)38.7×1.1376 ns18.3 ns (1.39× the best)20.5×1.1
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended510 ns74.9 ns (1.03× the best)6.8×2.84.92 ns5.02 ns (10.91× the best)1.0×0211 ns15.7 ns (1.94× the best)13.5×1.3197 ns13.5 ns (1.02× the best)14.5×1.2
gf2_122-lambdaincompleteλ-projective509 ns74.9 ns (1.03× the best)6.8×2.8166 ns7.55 ns (16.38× the best)22.0×1189 ns11.9 ns (1.48× the best)15.9×1.1196 ns13.5 ns (1.02× the best)14.5×1.2
gf2_122-wincompleteλ-projective, w codec517 ns76.8 ns (1.05× the best)6.7×2.80.63 ns0.46 ns (best)1.4×0204 ns14.4 ns (1.79× the best)14.2×1.2193 ns14.4 ns (1.09× the best)13.3×1.2
gf2_122-uunscaled (X:S:Z), w codec531 ns87.6 ns (1.20× the best)6.1×2.90.61 ns0.48 ns (1.04× the best)1.3×0206 ns12.1 ns (1.49× the best)17.1×1.3223 ns18.7 ns (1.42× the best)11.9×1.3
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended535 ns74.7 ns (1.02× the best)7.2×34.31 ns4.44 ns (9.63× the best)1.0×0209 ns15.2 ns (1.88× the best)13.7×1.3195 ns13.2 ns (best)14.7×1.2
gf2_122-gls-lambdaincompleteλ-projective515 ns76.5 ns (1.05× the best)6.7×2.8167 ns7.53 ns (16.36× the best)22.2×1189 ns11.6 ns (1.44× the best)16.3×1.1187 ns13.2 ns (1.00× the best)14.2×1.1
gf2_122-gls-wincompleteλ-projective, w codec509 ns78.6 ns (1.08× the best)6.5×2.80.63 ns0.49 ns (1.06× the best)1.3×0204 ns14.4 ns (1.79× the best)14.1×1.2191 ns14.3 ns (1.08× the best)13.3×1.1
gf2_122-gls-uunscaled (X:S:Z), w codec522 ns80.2 ns (1.10× the best)6.5×2.90.63 ns0.48 ns (1.04× the best)1.3×0195 ns12.3 ns (1.52× the best)15.9×1.2207 ns16.8 ns (1.27× the best)12.3×1.2
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended870 ns81.7 ns (1.12× the best)10.7×2.32.77 ns2.79 ns (6.06× the best)1.0×0381 ns10.9 ns (1.36× the best)34.8×1.1380 ns14.2 ns (1.08× the best)26.8×1.1
gf2_109-lambdaincompleteλ-projective873 ns82.0 ns (1.12× the best)10.6×2.3349 ns5.17 ns (11.22× the best)67.5×1366 ns8.13 ns (1.01× the best)45.0×1.1381 ns14.1 ns (1.07× the best)27.0×1.1
gf2_109-wincompleteλ-projective, w codec855 ns79.4 ns (1.09× the best)10.8×2.30.61 ns0.48 ns (1.04× the best)1.3×0359 ns10.4 ns (1.28× the best)34.6×1378 ns15.5 ns (1.17× the best)24.4×1.1
gf2_109-uunscaled (X:S:Z), w codec874 ns81.2 ns (1.11× the best)10.8×2.30.63 ns0.49 ns (1.05× the best)1.3×0397 ns9.88 ns (1.22× the best)40.2×1.1398 ns18.4 ns (1.39× the best)21.7×1.1
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.07 µs1.07 µs (14.65× the best)1.0×0582 ns28.3 ns (61.37× the best)20.6×1.1549 ns22.0 ns (2.72× the best)25.0×1489 ns486 ns (36.80× the best)1.0×0
weier127short Weierstrass, projective += affine1.03 µs1.04 µs (14.20× the best)1.0×00.61 ns0.46 ns (1.00× the best)1.3×0536 ns10.1 ns (1.25× the best)53.2×1489 ns485 ns (36.73× the best)1.0×0
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.03 µs1.04 µs (14.24× the best)1.0×00.62 ns0.49 ns (1.06× the best)1.3×0533 ns15.7 ns (1.94× the best)33.9×1492 ns485 ns (36.77× the best)1.0×0
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached806 ns805 ns (11.04× the best)1.0×0546 ns22.7 ns (49.36× the best)24.0×1.1506 ns20.3 ns (2.51× the best)25.0×1359 ns354 ns (26.79× the best)1.0×0
weier107short Weierstrass, projective += affine746 ns748 ns (10.26× the best)1.0×00.62 ns0.49 ns (1.07× the best)1.3×0497 ns11.5 ns (1.42× the best)43.2×1358 ns352 ns (26.66× the best)1.0×0
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine742 ns745 ns (10.22× the best)1.0×00.62 ns0.48 ns (1.04× the best)1.3×0502 ns15.3 ns (1.90× the best)32.8×1351 ns352 ns (26.63× the best)1.0×0
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached1.92 µs1.92 µs (26.36× the best)1.0×8.24 ns8.08 ns (17.55× the best)1.0×939 ns16.0 ns (1.98× the best)58.7×949 ns952 ns (72.09× the best)1.0×
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached624 ns620 ns (8.50× the best)1.0×0216 ns18.8 ns (40.87× the best)11.5×1.3181 ns16.2 ns (2.01× the best)11.1×1.1405 ns404 ns (30.63× the best)1.0×0
weier61x2short Weierstrass, signed-x codec, projective += affine637 ns637 ns (8.73× the best)1.0×00.63 ns0.72 ns (1.56× the best)0.9×0170 ns8.11 ns (1.00× the best)20.9×1416 ns412 ns (31.22× the best)1.0×0
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine638 ns638 ns (8.74× the best)1.0×00.63 ns0.54 ns (1.18× the best)1.2×0179 ns11.7 ns (1.45× the best)15.3×1.1417 ns413 ns (31.25× the best)1.0×0
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached630 ns632 ns (8.66× the best)1.0×03.41 ns3.60 ns (7.81× the best)0.9×0179 ns8.07 ns (best)22.1×1.1425 ns420 ns (31.80× the best)1.0×0
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached1.10 µs1.10 µs (15.08× the best)1.0×05.43 ns5.51 ns (11.96× the best)1.0×0290 ns10.3 ns (1.28× the best)28.1×1721 ns718 ns (54.39× the best)1.0×0
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached1.73 µs1.75 µs (24.00× the best)1.0×-0.14.48 ns4.51 ns (9.78× the best)1.0×0197 ns11.3 ns (1.40× the best)17.5×11.53 µs1.52 µs (114.99× the best)1.0×0.1

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 formulas779 ns (1.53× the best)322 ns (1.30× the best)127 ns (1.16× the best)72.9 ns (best)3.88 ns (6.33× the best)4.37 ns (3.14× the best)3.68 ns (7.31× the best)3.54 ns (7.69× the best)371 ns (2.19× the best)71.6 ns (1.58× the best)21.7 ns (1.57× the best)13.1 ns (1.62× the best)367 ns (1.96× the best)76.4 ns (1.33× the best)22.1 ns (1.14× the best)14.0 ns (1.06× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators806 ns (1.58× the best)318 ns (1.28× the best)127 ns (1.15× the best)75.6 ns (1.04× the best)340 ns (553.91× the best)64.1 ns (46.03× the best)14.2 ns (28.19× the best)6.33 ns (13.74× the best)361 ns (2.13× the best)68.2 ns (1.50× the best)18.4 ns (1.33× the best)10.1 ns (1.25× the best)364 ns (1.95× the best)76.3 ns (1.33× the best)22.1 ns (1.14× the best)14.0 ns (1.06× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine865 ns (1.70× the best)346 ns (1.39× the best)138 ns (1.26× the best)83.3 ns (1.14× the best)0.63 ns (1.02× the best)1.40 ns (tied for the best, within noise, 1.01×)0.51 ns (1.01× the best)0.48 ns (1.05× the best)361 ns (2.13× the best)67.8 ns (1.49× the best)18.6 ns (1.34× the best)10.3 ns (1.28× the best)361 ns (1.93× the best)78.2 ns (1.36× the best)23.0 ns (1.18× the best)15.1 ns (1.14× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes869 ns (1.71× the best)351 ns (1.41× the best)142 ns (1.29× the best)85.8 ns (1.18× the best)0.63 ns (1.03× the best)1.41 ns (1.01× the best)0.51 ns (1.01× the best)0.49 ns (1.06× the best)355 ns (2.09× the best)65.7 ns (1.45× the best)17.2 ns (1.24× the best)9.17 ns (1.14× the best)376 ns (2.01× the best)82.4 ns (1.44× the best)26.9 ns (1.39× the best)18.3 ns (1.39× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended510 ns (tied for the best, within noise, 1.00×)74.9 ns (1.03× the best)4.92 ns (8.02× the best)5.02 ns (10.91× the best)211 ns (1.24× the best)15.7 ns (1.94× the best)197 ns (1.05× the best)13.5 ns (1.02× the best)
gf2_122-lambdaincompleteλ-projective509 ns (tied for the best, within noise)249 ns (best)110 ns (best)74.9 ns (1.03× the best)166 ns (271.21× the best)46.9 ns (33.69× the best)13.1 ns (26.00× the best)7.55 ns (16.38× the best)189 ns (1.12× the best)52.8 ns (1.16× the best)17.8 ns (1.28× the best)11.9 ns (1.48× the best)196 ns (1.04× the best)57.4 ns (best)19.8 ns (1.02× the best)13.5 ns (1.02× the best)
gf2_122-wincompleteλ-projective, w codec517 ns (1.02× the best)257 ns (1.04× the best)114 ns (1.04× the best)76.8 ns (1.05× the best)0.63 ns (1.03× the best)1.39 ns (tied for the best, within noise)0.51 ns (tied for the best, within noise, 1.00×)0.46 ns (tied for the best, within noise)204 ns (1.21× the best)55.6 ns (1.22× the best)20.6 ns (1.49× the best)14.4 ns (1.79× the best)193 ns (1.03× the best)59.0 ns (1.03× the best)20.6 ns (1.06× the best)14.4 ns (1.09× the best)
gf2_122-uunscaled (X:S:Z), w codec531 ns (1.04× the best)268 ns (1.08× the best)125 ns (1.14× the best)87.6 ns (1.20× the best)0.61 ns (tied for the best, within noise, 1.00×)1.41 ns (1.01× the best)0.50 ns (tied for the best, within noise)0.48 ns (1.04× the best)206 ns (1.22× the best)50.6 ns (1.11× the best)18.1 ns (1.31× the best)12.1 ns (1.49× the best)223 ns (1.19× the best)65.6 ns (1.14× the best)25.2 ns (1.30× the best)18.7 ns (1.42× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended535 ns (1.05× the best)74.7 ns (1.02× the best)4.31 ns (7.02× the best)4.44 ns (9.63× the best)209 ns (1.23× the best)15.2 ns (1.88× the best)195 ns (1.04× the best)13.2 ns (tied for the best, within noise)
gf2_122-gls-lambdaincompleteλ-projective515 ns (1.01× the best)265 ns (1.07× the best)114 ns (1.04× the best)76.5 ns (1.05× the best)167 ns (273.01× the best)47.8 ns (34.38× the best)13.1 ns (26.05× the best)7.53 ns (16.36× the best)189 ns (1.12× the best)53.2 ns (1.17× the best)17.7 ns (1.28× the best)11.6 ns (1.44× the best)187 ns (best)57.7 ns (1.01× the best)19.4 ns (best)13.2 ns (tied for the best, within noise, 1.00×)
gf2_122-gls-wincompleteλ-projective, w codec509 ns (tied for the best, within noise, 1.00×)256 ns (1.03× the best)115 ns (1.05× the best)78.6 ns (1.08× the best)0.63 ns (1.03× the best)1.42 ns (1.02× the best)0.51 ns (1.01× the best)0.49 ns (1.06× the best)204 ns (1.21× the best)55.5 ns (1.22× the best)20.6 ns (1.49× the best)14.4 ns (1.79× the best)191 ns (1.02× the best)58.4 ns (1.02× the best)20.1 ns (1.03× the best)14.3 ns (1.08× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec522 ns (1.03× the best)258 ns (1.04× the best)117 ns (1.06× the best)80.2 ns (1.10× the best)0.63 ns (1.02× the best)1.42 ns (1.02× the best)0.51 ns (1.01× the best)0.48 ns (1.04× the best)195 ns (1.15× the best)51.2 ns (1.13× the best)18.1 ns (1.31× the best)12.3 ns (1.52× the best)207 ns (1.10× the best)62.1 ns (1.08× the best)22.6 ns (1.16× the best)16.8 ns (1.27× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended870 ns (1.71× the best)360 ns (1.45× the best)139 ns (1.27× the best)81.7 ns (1.12× the best)2.77 ns (4.51× the best)4.00 ns (2.87× the best)2.83 ns (5.61× the best)2.79 ns (6.06× the best)381 ns (2.25× the best)76.6 ns (1.69× the best)20.3 ns (1.47× the best)10.9 ns (1.36× the best)380 ns (2.03× the best)82.3 ns (1.43× the best)23.5 ns (1.21× the best)14.2 ns (1.08× the best)
gf2_109-lambdaincompleteλ-projective873 ns (1.72× the best)360 ns (1.45× the best)139 ns (1.26× the best)82.0 ns (1.12× the best)349 ns (568.88× the best)68.7 ns (49.37× the best)14.0 ns (27.78× the best)5.17 ns (11.22× the best)366 ns (2.16× the best)73.3 ns (1.62× the best)17.5 ns (1.26× the best)8.13 ns (1.01× the best)381 ns (2.04× the best)82.3 ns (1.44× the best)23.6 ns (1.21× the best)14.1 ns (1.07× the best)
gf2_109-wincompleteλ-projective, w codec855 ns (1.68× the best)346 ns (1.39× the best)131 ns (1.20× the best)79.4 ns (1.09× the best)0.61 ns (tied for the best, within noise)1.40 ns (1.01× the best)0.51 ns (1.01× the best)0.48 ns (1.04× the best)359 ns (2.12× the best)76.3 ns (1.68× the best)19.7 ns (1.42× the best)10.4 ns (1.28× the best)378 ns (2.02× the best)83.9 ns (1.46× the best)24.4 ns (1.26× the best)15.5 ns (1.17× the best)
gf2_109-uunscaled (X:S:Z), w codec874 ns (1.72× the best)349 ns (1.41× the best)135 ns (1.23× the best)81.2 ns (1.11× the best)0.63 ns (1.02× the best)1.42 ns (1.02× the best)0.51 ns (1.01× the best)0.49 ns (1.05× the best)397 ns (2.34× the best)74.5 ns (1.64× the best)19.1 ns (1.38× the best)9.88 ns (1.22× the best)398 ns (2.13× the best)87.4 ns (1.52× the best)26.7 ns (1.38× the best)18.4 ns (1.39× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.07 µs (2.10× the best)1.07 µs (14.65× the best)582 ns (948.36× the best)28.3 ns (61.37× the best)549 ns (3.24× the best)22.0 ns (2.72× the best)489 ns (2.61× the best)486 ns (36.80× the best)
weier127short Weierstrass, projective += affine1.03 µs (2.02× the best)1.04 µs (14.20× the best)0.61 ns (tied for the best, within noise, 1.00×)0.46 ns (tied for the best, within noise, 1.00×)536 ns (3.16× the best)10.1 ns (1.25× the best)489 ns (2.61× the best)485 ns (36.73× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.03 µs (2.03× the best)1.04 µs (14.24× the best)0.62 ns (tied for the best, within noise, 1.01×)0.49 ns (1.06× the best)533 ns (3.14× the best)15.7 ns (1.94× the best)492 ns (2.63× the best)485 ns (36.77× the best)
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached806 ns (1.58× the best)805 ns (11.04× the best)546 ns (889.89× the best)22.7 ns (49.36× the best)506 ns (2.99× the best)20.3 ns (2.51× the best)359 ns (1.92× the best)354 ns (26.79× the best)
weier107short Weierstrass, projective += affine746 ns (1.47× the best)748 ns (10.26× the best)0.62 ns (tied for the best, within noise, 1.01×)0.49 ns (1.07× the best)497 ns (2.93× the best)11.5 ns (1.42× the best)358 ns (1.91× the best)352 ns (26.66× the best)
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine742 ns (1.46× the best)745 ns (10.22× the best)0.62 ns (tied for the best, within noise, 1.00×)0.48 ns (1.04× the best)502 ns (2.96× the best)15.3 ns (1.90× the best)351 ns (1.88× the best)352 ns (26.63× the best)
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached1.92 µs (3.78× the best)1.92 µs (26.36× the best)8.24 ns (13.43× the best)8.08 ns (17.55× the best)939 ns (5.54× the best)16.0 ns (1.98× the best)949 ns (5.07× the best)952 ns (72.09× the best)
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached624 ns (1.23× the best)620 ns (8.50× the best)216 ns (352.47× the best)18.8 ns (40.87× the best)181 ns (1.07× the best)16.2 ns (2.01× the best)405 ns (2.16× the best)404 ns (30.63× the best)
weier61x2short Weierstrass, signed-x codec, projective += affine637 ns (1.25× the best)637 ns (8.73× the best)0.63 ns (1.02× the best)0.72 ns (1.56× the best)170 ns (best)8.11 ns (tied for the best, within noise, 1.00×)416 ns (2.22× the best)412 ns (31.22× the best)
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine638 ns (1.26× the best)638 ns (8.74× the best)0.63 ns (1.02× the best)0.54 ns (1.18× the best)179 ns (1.06× the best)11.7 ns (1.45× the best)417 ns (2.23× the best)413 ns (31.25× the best)
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached630 ns (1.24× the best)646 ns (2.60× the best)641 ns (5.84× the best)632 ns (8.66× the best)3.41 ns (5.55× the best)6.03 ns (4.34× the best)3.80 ns (7.54× the best)3.60 ns (7.81× the best)179 ns (1.05× the best)45.4 ns (best)13.8 ns (best)8.07 ns (tied for the best, within noise)425 ns (2.27× the best)423 ns (7.37× the best)418 ns (21.53× the best)420 ns (31.80× the best)
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached1.10 µs (2.16× the best)1.10 µs (15.08× the best)5.43 ns (8.85× the best)5.51 ns (11.96× the best)290 ns (1.71× the best)10.3 ns (1.28× the best)721 ns (3.85× the best)718 ns (54.39× the best)
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached1.73 µs (3.40× the best)1.75 µs (24.00× the best)4.48 ns (7.30× the best)4.51 ns (9.78× the best)197 ns (1.16× the best)11.3 ns (1.40× the best)1.53 µs (8.18× the best)1.52 µs (114.99× 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.109, pornin, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve55.2 µs55.2 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend64.2 ns41.7 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd12.8 ns12.8 ns
per cellencode10.9 ns10.9 ns
per celldecode14.2 ns14.2 ns
measuredinsertion per item, k = 13.57 cells324 ns265 ns

binary-lambda.109, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve55.2 µs55.2 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend57.7 ns34.2 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd12.0 ns12.0 ns
per cellencode8.13 ns8.13 ns
per celldecode14.1 ns14.1 ns
measuredinsertion per item, k = 13.57 cells303 ns244 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve55.2 µs55.2 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend61.6 ns38.1 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd9.76 ns9.76 ns
per cellencode9.88 ns9.88 ns
per celldecode18.4 ns18.4 ns
measuredinsertion per item, k = 13.57 cells282 ns222 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve55.2 µs55.2 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend57.6 ns34.2 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd12.0 ns12.0 ns
per cellencode10.4 ns10.4 ns
per celldecode15.5 ns15.5 ns
measuredinsertion per item, k = 13.57 cells302 ns239 ns

binary-lambda.122-gls, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve58.6 µs58.6 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend58.8 ns35.0 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd16.6 ns16.6 ns
per cellencode11.6 ns11.6 ns
per celldecode13.2 ns13.2 ns
measuredinsertion per item, k = 13.57 cells342 ns286 ns

binary-u.122-gls, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve58.6 µs58.6 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend60.2 ns36.1 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd13.1 ns13.1 ns
per cellencode12.3 ns12.3 ns
per celldecode16.8 ns16.8 ns
measuredinsertion per item, k = 13.57 cells306 ns252 ns

binary-w.122-gls, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve58.6 µs58.6 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend59.3 ns34.9 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd16.6 ns16.6 ns
per cellencode14.4 ns14.4 ns
per celldecode14.3 ns14.3 ns
measuredinsertion per item, k = 13.57 cells340 ns281 ns

binary-lambda.122, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve55.2 µs55.2 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend59.3 ns33.6 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd16.6 ns16.6 ns
per cellencode11.9 ns11.9 ns
per celldecode13.5 ns13.5 ns
measuredinsertion per item, k = 13.57 cells341 ns284 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve55.2 µs55.2 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend63.2 ns38.8 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd13.1 ns13.1 ns
per cellencode12.1 ns12.1 ns
per celldecode18.7 ns18.7 ns
measuredinsertion per item, k = 13.57 cells308 ns253 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve55.2 µs55.2 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend58.6 ns33.2 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd16.6 ns16.6 ns
per cellencode14.4 ns14.4 ns
per celldecode14.4 ns14.4 ns
measuredinsertion per item, k = 13.57 cells341 ns285 ns

binary.127, pornin, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve56.1 µs56.1 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend62.6 ns39.1 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd14.1 ns14.1 ns
per cellencode13.1 ns13.1 ns
per celldecode14.0 ns14.0 ns
measuredinsertion per item, k = 13.57 cells329 ns273 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve56.1 µs56.1 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend58.4 ns34.1 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd14.9 ns14.9 ns
per cellencode10.1 ns10.1 ns
per celldecode14.0 ns14.0 ns
measuredinsertion per item, k = 13.57 cells326 ns268 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve56.1 µs56.1 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend61.4 ns37.2 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd10.7 ns10.7 ns
per cellencode9.17 ns9.17 ns
per celldecode18.3 ns18.3 ns
measuredinsertion per item, k = 13.57 cells288 ns227 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25633.1 ns33.1 ns
per saltaccept the curve56.1 µs56.1 µs
per saltchecksum keys74.7 ns257 ns
per saltmapping keys74.7 ns257 ns
per salt and itemhash to the addend58.5 ns34.2 ns
per salt and itemmapping seed33.0 ns5.11 ns
per salt and itemmapping walk below m = 135034.2 ns34.2 ns
per celladd14.9 ns14.9 ns
per cellencode10.3 ns10.3 ns
per celldecode15.1 ns15.1 ns
measuredinsertion per item, k = 13.57 cells325 ns268 ns

Curve selection

Curve selection as this run timed it, once per seed (16 seeds): find searches a seed’s candidates for an acceptable curve; prove searches them again and certifies each rejection and the acceptance; verify checks that certificate. The figure shows each family’s method that finds fastest, a bar at the seeds’ mean in a box from the fastest seed to the slowest, and how the prover’s time divides among the search’s phases; the table lists every method (Parameter selection and verification). Accepting a curve (55.2 µs to 67.6 µs, curvegen/verify_accept) includes the embedding-degree bound, a baby-step giant-step search for with , which alone takes 29.6 µs to 30.7 µs (curvegen/embedding), 45% to 55% of it; rejected candidates do not reach it.

Curve selection per family on log time axes: the mean time to find a curve (dark) and to find and certify one (light), with a box from the fastest to the slowest seed; the mean time to verify the certificate; and, as shares of the mean proving time, the time spent deriving candidates, in quick rejection, sieving, point counting, factoring, rejection witnesses and acceptance.Curve selection per family on log time axes: the mean time to find a curve (dark) and to find and certify one (light), with a box from the fastest to the slowest seed; the mean time to verify the certificate; and, as shares of the mean proving time, the time spent deriving candidates, in quick rejection, sieving, point counting, factoring, rejection witnesses and acceptance.

familymethodshownseedscandidatespoint counts (prove)findproveverifycounting, of prove
edwards127pari+sieveyes16202.916.4760 ms1.05 s435 µs87%
edwards61x2pari+sieveyes16122.710.7360 ms503 ms200 µs91%
gf2_109agm1650.150.118.1 ms18.3 ms107 µs97%
gf2_109agm+factoryes1650.150.117.8 ms24.5 ms93.6 µs73%
gf2_109pari1650.150.157.2 ms64.3 ms93.6 µs89%
gf2_122agmyes1639.539.517.6 ms17.2 ms86.8 µs97%
gf2_122pari1639.539.568.0 ms68.0 ms87.7 µs99%
gf2_122-glsagmyes1647.247.25.48 ms5.80 ms107 µs92%
gf2_122-glspari1647.247.279.6 ms80.4 ms111 µs99%
gf2_127agm+sieveyes1683.625.114.6 ms14.5 ms150 µs75%
gf2_127pari1683.683.6184 ms213 ms124 µs87%
twisted-goldilocks2pari+sieveyes16306.928.41.19 s1.67 s596 µs87%
twisted61x2pari+sieveyes16247.922.4803 ms1.06 s272 µs90%
twisted64x2pari+sieveyes16347.128.21.33 s1.79 s545 µs87%
weier127pari+sieveyes16179.019.6888 ms1.25 s210 µs87%
weier61x2pari+sieveyes1697.511.1401 ms533 ms132 µs90%

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 bytes24.2 ns0.71 ns0.38 ns
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas485 ns (1.32× the best)61.5 ns (best)3.88 ns (6.33× the best)3.54 ns (7.69× the best)14.1 ns (1.44× the best)22.0 ns (1.26× the best)14.7 ns (1.49× the best)0.64 ns (1.11× the best)0.81 ns (2.38× the best)2.98 ns (1.86× the best)2.87 ns (1.79× the best)371 ns (2.19× the best)13.1 ns (1.62× the best)367 ns (1.96× the best)14.0 ns (1.06× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators806 ns (2.19× the best)75.6 ns (1.23× the best)456 ns (1.45× the best)53.5 ns (tied for the best, within noise)340 ns (553.91× the best)6.33 ns (13.74× the best)14.9 ns (1.53× the best)20.2 ns (1.15× the best)15.1 ns (1.53× the best)0.65 ns (1.11× the best)0.84 ns (2.47× the best)3.84 ns (2.40× the best)3.81 ns (2.38× the best)361 ns (2.13× the best)10.1 ns (1.25× the best)364 ns (1.95× the best)14.0 ns (1.06× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine865 ns (2.35× the best)83.3 ns (1.36× the best)455 ns (1.44× the best)53.5 ns (tied for the best, within noise)0.63 ns (1.02× the best)0.48 ns (1.05× the best)14.9 ns (1.53× the best)20.2 ns (1.15× the best)14.7 ns (1.49× the best)0.65 ns (1.12× the best)0.84 ns (2.47× the best)3.86 ns (2.41× the best)3.84 ns (2.40× the best)361 ns (2.13× the best)10.3 ns (1.28× the best)361 ns (1.93× the best)15.1 ns (1.14× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes869 ns (2.36× the best)85.8 ns (1.40× the best)461 ns (1.46× the best)57.2 ns (1.07× the best)0.63 ns (1.03× the best)0.49 ns (1.06× the best)10.7 ns (1.09× the best)17.5 ns (best)10.8 ns (1.09× the best)0.64 ns (1.09× the best)0.84 ns (2.47× the best)4.67 ns (2.92× the best)4.68 ns (2.92× the best)355 ns (2.09× the best)9.17 ns (1.14× the best)376 ns (2.01× the best)18.3 ns (1.39× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended373 ns (1.01× the best)62.8 ns (1.02× the best)4.92 ns (8.02× the best)5.02 ns (10.91× the best)17.8 ns (1.83× the best)26.1 ns (1.49× the best)0.63 ns (1.08× the best)0.77 ns (2.28× the best)3.75 ns (2.34× the best)211 ns (1.24× the best)15.7 ns (1.94× the best)197 ns (1.05× the best)13.5 ns (1.02× the best)
gf2_122-lambdaincompleteλ-projective509 ns (1.38× the best)74.9 ns (1.22× the best)326 ns (1.04× the best)53.9 ns (1.01× the best)166 ns (271.21× the best)7.55 ns (16.38× the best)16.6 ns (1.70× the best)23.0 ns (1.32× the best)16.7 ns (1.69× the best)0.65 ns (1.12× the best)0.77 ns (2.28× the best)3.78 ns (2.36× the best)3.79 ns (2.37× the best)189 ns (1.12× the best)11.9 ns (1.48× the best)196 ns (1.04× the best)13.5 ns (1.02× the best)
gf2_122-wincompleteλ-projective, w codec517 ns (1.40× the best)76.8 ns (1.25× the best)326 ns (1.04× the best)54.0 ns (1.01× the best)0.63 ns (1.03× the best)0.46 ns (tied for the best, within noise)16.6 ns (1.70× the best)23.0 ns (1.31× the best)17.1 ns (1.73× the best)0.65 ns (1.12× the best)0.77 ns (2.28× the best)3.77 ns (2.36× the best)3.79 ns (2.37× the best)204 ns (1.21× the best)14.4 ns (1.79× the best)193 ns (1.03× the best)14.4 ns (1.09× the best)
gf2_122-uunscaled (X:S:Z), w codec531 ns (1.44× the best)87.6 ns (1.43× the best)326 ns (1.03× the best)57.1 ns (1.07× the best)0.61 ns (tied for the best, within noise, 1.00×)0.48 ns (1.04× the best)13.1 ns (1.34× the best)18.8 ns (1.08× the best)13.2 ns (1.34× the best)0.65 ns (1.12× the best)0.77 ns (2.28× the best)5.31 ns (3.32× the best)5.34 ns (3.34× the best)206 ns (1.22× the best)12.1 ns (1.49× the best)223 ns (1.19× the best)18.7 ns (1.42× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended369 ns (best)62.0 ns (1.01× the best)4.31 ns (7.02× the best)4.44 ns (9.63× the best)16.8 ns (1.72× the best)23.7 ns (1.36× the best)1.12 ns (1.93× the best)0.77 ns (2.27× the best)3.79 ns (2.37× the best)209 ns (1.23× the best)15.2 ns (1.88× the best)195 ns (1.04× the best)13.2 ns (tied for the best, within noise)
gf2_122-gls-lambdaincompleteλ-projective515 ns (1.40× the best)76.5 ns (1.24× the best)315 ns (tied for the best, within noise)55.4 ns (1.04× the best)167 ns (273.01× the best)7.53 ns (16.36× the best)16.6 ns (1.70× the best)23.1 ns (1.32× the best)16.7 ns (1.69× the best)0.65 ns (1.11× the best)0.78 ns (2.28× the best)3.79 ns (2.37× the best)3.79 ns (2.37× the best)189 ns (1.12× the best)11.6 ns (1.44× the best)187 ns (best)13.2 ns (tied for the best, within noise, 1.00×)
gf2_122-gls-wincompleteλ-projective, w codec509 ns (1.38× the best)78.6 ns (1.28× the best)316 ns (tied for the best, within noise, 1.00×)55.4 ns (1.04× the best)0.63 ns (1.03× the best)0.49 ns (1.06× the best)16.6 ns (1.70× the best)23.1 ns (1.32× the best)16.8 ns (1.70× the best)0.65 ns (1.12× the best)0.78 ns (2.28× the best)3.79 ns (2.37× the best)3.79 ns (2.37× the best)204 ns (1.21× the best)14.4 ns (1.79× the best)191 ns (1.02× the best)14.3 ns (1.08× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec522 ns (1.42× the best)80.2 ns (1.30× the best)319 ns (1.01× the best)55.7 ns (1.04× the best)0.63 ns (1.02× the best)0.48 ns (1.04× the best)13.1 ns (1.34× the best)18.9 ns (1.08× the best)13.2 ns (1.34× the best)0.65 ns (1.12× the best)0.78 ns (2.29× the best)5.32 ns (3.32× the best)5.31 ns (3.32× the best)195 ns (1.15× the best)12.3 ns (1.52× the best)207 ns (1.10× the best)16.8 ns (1.27× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended560 ns (1.52× the best)63.7 ns (1.04× the best)2.77 ns (4.51× the best)2.79 ns (6.06× the best)12.8 ns (1.32× the best)24.3 ns (1.39× the best)13.2 ns (1.34× the best)0.63 ns (1.08× the best)0.64 ns (1.87× the best)2.24 ns (1.40× the best)2.28 ns (1.43× the best)381 ns (2.25× the best)10.9 ns (1.36× the best)380 ns (2.03× the best)14.2 ns (1.08× the best)
gf2_109-lambdaincompleteλ-projective873 ns (2.37× the best)82.0 ns (1.33× the best)550 ns (1.75× the best)55.2 ns (1.03× the best)349 ns (568.88× the best)5.17 ns (11.22× the best)12.0 ns (1.23× the best)24.2 ns (1.38× the best)12.1 ns (1.22× the best)0.65 ns (1.11× the best)0.56 ns (1.64× the best)1.60 ns (best)1.60 ns (best)366 ns (2.16× the best)8.13 ns (1.01× the best)381 ns (2.04× the best)14.1 ns (1.07× the best)
gf2_109-wincompleteλ-projective, w codec855 ns (2.32× the best)79.4 ns (1.29× the best)535 ns (1.70× the best)54.5 ns (1.02× the best)0.61 ns (tied for the best, within noise)0.48 ns (1.04× the best)12.0 ns (1.23× the best)24.2 ns (1.38× the best)12.1 ns (1.23× the best)0.65 ns (1.12× the best)0.56 ns (1.64× the best)1.82 ns (1.13× the best)1.82 ns (1.14× the best)359 ns (2.12× the best)10.4 ns (1.28× the best)378 ns (2.02× the best)15.5 ns (1.17× the best)
gf2_109-uunscaled (X:S:Z), w codec874 ns (2.37× the best)81.2 ns (1.32× the best)533 ns (1.69× the best)60.7 ns (1.13× the best)0.63 ns (1.02× the best)0.49 ns (1.05× the best)9.76 ns (best)19.0 ns (1.09× the best)9.88 ns (best)0.65 ns (1.12× the best)0.56 ns (1.64× the best)3.46 ns (2.16× the best)3.50 ns (2.19× the best)397 ns (2.34× the best)9.88 ns (1.22× the best)398 ns (2.13× the best)18.4 ns (1.39× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.07 µs (2.90× the best)1.07 µs (17.39× the best)582 ns (948.36× the best)28.3 ns (61.37× the best)20.1 ns (2.06× the best)22.2 ns (1.27× the best)1.34 ns (2.30× the best)0.38 ns (1.12× the best)1.97 ns (1.23× the best)549 ns (3.24× the best)22.0 ns (2.72× the best)489 ns (2.61× the best)486 ns (36.80× the best)
weier127short Weierstrass, projective += affine1.03 µs (2.79× the best)1.04 µs (16.85× the best)0.61 ns (tied for the best, within noise, 1.00×)0.46 ns (tied for the best, within noise, 1.00×)45.4 ns (4.65× the best)46.7 ns (2.67× the best)0.69 ns (1.18× the best)0.34 ns (tied for the best, within noise, 1.00×)2.05 ns (1.28× the best)536 ns (3.16× the best)10.1 ns (1.25× the best)489 ns (2.61× the best)485 ns (36.73× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.03 µs (2.80× the best)1.04 µs (16.90× the best)0.62 ns (tied for the best, within noise, 1.01×)0.49 ns (1.06× the best)37.5 ns (3.84× the best)45.3 ns (2.59× the best)0.69 ns (1.18× the best)0.34 ns (tied for the best, within noise)4.53 ns (2.83× the best)533 ns (3.14× the best)15.7 ns (1.94× the best)492 ns (2.63× the best)485 ns (36.77× the best)
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached806 ns (2.19× the best)805 ns (13.10× the best)546 ns (889.89× the best)22.7 ns (49.36× the best)15.5 ns (1.59× the best)18.4 ns (1.05× the best)0.83 ns (1.42× the best)0.75 ns (2.20× the best)3.05 ns (1.91× the best)506 ns (2.99× the best)20.3 ns (2.51× the best)359 ns (1.92× the best)354 ns (26.79× the best)
weier107short Weierstrass, projective += affine746 ns (2.02× the best)748 ns (12.17× the best)0.62 ns (tied for the best, within noise, 1.01×)0.49 ns (1.07× the best)30.5 ns (3.12× the best)32.4 ns (1.85× the best)0.58 ns (tied for the best, within noise)0.84 ns (2.48× the best)3.63 ns (2.27× the best)497 ns (2.93× the best)11.5 ns (1.42× the best)358 ns (1.91× the best)352 ns (26.66× the best)
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine742 ns (2.01× the best)745 ns (12.13× the best)0.62 ns (tied for the best, within noise, 1.00×)0.48 ns (1.04× the best)28.7 ns (2.94× the best)35.5 ns (2.03× the best)0.58 ns (tied for the best, within noise)0.84 ns (2.48× the best)5.96 ns (3.73× the best)502 ns (2.96× the best)15.3 ns (1.90× the best)351 ns (1.88× the best)352 ns (26.63× the best)
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached1.92 µs (5.22× the best)1.92 µs (31.28× the best)8.24 ns (13.43× the best)8.08 ns (17.55× the best)23.9 ns (2.45× the best)28.8 ns (1.65× the best)0.85 ns (1.46× the best)0.34 ns (1.01× the best)7.51 ns (4.69× the best)939 ns (5.54× the best)16.0 ns (1.98× the best)949 ns (5.07× the best)952 ns (72.09× the best)
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached624 ns (1.69× the best)620 ns (10.09× the best)216 ns (352.47× the best)18.8 ns (40.87× the best)13.3 ns (1.37× the best)22.5 ns (1.29× the best)0.88 ns (1.51× the best)0.38 ns (1.12× the best)1.65 ns (1.03× the best)181 ns (1.07× the best)16.2 ns (2.01× the best)405 ns (2.16× the best)404 ns (30.63× the best)
weier61x2short Weierstrass, signed-x codec, projective += affine637 ns (1.73× the best)637 ns (10.36× the best)0.63 ns (1.02× the best)0.72 ns (1.56× the best)26.8 ns (2.74× the best)36.2 ns (2.07× the best)0.66 ns (1.13× the best)0.52 ns (1.55× the best)1.70 ns (1.06× the best)170 ns (best)8.11 ns (tied for the best, within noise, 1.00×)416 ns (2.22× the best)412 ns (31.22× the best)
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine638 ns (1.73× the best)638 ns (10.37× the best)0.63 ns (1.02× the best)0.54 ns (1.18× the best)31.6 ns (3.24× the best)37.2 ns (2.13× the best)0.66 ns (1.13× the best)0.52 ns (1.54× the best)3.59 ns (2.24× the best)179 ns (1.06× the best)11.7 ns (1.45× the best)417 ns (2.23× the best)413 ns (31.25× the best)
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached630 ns (1.71× the best)632 ns (10.28× the best)3.41 ns (5.55× the best)3.60 ns (7.81× the best)12.5 ns (1.28× the best)22.3 ns (1.28× the best)12.8 ns (1.29× the best)0.91 ns (1.56× the best)0.34 ns (1.01× the best)3.32 ns (2.07× the best)3.32 ns (2.07× the best)179 ns (1.05× the best)8.07 ns (tied for the best, within noise)425 ns (2.27× the best)420 ns (31.80× the best)
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached1.10 µs (2.98× the best)1.10 µs (17.90× the best)5.43 ns (8.85× the best)5.51 ns (11.96× the best)17.2 ns (1.77× the best)28.6 ns (1.64× the best)0.91 ns (1.56× the best)0.34 ns (1.02× the best)5.39 ns (3.36× the best)290 ns (1.71× the best)10.3 ns (1.28× the best)721 ns (3.85× the best)718 ns (54.39× the best)
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached1.73 µs (4.70× the best)1.75 µs (28.48× the best)4.48 ns (7.30× the best)4.51 ns (9.78× the best)15.0 ns (1.54× the best)19.0 ns (1.09× the best)1.49 ns (2.55× the best)0.52 ns (1.55× the best)4.92 ns (3.07× the best)197 ns (1.16× the best)11.3 ns (1.40× the best)1.53 µs (8.18× the best)1.52 µs (114.99× the best)
references, 32 and 33 bytes
ristretto255curve25519-dalek4.72 µs (12.80× the best)65.1 ns (6.67× the best)63.8 ns (3.65× the best)64.4 ns (6.52× the best)6.20 ns (10.64× the best)
secp256k1libsecp256k14.49 µs (12.17× the best)12.8 ns (22.01× 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)1.21 ns (1.17× the best)3.75 ns (1.29× the best)0.70 ns (best)2.08 ns (best)xor1.26 ns (best)4.11 ns (1.53× the best)317 ns (2.00× the best)3.60 ns (1.03× the best)
gf2_122GF(2^61)[u]/(u^2 + u + 1)1.21 ns (1.17× the best)4.90 ns (1.69× the best)1.09 ns (1.55× the best)4.44 ns (2.13× the best)xor2.95 ns (2.35× the best)2.69 ns (best)159 ns (tied for the best, within noise, 1.00×)4.47 ns (1.28× the best)
gf2_109F_2[z]/(z^109 + z^5 + z^4 + z^2 + 1)1.04 ns (best)3.92 ns (1.35× the best)0.83 ns (1.19× the best)2.17 ns (1.04× the best)xor2.77 ns (2.21× the best)3.32 ns (1.24× the best)341 ns (2.15× the best)3.49 ns (best)
prime
fp127p = 2^127 − 11.50 ns (1.45× the best)3.82 ns (1.32× the best)1.78 ns (2.54× the best)3.57 ns (1.71× the best)0.83 ns (1.62× the best)470 ns (374.16× the best)518 ns (1.87× the best)520 ns (3.28× the best)5.64 ns (1.61× the best)0.34 ns (1.01× the best)0.51 ns (best)
fp107p = 2^107 − 11.15 ns (1.11× the best)3.20 ns (1.10× the best)0.97 ns (1.39× the best)3.01 ns (1.44× the best)0.51 ns (best)341 ns (271.16× the best)482 ns (1.74× the best)477 ns (3.01× the best)5.23 ns (1.50× the best)0.67 ns (1.96× the best)0.51 ns (1.00× the best)
fp128p = 2^128 − 275, for twisted1282.77 ns (2.66× the best)6.58 ns (2.27× the best)2.58 ns (3.68× the best)6.37 ns (3.06× the best)0.89 ns (1.74× the best)878 ns (698.88× the best)932 ns (3.36× the best)933 ns (5.88× the best)0.34 ns (1.00× the best)0.51 ns (1.00× the best)
quadratic extensions of prime fields
fp61x2GF(p^2) = F_p[i]/(i^2 + 1), p = 2^61 − 11.26 ns (1.21× the best)3.30 ns (1.14× the best)1.40 ns (1.99× the best)3.48 ns (1.67× the best)0.53 ns (1.04× the best)277 ns (220.65× the best)277 ns (best)159 ns (tied for the best, within noise)4.67 ns (1.34× the best)0.34 ns (best)0.72 ns (1.42× the best)
fp64x2GF(p^2) = F_p[i]/(i^2 − 2), p = 2^64 − 592.24 ns (2.15× the best)5.08 ns (1.75× the best)2.23 ns (3.19× the best)4.92 ns (2.36× the best)0.56 ns (1.10× the best)485 ns (385.97× the best)481 ns (1.74× the best)281 ns (1.77× the best)5.77 ns (1.65× the best)0.34 ns (1.00× the best)0.55 ns (1.08× the best)
goldilocks2GF(p^2) = F_p[i]/(i^2 − 7), p = 2^64 − 2^32 + 11.36 ns (1.31× the best)2.90 ns (best)1.69 ns (2.42× the best)3.43 ns (1.65× the best)0.59 ns (1.16× the best)727 ns (578.68× the best)677 ns (2.44× the best)186 ns (1.17× the best)5.87 ns (1.68× the best)0.40 ns (1.16× the best)0.55 ns (1.09× 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.

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)1.21 ns1.21 ns .. 1.21 ns
field mul, throughputgf2_109field/gf2_109/mul throughput (8 chains)1.04 ns1.04 ns .. 1.04 ns
field mul, throughputgf2_122field/gf2_122/mul throughput (8 chains)1.21 ns1.21 ns .. 1.21 ns
field mul, throughputfp127field/fp127/mul throughput (8 chains)1.50 ns1.50 ns .. 1.50 ns
field mul, throughputfp107field/fp107 schoolbook/mul throughput (8 chains)1.15 ns1.15 ns .. 1.15 ns
field mul, throughputfp128field/fp128/mul throughput (8 chains)2.77 ns2.77 ns .. 2.77 ns
field mul, throughputfp61x2field/fp61x2/mul throughput (8 chains)1.26 ns1.26 ns .. 1.26 ns
field mul, throughputfp64x2field/fp64x2/mul throughput (8 chains)2.24 ns2.24 ns .. 2.24 ns
field mul, throughputgoldilocks2field/goldilocks2/mul throughput (8 chains)1.36 ns1.35 ns .. 1.38 ns
field mul, latencygf2_127field/gf2_127/mul latency (dependent chain)3.75 ns3.74 ns .. 3.77 ns
field mul, latencygf2_109field/gf2_109/mul latency (dependent chain)3.92 ns3.91 ns .. 3.93 ns
field mul, latencygf2_122field/gf2_122/mul latency (dependent chain)4.90 ns4.90 ns .. 4.90 ns
field mul, latencyfp127field/fp127/mul latency (dependent chain)3.82 ns3.81 ns .. 3.82 ns
field mul, latencyfp107field/fp107 schoolbook/mul latency (dependent chain)3.20 ns3.20 ns .. 3.21 ns
field mul, latencyfp128field/fp128/mul latency (dependent chain)6.58 ns6.57 ns .. 6.58 ns
field mul, latencyfp61x2field/fp61x2/mul latency (dependent chain)3.30 ns3.30 ns .. 3.31 ns
field mul, latencyfp64x2field/fp64x2/mul latency (dependent chain)5.08 ns5.07 ns .. 5.09 ns
field mul, latencygoldilocks2field/goldilocks2/mul latency (dependent chain)2.90 ns2.90 ns .. 2.90 ns
field square, throughputgf2_127field/gf2_127/square throughput (8 chains)0.70 ns0.70 ns .. 0.70 ns
field square, throughputgf2_109field/gf2_109/square throughput (8 chains)0.83 ns0.83 ns .. 0.84 ns
field square, throughputgf2_122field/gf2_122/square throughput (8 chains)1.09 ns1.09 ns .. 1.09 ns
field square, throughputfp127field/fp127/square throughput (8 chains)1.78 ns1.78 ns .. 1.78 ns
field square, throughputfp107field/fp107/square throughput (8 chains)0.97 ns0.97 ns .. 0.97 ns
field square, throughputfp128field/fp128/square throughput (8 chains)2.58 ns2.58 ns .. 2.58 ns
field square, throughputfp61x2field/fp61x2/square throughput (8 chains)1.40 ns1.39 ns .. 1.40 ns
field square, throughputfp64x2field/fp64x2/square throughput (8 chains)2.23 ns2.23 ns .. 2.24 ns
field square, throughputgoldilocks2field/goldilocks2/square throughput (8 chains)1.69 ns1.68 ns .. 1.71 ns
field square, latencygf2_127field/gf2_127/square latency (dependent chain)2.08 ns2.08 ns .. 2.09 ns
field square, latencygf2_109field/gf2_109/square latency (dependent chain)2.17 ns2.16 ns .. 2.17 ns
field square, latencygf2_122field/gf2_122/square latency (dependent chain)4.44 ns4.43 ns .. 4.44 ns
field square, latencyfp127field/fp127/square latency (dependent chain)3.57 ns3.56 ns .. 3.57 ns
field square, latencyfp107field/fp107/square latency (dependent chain)3.01 ns3.00 ns .. 3.02 ns
field square, latencyfp128field/fp128/square latency (dependent chain)6.37 ns6.36 ns .. 6.37 ns
field square, latencyfp61x2field/fp61x2/square latency (dependent chain)3.48 ns3.48 ns .. 3.49 ns
field square, latencyfp64x2field/fp64x2/square latency (dependent chain)4.92 ns4.91 ns .. 4.92 ns
field square, latencygoldilocks2field/goldilocks2/square latency (dependent chain)3.43 ns3.43 ns .. 3.44 ns
field addfp127field/fp127/add0.83 ns0.83 ns .. 0.83 ns
field addfp107field/fp107/add0.51 ns0.50 ns .. 0.52 ns
field addfp128field/fp128/add0.89 ns0.89 ns .. 0.89 ns
field addfp61x2field/fp61x2/add0.53 ns0.53 ns .. 0.53 ns
field addfp64x2field/fp64x2/add0.56 ns0.56 ns .. 0.57 ns
field addgoldilocks2field/goldilocks2/add0.59 ns0.59 ns .. 0.59 ns
field sqrtgf2_127field/gf2_127/sqrt1.26 ns1.26 ns .. 1.26 ns
field sqrtgf2_109field/gf2_109/sqrt2.77 ns2.77 ns .. 2.78 ns
field sqrtgf2_122field/gf2_122/sqrt2.95 ns2.95 ns .. 2.95 ns
field sqrtfp127field/fp127/sqrt (x^(2^125))470 ns468 ns .. 472 ns
field sqrtfp107field/fp107/sqrt (x^(2^105))341 ns340 ns .. 341 ns
field sqrtfp128field/fp128/sqrt878 ns877 ns .. 878 ns
field sqrtfp61x2field/fp61x2/sqrt277 ns277 ns .. 277 ns
field sqrtfp64x2field/fp64x2/sqrt485 ns485 ns .. 485 ns
field sqrtgoldilocks2field/goldilocks2/sqrt727 ns724 ns .. 730 ns
field sqrt ratiofp127field/fp127/sqrt_ratio518 ns517 ns .. 519 ns
field sqrt ratiofp107field/fp107/sqrt_ratio482 ns482 ns .. 482 ns
field sqrt ratiofp128field/fp128/sqrt_ratio932 ns932 ns .. 933 ns
field sqrt ratiofp61x2field/fp61x2/sqrt_ratio277 ns277 ns .. 278 ns
field sqrt ratiofp64x2field/fp64x2/sqrt_ratio481 ns481 ns .. 482 ns
field sqrt ratiogoldilocks2field/goldilocks2/sqrt_ratio677 ns676 ns .. 678 ns
field halftracegf2_127field/gf2_127/halftrace (byte tables)4.11 ns4.11 ns .. 4.11 ns
field halftracegf2_109field/gf2_109/halftrace (byte tables)3.32 ns3.32 ns .. 3.33 ns
field halftracegf2_122field/gf2_122/qsolve (z^2 + z = c, 2 base halftraces)2.69 ns2.68 ns .. 2.69 ns
field invert, one at a timegf2_127field/gf2_127/invert317 ns317 ns .. 318 ns
field invert, one at a timegf2_109field/gf2_109/invert341 ns340 ns .. 343 ns
field invert, one at a timegf2_122field/gf2_122/invert159 ns159 ns .. 159 ns
field invert, one at a timefp127field/fp127/invert520 ns518 ns .. 522 ns
field invert, one at a timefp107field/fp107/invert477 ns477 ns .. 478 ns
field invert, one at a timefp128field/fp128/invert933 ns932 ns .. 934 ns
field invert, one at a timefp61x2field/fp61x2/invert159 ns159 ns .. 159 ns
field invert, one at a timefp64x2field/fp64x2/invert281 ns280 ns .. 281 ns
field invert, one at a timegoldilocks2field/goldilocks2/invert186 ns182 ns .. 190 ns
field invert, batchedgf2_127field/gf2_127/batch invert (product tree)3.60 ns3.60 ns .. 3.61 ns
field invert, batchedgf2_109field/gf2_109/batch invert (product tree)3.49 ns3.49 ns .. 3.50 ns
field invert, batchedgf2_122field/gf2_122/batch invert (product tree)4.47 ns4.47 ns .. 4.47 ns
field invert, batchedfp127field/fp127/batch invert (product tree)5.64 ns5.64 ns .. 5.64 ns
field invert, batchedfp107field/fp107/batch invert (product tree)5.23 ns5.22 ns .. 5.23 ns
field invert, batchedfp61x2field/fp61x2/batch invert (product tree)4.67 ns4.66 ns .. 4.67 ns
field invert, batchedfp64x2field/fp64x2/batch invert (product tree)5.77 ns5.77 ns .. 5.78 ns
field invert, batchedgoldilocks2field/goldilocks2/batch invert (product tree)5.87 ns5.85 ns .. 5.89 ns
field packfp127field/fp127/pack0.34 ns0.34 ns .. 0.34 ns
field packfp107field/fp107/pack0.67 ns0.67 ns .. 0.67 ns
field packfp128field/fp128/pack0.34 ns0.34 ns .. 0.34 ns
field packfp61x2field/fp61x2/pack0.34 ns0.34 ns .. 0.34 ns
field packfp64x2field/fp64x2/pack0.34 ns0.34 ns .. 0.34 ns
field packgoldilocks2field/goldilocks2/pack0.40 ns0.40 ns .. 0.40 ns
field unpackfp127field/fp127/unpack0.51 ns0.51 ns .. 0.51 ns
field unpackfp107field/fp107/unpack0.51 ns0.51 ns .. 0.51 ns
field unpackfp128field/fp128/unpack0.51 ns0.51 ns .. 0.51 ns
field unpackfp61x2field/fp61x2/unpack0.72 ns0.72 ns .. 0.72 ns
field unpackfp64x2field/fp64x2/unpack0.55 ns0.55 ns .. 0.55 ns
field unpackgoldilocks2field/goldilocks2/unpack0.55 ns0.55 ns .. 0.55 ns
point add, throughputxoradd/xor-sha256/xor 32B, 8 accumulators0.71 ns0.70 ns .. 0.71 ns
point add, throughputgf2_127group.add/binary.127/mode=throughput14.1 ns14.1 ns .. 14.1 ns
point add, throughputgf2_127-lambdagroup.add/binary-lambda.127/mode=throughput14.9 ns14.9 ns .. 14.9 ns
point add, throughputgf2_127-wgroup.add/binary-w.127/mode=throughput14.9 ns14.8 ns .. 14.9 ns
point add, throughputgf2_127-ugroup.add/binary-u.127/mode=throughput10.7 ns10.6 ns .. 10.7 ns
point add, throughputgf2_109group.add/binary.109/mode=throughput12.8 ns12.8 ns .. 12.9 ns
point add, throughputgf2_109-lambdagroup.add/binary-lambda.109/mode=throughput12.0 ns12.0 ns .. 12.0 ns
point add, throughputgf2_109-wgroup.add/binary-w.109/mode=throughput12.0 ns11.9 ns .. 12.0 ns
point add, throughputgf2_109-ugroup.add/binary-u.109/mode=throughput9.76 ns9.74 ns .. 9.78 ns
point add, throughputgf2_122group.add/binary.122/mode=throughput17.8 ns17.8 ns .. 17.9 ns
point add, throughputgf2_122-lambdagroup.add/binary-lambda.122/mode=throughput16.6 ns16.5 ns .. 16.6 ns
point add, throughputgf2_122-wgroup.add/binary-w.122/mode=throughput16.6 ns16.5 ns .. 16.6 ns
point add, throughputgf2_122-ugroup.add/binary-u.122/mode=throughput13.1 ns13.0 ns .. 13.1 ns
point add, throughputgf2_122-glsgroup.add/binary.122-gls/mode=throughput16.8 ns16.7 ns .. 16.8 ns
point add, throughputgf2_122-gls-lambdagroup.add/binary-lambda.122-gls/mode=throughput16.6 ns16.5 ns .. 16.6 ns
point add, throughputgf2_122-gls-wgroup.add/binary-w.122-gls/mode=throughput16.6 ns16.5 ns .. 16.6 ns
point add, throughputgf2_122-gls-ugroup.add/binary-u.122-gls/mode=throughput13.1 ns13.1 ns .. 13.1 ns
point add, throughputedwards127group.add/edwards.127/mode=throughput20.1 ns20.0 ns .. 20.1 ns
point add, throughputedwards107group.add/edwards.107/mode=throughput15.5 ns15.4 ns .. 15.5 ns
point add, throughputtwisted128group.add/twisted.128/mode=throughput23.9 ns23.8 ns .. 24.0 ns
point add, throughputweier127group.add/weier.127/mode=throughput45.4 ns45.3 ns .. 45.5 ns
point add, throughputweier127-jacobiangroup.add/weier-jacobian.127/mode=throughput37.5 ns37.4 ns .. 37.6 ns
point add, throughputweier107group.add/weier.107/mode=throughput30.5 ns30.4 ns .. 30.5 ns
point add, throughputweier107-jacobiangroup.add/weier-jacobian.107/mode=throughput28.7 ns28.6 ns .. 28.7 ns
point add, throughputedwards61x2group.add/edwards.61x2/mode=throughput13.3 ns13.3 ns .. 13.4 ns
point add, throughputweier61x2group.add/weier.61x2/mode=throughput26.8 ns26.7 ns .. 26.8 ns
point add, throughputweier61x2-jacobiangroup.add/weier-jacobian.61x2/mode=throughput31.6 ns31.6 ns .. 31.7 ns
point add, throughputtwisted61x2group.add/twisted.61x2/mode=throughput12.5 ns12.4 ns .. 12.6 ns
point add, throughputtwisted64x2group.add/twisted.64x2/mode=throughput17.2 ns17.2 ns .. 17.3 ns
point add, throughputtwisted-goldilocks2group.add/twisted.goldilocks2/mode=throughput15.0 ns15.0 ns .. 15.1 ns
point add, throughputristretto255add/ristretto255/+=, 8 accumulators65.1 ns64.8 ns .. 65.5 ns
point add, latencyxoradd/xor-sha256/xor 32B, 1 accumulator0.38 ns0.37 ns .. 0.38 ns
point add, latencygf2_127group.add/binary.127/mode=latency22.0 ns21.9 ns .. 22.0 ns
point add, latencygf2_127-lambdagroup.add/binary-lambda.127/mode=latency20.2 ns20.1 ns .. 20.2 ns
point add, latencygf2_127-wgroup.add/binary-w.127/mode=latency20.2 ns20.1 ns .. 20.2 ns
point add, latencygf2_127-ugroup.add/binary-u.127/mode=latency17.5 ns17.4 ns .. 17.5 ns
point add, latencygf2_109group.add/binary.109/mode=latency24.3 ns24.2 ns .. 24.4 ns
point add, latencygf2_109-lambdagroup.add/binary-lambda.109/mode=latency24.2 ns24.1 ns .. 24.3 ns
point add, latencygf2_109-wgroup.add/binary-w.109/mode=latency24.2 ns24.2 ns .. 24.3 ns
point add, latencygf2_109-ugroup.add/binary-u.109/mode=latency19.0 ns18.9 ns .. 19.0 ns
point add, latencygf2_122group.add/binary.122/mode=latency26.1 ns26.1 ns .. 26.2 ns
point add, latencygf2_122-lambdagroup.add/binary-lambda.122/mode=latency23.0 ns23.0 ns .. 23.1 ns
point add, latencygf2_122-wgroup.add/binary-w.122/mode=latency23.0 ns22.9 ns .. 23.0 ns
point add, latencygf2_122-ugroup.add/binary-u.122/mode=latency18.8 ns18.8 ns .. 18.9 ns
point add, latencygf2_122-glsgroup.add/binary.122-gls/mode=latency23.7 ns23.7 ns .. 23.8 ns
point add, latencygf2_122-gls-lambdagroup.add/binary-lambda.122-gls/mode=latency23.1 ns23.1 ns .. 23.2 ns
point add, latencygf2_122-gls-wgroup.add/binary-w.122-gls/mode=latency23.1 ns23.0 ns .. 23.1 ns
point add, latencygf2_122-gls-ugroup.add/binary-u.122-gls/mode=latency18.9 ns18.8 ns .. 18.9 ns
point add, latencyedwards127group.add/edwards.127/mode=latency22.2 ns22.2 ns .. 22.2 ns
point add, latencyedwards107group.add/edwards.107/mode=latency18.4 ns18.3 ns .. 18.4 ns
point add, latencytwisted128group.add/twisted.128/mode=latency28.8 ns28.7 ns .. 28.8 ns
point add, latencyweier127group.add/weier.127/mode=latency46.7 ns46.5 ns .. 46.8 ns
point add, latencyweier127-jacobiangroup.add/weier-jacobian.127/mode=latency45.3 ns45.1 ns .. 45.6 ns
point add, latencyweier107group.add/weier.107/mode=latency32.4 ns32.3 ns .. 32.4 ns
point add, latencyweier107-jacobiangroup.add/weier-jacobian.107/mode=latency35.5 ns35.4 ns .. 35.6 ns
point add, latencyedwards61x2group.add/edwards.61x2/mode=latency22.5 ns22.4 ns .. 22.5 ns
point add, latencyweier61x2group.add/weier.61x2/mode=latency36.2 ns36.2 ns .. 36.3 ns
point add, latencyweier61x2-jacobiangroup.add/weier-jacobian.61x2/mode=latency37.2 ns37.1 ns .. 37.3 ns
point add, latencytwisted61x2group.add/twisted.61x2/mode=latency22.3 ns22.3 ns .. 22.3 ns
point add, latencytwisted64x2group.add/twisted.64x2/mode=latency28.6 ns28.5 ns .. 28.7 ns
point add, latencytwisted-goldilocks2group.add/twisted.goldilocks2/mode=latency19.0 ns18.9 ns .. 19.0 ns
point add, latencyristretto255add/ristretto255/+=, 1 accumulator63.8 ns63.7 ns .. 63.8 ns
point subtractgf2_127group.sub/binary.127/mode=throughput14.7 ns14.7 ns .. 14.7 ns
point subtractgf2_127-lambdagroup.sub/binary-lambda.127/mode=throughput15.1 ns15.1 ns .. 15.2 ns
point subtractgf2_127-wgroup.sub/binary-w.127/mode=throughput14.7 ns14.6 ns .. 14.8 ns
point subtractgf2_127-ugroup.sub/binary-u.127/mode=throughput10.8 ns10.7 ns .. 10.8 ns
point subtractgf2_109group.sub/binary.109/mode=throughput13.2 ns13.2 ns .. 13.3 ns
point subtractgf2_109-lambdagroup.sub/binary-lambda.109/mode=throughput12.1 ns12.1 ns .. 12.1 ns
point subtractgf2_109-wgroup.sub/binary-w.109/mode=throughput12.1 ns12.1 ns .. 12.1 ns
point subtractgf2_109-ugroup.sub/binary-u.109/mode=throughput9.88 ns9.86 ns .. 9.90 ns
point subtractgf2_122-lambdagroup.sub/binary-lambda.122/mode=throughput16.7 ns16.7 ns .. 16.8 ns
point subtractgf2_122-wgroup.sub/binary-w.122/mode=throughput17.1 ns16.7 ns .. 17.5 ns
point subtractgf2_122-ugroup.sub/binary-u.122/mode=throughput13.2 ns13.2 ns .. 13.2 ns
point subtractgf2_122-gls-lambdagroup.sub/binary-lambda.122-gls/mode=throughput16.7 ns16.7 ns .. 16.8 ns
point subtractgf2_122-gls-wgroup.sub/binary-w.122-gls/mode=throughput16.8 ns16.7 ns .. 16.9 ns
point subtractgf2_122-gls-ugroup.sub/binary-u.122-gls/mode=throughput13.2 ns13.2 ns .. 13.2 ns
point subtracttwisted61x2group.sub/twisted.61x2/mode=throughput12.8 ns12.7 ns .. 12.8 ns
point subtractristretto255add/ristretto255/-=, 8 accumulators64.4 ns64.1 ns .. 64.7 ns
point negategf2_127negate/gf2_127/affine (y += x)0.64 ns0.64 ns .. 0.64 ns
point negategf2_127-lambdagroup.neg/binary-lambda.1270.65 ns0.65 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.64 ns0.63 ns .. 0.64 ns
point negategf2_109negate/gf2_109/affine (y += x)0.63 ns0.63 ns .. 0.63 ns
point negategf2_109-lambdagroup.neg/binary-lambda.1090.65 ns0.65 ns .. 0.65 ns
point negategf2_109-wgroup.neg/binary-w.1090.65 ns0.65 ns .. 0.65 ns
point negategf2_109-ugroup.neg/binary-u.1090.65 ns0.65 ns .. 0.65 ns
point negategf2_122negate/gf2_122/affine (y += x)0.63 ns0.63 ns .. 0.63 ns
point negategf2_122-lambdagroup.neg/binary-lambda.1220.65 ns0.65 ns .. 0.65 ns
point negategf2_122-wgroup.neg/binary-w.1220.65 ns0.65 ns .. 0.65 ns
point negategf2_122-ugroup.neg/binary-u.1220.65 ns0.65 ns .. 0.65 ns
point negategf2_122-glsgroup.neg/binary.122-gls1.12 ns1.12 ns .. 1.13 ns
point negategf2_122-gls-lambdagroup.neg/binary-lambda.122-gls0.65 ns0.65 ns .. 0.65 ns
point negategf2_122-gls-wgroup.neg/binary-w.122-gls0.65 ns0.65 ns .. 0.65 ns
point negategf2_122-gls-ugroup.neg/binary-u.122-gls0.65 ns0.65 ns .. 0.65 ns
point negateedwards127group.neg/edwards.1271.34 ns1.33 ns .. 1.34 ns
point negateedwards107group.neg/edwards.1070.83 ns0.82 ns .. 0.83 ns
point negatetwisted128group.neg/twisted.1280.85 ns0.85 ns .. 0.86 ns
point negateweier127group.neg/weier.1270.69 ns0.69 ns .. 0.69 ns
point negateweier127-jacobiangroup.neg/weier-jacobian.1270.69 ns0.69 ns .. 0.69 ns
point negateweier107group.neg/weier.1070.58 ns0.58 ns .. 0.58 ns
point negateweier107-jacobiangroup.neg/weier-jacobian.1070.58 ns0.58 ns .. 0.58 ns
point negateedwards61x2group.neg/edwards.61x20.88 ns0.88 ns .. 0.88 ns
point negateweier61x2group.neg/weier.61x20.66 ns0.66 ns .. 0.66 ns
point negateweier61x2-jacobiangroup.neg/weier-jacobian.61x20.66 ns0.66 ns .. 0.66 ns
point negatetwisted61x2group.neg/twisted.61x20.91 ns0.90 ns .. 0.92 ns
point negatetwisted64x2group.neg/twisted.64x20.91 ns0.90 ns .. 0.91 ns
point negatetwisted-goldilocks2group.neg/twisted.goldilocks21.49 ns1.48 ns .. 1.49 ns
point negateristretto255negate/ristretto255/-P6.20 ns6.17 ns .. 6.22 ns
point negatesecp256k1negate/secp256k1/PublicKey::negate12.8 ns12.7 ns .. 12.9 ns
point prepare, one at a timegf2_127group.prepare/binary.127/mode=indep3.88 ns3.87 ns .. 3.91 ns
point prepare, one at a timegf2_127-lambdagroup.prepare/binary-lambda.127/mode=indep340 ns339 ns .. 340 ns
point prepare, one at a timegf2_127-wgroup.prepare/binary-w.127/mode=indep0.63 ns0.62 ns .. 0.63 ns
point prepare, one at a timegf2_127-ugroup.prepare/binary-u.127/mode=indep0.63 ns0.63 ns .. 0.63 ns
point prepare, one at a timegf2_109group.prepare/binary.109/mode=indep2.77 ns2.76 ns .. 2.77 ns
point prepare, one at a timegf2_109-lambdagroup.prepare/binary-lambda.109/mode=indep349 ns348 ns .. 350 ns
point prepare, one at a timegf2_109-wgroup.prepare/binary-w.109/mode=indep0.61 ns0.61 ns .. 0.62 ns
point prepare, one at a timegf2_109-ugroup.prepare/binary-u.109/mode=indep0.63 ns0.63 ns .. 0.63 ns
point prepare, one at a timegf2_122group.prepare/binary.122/mode=indep4.92 ns4.90 ns .. 4.93 ns
point prepare, one at a timegf2_122-lambdagroup.prepare/binary-lambda.122/mode=indep166 ns166 ns .. 167 ns
point prepare, one at a timegf2_122-wgroup.prepare/binary-w.122/mode=indep0.63 ns0.63 ns .. 0.63 ns
point prepare, one at a timegf2_122-ugroup.prepare/binary-u.122/mode=indep0.61 ns0.61 ns .. 0.62 ns
point prepare, one at a timegf2_122-glsgroup.prepare/binary.122-gls/mode=indep4.31 ns4.29 ns .. 4.32 ns
point prepare, one at a timegf2_122-gls-lambdagroup.prepare/binary-lambda.122-gls/mode=indep167 ns167 ns .. 168 ns
point prepare, one at a timegf2_122-gls-wgroup.prepare/binary-w.122-gls/mode=indep0.63 ns0.63 ns .. 0.63 ns
point prepare, one at a timegf2_122-gls-ugroup.prepare/binary-u.122-gls/mode=indep0.63 ns0.63 ns .. 0.63 ns
point prepare, one at a timeedwards127group.prepare/edwards.127/mode=indep582 ns581 ns .. 583 ns
point prepare, one at a timeedwards107group.prepare/edwards.107/mode=indep546 ns544 ns .. 548 ns
point prepare, one at a timetwisted128group.prepare/twisted.128/mode=indep8.24 ns8.22 ns .. 8.26 ns
point prepare, one at a timeweier127group.prepare/weier.127/mode=indep0.61 ns0.61 ns .. 0.62 ns
point prepare, one at a timeweier127-jacobiangroup.prepare/weier-jacobian.127/mode=indep0.62 ns0.62 ns .. 0.62 ns
point prepare, one at a timeweier107group.prepare/weier.107/mode=indep0.62 ns0.62 ns .. 0.62 ns
point prepare, one at a timeweier107-jacobiangroup.prepare/weier-jacobian.107/mode=indep0.62 ns0.61 ns .. 0.62 ns
point prepare, one at a timeedwards61x2group.prepare/edwards.61x2/mode=indep216 ns216 ns .. 217 ns
point prepare, one at a timeweier61x2group.prepare/weier.61x2/mode=indep0.63 ns0.63 ns .. 0.63 ns
point prepare, one at a timeweier61x2-jacobiangroup.prepare/weier-jacobian.61x2/mode=indep0.63 ns0.63 ns .. 0.63 ns
point prepare, one at a timetwisted61x2group.prepare/twisted.61x2/mode=indep3.41 ns3.40 ns .. 3.41 ns
point prepare, one at a timetwisted64x2group.prepare/twisted.64x2/mode=indep5.43 ns5.41 ns .. 5.44 ns
point prepare, one at a timetwisted-goldilocks2group.prepare/twisted.goldilocks2/mode=indep4.48 ns4.46 ns .. 4.49 ns
point prepare, batchedgf2_127group.prepare/binary.127/mode=batch,n=10243.54 ns3.54 ns .. 3.54 ns
point prepare, batchedgf2_127-lambdagroup.prepare/binary-lambda.127/mode=batch,n=10246.33 ns6.30 ns .. 6.35 ns
point prepare, batchedgf2_127-wgroup.prepare/binary-w.127/mode=batch,n=10240.48 ns0.47 ns .. 0.49 ns
point prepare, batchedgf2_127-ugroup.prepare/binary-u.127/mode=batch,n=10240.49 ns0.48 ns .. 0.49 ns
point prepare, batchedgf2_109group.prepare/binary.109/mode=batch,n=10242.79 ns2.79 ns .. 2.80 ns
point prepare, batchedgf2_109-lambdagroup.prepare/binary-lambda.109/mode=batch,n=10245.17 ns5.16 ns .. 5.18 ns
point prepare, batchedgf2_109-wgroup.prepare/binary-w.109/mode=batch,n=10240.48 ns0.47 ns .. 0.48 ns
point prepare, batchedgf2_109-ugroup.prepare/binary-u.109/mode=batch,n=10240.49 ns0.48 ns .. 0.49 ns
point prepare, batchedgf2_122group.prepare/binary.122/mode=batch,n=10245.02 ns5.01 ns .. 5.03 ns
point prepare, batchedgf2_122-lambdagroup.prepare/binary-lambda.122/mode=batch,n=10247.55 ns7.53 ns .. 7.56 ns
point prepare, batchedgf2_122-wgroup.prepare/binary-w.122/mode=batch,n=10240.46 ns0.45 ns .. 0.47 ns
point prepare, batchedgf2_122-ugroup.prepare/binary-u.122/mode=batch,n=10240.48 ns0.47 ns .. 0.48 ns
point prepare, batchedgf2_122-glsgroup.prepare/binary.122-gls/mode=batch,n=10244.44 ns4.42 ns .. 4.45 ns
point prepare, batchedgf2_122-gls-lambdagroup.prepare/binary-lambda.122-gls/mode=batch,n=10247.53 ns7.52 ns .. 7.55 ns
point prepare, batchedgf2_122-gls-wgroup.prepare/binary-w.122-gls/mode=batch,n=10240.49 ns0.48 ns .. 0.50 ns
point prepare, batchedgf2_122-gls-ugroup.prepare/binary-u.122-gls/mode=batch,n=10240.48 ns0.47 ns .. 0.48 ns
point prepare, batchededwards127group.prepare/edwards.127/mode=batch,n=102428.3 ns28.2 ns .. 28.3 ns
point prepare, batchededwards107group.prepare/edwards.107/mode=batch,n=102422.7 ns22.6 ns .. 22.8 ns
point prepare, batchedtwisted128group.prepare/twisted.128/mode=batch,n=10248.08 ns8.06 ns .. 8.10 ns
point prepare, batchedweier127group.prepare/weier.127/mode=batch,n=10240.46 ns0.46 ns .. 0.47 ns
point prepare, batchedweier127-jacobiangroup.prepare/weier-jacobian.127/mode=batch,n=10240.49 ns0.48 ns .. 0.50 ns
point prepare, batchedweier107group.prepare/weier.107/mode=batch,n=10240.49 ns0.48 ns .. 0.50 ns
point prepare, batchedweier107-jacobiangroup.prepare/weier-jacobian.107/mode=batch,n=10240.48 ns0.48 ns .. 0.49 ns
point prepare, batchededwards61x2group.prepare/edwards.61x2/mode=batch,n=102418.8 ns18.8 ns .. 18.9 ns
point prepare, batchedweier61x2group.prepare/weier.61x2/mode=batch,n=10240.72 ns0.66 ns .. 0.78 ns
point prepare, batchedweier61x2-jacobiangroup.prepare/weier-jacobian.61x2/mode=batch,n=10240.54 ns0.52 ns .. 0.58 ns
point prepare, batchedtwisted61x2group.prepare/twisted.61x2/mode=batch,n=10243.60 ns3.59 ns .. 3.60 ns
point prepare, batchedtwisted64x2group.prepare/twisted.64x2/mode=batch,n=10245.51 ns5.49 ns .. 5.53 ns
point prepare, batchedtwisted-goldilocks2group.prepare/twisted.goldilocks2/mode=batch,n=10244.51 ns4.48 ns .. 4.53 ns
is identitygf2_127group.is_identity/binary.1270.81 ns0.81 ns .. 0.81 ns
is identitygf2_127-lambdagroup.is_identity/binary-lambda.1270.84 ns0.84 ns .. 0.84 ns
is identitygf2_127-wgroup.is_identity/binary-w.1270.84 ns0.84 ns .. 0.84 ns
is identitygf2_127-ugroup.is_identity/binary-u.1270.84 ns0.84 ns .. 0.84 ns
is identitygf2_109group.is_identity/binary.1090.64 ns0.63 ns .. 0.64 ns
is identitygf2_109-lambdagroup.is_identity/binary-lambda.1090.56 ns0.55 ns .. 0.56 ns
is identitygf2_109-wgroup.is_identity/binary-w.1090.56 ns0.56 ns .. 0.56 ns
is identitygf2_109-ugroup.is_identity/binary-u.1090.56 ns0.55 ns .. 0.56 ns
is identitygf2_122group.is_identity/binary.1220.77 ns0.77 ns .. 0.78 ns
is identitygf2_122-lambdagroup.is_identity/binary-lambda.1220.77 ns0.77 ns .. 0.78 ns
is identitygf2_122-wgroup.is_identity/binary-w.1220.77 ns0.77 ns .. 0.78 ns
is identitygf2_122-ugroup.is_identity/binary-u.1220.77 ns0.77 ns .. 0.78 ns
is identitygf2_122-glsgroup.is_identity/binary.122-gls0.77 ns0.77 ns .. 0.77 ns
is identitygf2_122-gls-lambdagroup.is_identity/binary-lambda.122-gls0.78 ns0.77 ns .. 0.78 ns
is identitygf2_122-gls-wgroup.is_identity/binary-w.122-gls0.78 ns0.77 ns .. 0.78 ns
is identitygf2_122-gls-ugroup.is_identity/binary-u.122-gls0.78 ns0.77 ns .. 0.78 ns
is identityedwards127group.is_identity/edwards.1270.38 ns0.38 ns .. 0.38 ns
is identityedwards107group.is_identity/edwards.1070.75 ns0.74 ns .. 0.75 ns
is identitytwisted128group.is_identity/twisted.1280.34 ns0.34 ns .. 0.35 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
is identityweier107group.is_identity/weier.1070.84 ns0.84 ns .. 0.84 ns
is identityweier107-jacobiangroup.is_identity/weier-jacobian.1070.84 ns0.84 ns .. 0.84 ns
is identityedwards61x2group.is_identity/edwards.61x20.38 ns0.38 ns .. 0.38 ns
is identityweier61x2group.is_identity/weier.61x20.52 ns0.52 ns .. 0.53 ns
is identityweier61x2-jacobiangroup.is_identity/weier-jacobian.61x20.52 ns0.52 ns .. 0.53 ns
is identitytwisted61x2group.is_identity/twisted.61x20.34 ns0.34 ns .. 0.35 ns
is identitytwisted64x2group.is_identity/twisted.64x20.34 ns0.34 ns .. 0.35 ns
is identitytwisted-goldilocks2group.is_identity/twisted.goldilocks20.52 ns0.52 ns .. 0.53 ns
equals addend, matchgf2_127group.equals/binary.127/mode=match2.98 ns2.97 ns .. 2.99 ns
equals addend, matchgf2_127-lambdagroup.equals/binary-lambda.127/mode=match3.84 ns3.83 ns .. 3.85 ns
equals addend, matchgf2_127-wgroup.equals/binary-w.127/mode=match3.86 ns3.84 ns .. 3.89 ns
equals addend, matchgf2_127-ugroup.equals/binary-u.127/mode=match4.67 ns4.66 ns .. 4.68 ns
equals addend, matchgf2_109group.equals/binary.109/mode=match2.24 ns2.23 ns .. 2.26 ns
equals addend, matchgf2_109-lambdagroup.equals/binary-lambda.109/mode=match1.60 ns1.60 ns .. 1.61 ns
equals addend, matchgf2_109-wgroup.equals/binary-w.109/mode=match1.82 ns1.81 ns .. 1.82 ns
equals addend, matchgf2_109-ugroup.equals/binary-u.109/mode=match3.46 ns3.46 ns .. 3.47 ns
equals addend, matchgf2_122-lambdagroup.equals/binary-lambda.122/mode=match3.78 ns3.77 ns .. 3.79 ns
equals addend, matchgf2_122-wgroup.equals/binary-w.122/mode=match3.77 ns3.77 ns .. 3.78 ns
equals addend, matchgf2_122-ugroup.equals/binary-u.122/mode=match5.31 ns5.30 ns .. 5.32 ns
equals addend, matchgf2_122-gls-lambdagroup.equals/binary-lambda.122-gls/mode=match3.79 ns3.78 ns .. 3.80 ns
equals addend, matchgf2_122-gls-wgroup.equals/binary-w.122-gls/mode=match3.79 ns3.78 ns .. 3.80 ns
equals addend, matchgf2_122-gls-ugroup.equals/binary-u.122-gls/mode=match5.32 ns5.30 ns .. 5.33 ns
equals addend, matchtwisted61x2group.equals/twisted.61x2/mode=match3.32 ns3.31 ns .. 3.33 ns
equals addend, mismatchgf2_127group.equals/binary.127/mode=mismatch2.87 ns2.87 ns .. 2.88 ns
equals addend, mismatchgf2_127-lambdagroup.equals/binary-lambda.127/mode=mismatch3.81 ns3.79 ns .. 3.82 ns
equals addend, mismatchgf2_127-wgroup.equals/binary-w.127/mode=mismatch3.84 ns3.83 ns .. 3.84 ns
equals addend, mismatchgf2_127-ugroup.equals/binary-u.127/mode=mismatch4.68 ns4.68 ns .. 4.69 ns
equals addend, mismatchgf2_109group.equals/binary.109/mode=mismatch2.28 ns2.28 ns .. 2.29 ns
equals addend, mismatchgf2_109-lambdagroup.equals/binary-lambda.109/mode=mismatch1.60 ns1.60 ns .. 1.60 ns
equals addend, mismatchgf2_109-wgroup.equals/binary-w.109/mode=mismatch1.82 ns1.82 ns .. 1.82 ns
equals addend, mismatchgf2_109-ugroup.equals/binary-u.109/mode=mismatch3.50 ns3.48 ns .. 3.53 ns
equals addend, mismatchgf2_122group.equals/binary.122/mode=mismatch3.75 ns3.73 ns .. 3.76 ns
equals addend, mismatchgf2_122-lambdagroup.equals/binary-lambda.122/mode=mismatch3.79 ns3.79 ns .. 3.80 ns
equals addend, mismatchgf2_122-wgroup.equals/binary-w.122/mode=mismatch3.79 ns3.78 ns .. 3.79 ns
equals addend, mismatchgf2_122-ugroup.equals/binary-u.122/mode=mismatch5.34 ns5.32 ns .. 5.36 ns
equals addend, mismatchgf2_122-glsgroup.equals/binary.122-gls/mode=mismatch3.79 ns3.78 ns .. 3.79 ns
equals addend, mismatchgf2_122-gls-lambdagroup.equals/binary-lambda.122-gls/mode=mismatch3.79 ns3.79 ns .. 3.80 ns
equals addend, mismatchgf2_122-gls-wgroup.equals/binary-w.122-gls/mode=mismatch3.79 ns3.78 ns .. 3.79 ns
equals addend, mismatchgf2_122-gls-ugroup.equals/binary-u.122-gls/mode=mismatch5.31 ns5.30 ns .. 5.32 ns
equals addend, mismatchedwards127group.equals/edwards.127/mode=mismatch1.97 ns1.97 ns .. 1.98 ns
equals addend, mismatchedwards107group.equals/edwards.107/mode=mismatch3.05 ns3.04 ns .. 3.06 ns
equals addend, mismatchtwisted128group.equals/twisted.128/mode=mismatch7.51 ns7.49 ns .. 7.53 ns
equals addend, mismatchweier127group.equals/weier.127/mode=mismatch2.05 ns2.04 ns .. 2.06 ns
equals addend, mismatchweier127-jacobiangroup.equals/weier-jacobian.127/mode=mismatch4.53 ns4.52 ns .. 4.54 ns
equals addend, mismatchweier107group.equals/weier.107/mode=mismatch3.63 ns3.62 ns .. 3.64 ns
equals addend, mismatchweier107-jacobiangroup.equals/weier-jacobian.107/mode=mismatch5.96 ns5.95 ns .. 5.98 ns
equals addend, mismatchedwards61x2group.equals/edwards.61x2/mode=mismatch1.65 ns1.64 ns .. 1.66 ns
equals addend, mismatchweier61x2group.equals/weier.61x2/mode=mismatch1.70 ns1.69 ns .. 1.71 ns
equals addend, mismatchweier61x2-jacobiangroup.equals/weier-jacobian.61x2/mode=mismatch3.59 ns3.57 ns .. 3.62 ns
equals addend, mismatchtwisted61x2group.equals/twisted.61x2/mode=mismatch3.32 ns3.31 ns .. 3.32 ns
equals addend, mismatchtwisted64x2group.equals/twisted.64x2/mode=mismatch5.39 ns5.37 ns .. 5.40 ns
equals addend, mismatchtwisted-goldilocks2group.equals/twisted.goldilocks2/mode=mismatch4.92 ns4.89 ns .. 4.95 ns
encode, one at a timegf2_127group.encode/binary.127/mode=indep371 ns370 ns .. 372 ns
encode, one at a timegf2_127-lambdagroup.encode/binary-lambda.127/mode=indep361 ns360 ns .. 362 ns
encode, one at a timegf2_127-wgroup.encode/binary-w.127/mode=indep361 ns360 ns .. 361 ns
encode, one at a timegf2_127-ugroup.encode/binary-u.127/mode=indep355 ns354 ns .. 355 ns
encode, one at a timegf2_109group.encode/binary.109/mode=indep381 ns381 ns .. 382 ns
encode, one at a timegf2_109-lambdagroup.encode/binary-lambda.109/mode=indep366 ns364 ns .. 368 ns
encode, one at a timegf2_109-wgroup.encode/binary-w.109/mode=indep359 ns357 ns .. 361 ns
encode, one at a timegf2_109-ugroup.encode/binary-u.109/mode=indep397 ns394 ns .. 401 ns
encode, one at a timegf2_122group.encode/binary.122/mode=indep211 ns210 ns .. 212 ns
encode, one at a timegf2_122-lambdagroup.encode/binary-lambda.122/mode=indep189 ns189 ns .. 189 ns
encode, one at a timegf2_122-wgroup.encode/binary-w.122/mode=indep204 ns204 ns .. 205 ns
encode, one at a timegf2_122-ugroup.encode/binary-u.122/mode=indep206 ns206 ns .. 207 ns
encode, one at a timegf2_122-glsgroup.encode/binary.122-gls/mode=indep209 ns208 ns .. 209 ns
encode, one at a timegf2_122-gls-lambdagroup.encode/binary-lambda.122-gls/mode=indep189 ns189 ns .. 190 ns
encode, one at a timegf2_122-gls-wgroup.encode/binary-w.122-gls/mode=indep204 ns204 ns .. 205 ns
encode, one at a timegf2_122-gls-ugroup.encode/binary-u.122-gls/mode=indep195 ns195 ns .. 196 ns
encode, one at a timeedwards127group.encode/edwards.127/mode=indep549 ns548 ns .. 551 ns
encode, one at a timeedwards107group.encode/edwards.107/mode=indep506 ns505 ns .. 507 ns
encode, one at a timetwisted128group.encode/twisted.128/mode=indep939 ns937 ns .. 941 ns
encode, one at a timeweier127group.encode/weier.127/mode=indep536 ns534 ns .. 537 ns
encode, one at a timeweier127-jacobiangroup.encode/weier-jacobian.127/mode=indep533 ns530 ns .. 536 ns
encode, one at a timeweier107group.encode/weier.107/mode=indep497 ns496 ns .. 498 ns
encode, one at a timeweier107-jacobiangroup.encode/weier-jacobian.107/mode=indep502 ns501 ns .. 503 ns
encode, one at a timeedwards61x2group.encode/edwards.61x2/mode=indep181 ns180 ns .. 181 ns
encode, one at a timeweier61x2group.encode/weier.61x2/mode=indep170 ns169 ns .. 170 ns
encode, one at a timeweier61x2-jacobiangroup.encode/weier-jacobian.61x2/mode=indep179 ns179 ns .. 180 ns
encode, one at a timetwisted61x2group.encode/twisted.61x2/mode=indep179 ns178 ns .. 179 ns
encode, one at a timetwisted64x2group.encode/twisted.64x2/mode=indep290 ns290 ns .. 291 ns
encode, one at a timetwisted-goldilocks2group.encode/twisted.goldilocks2/mode=indep197 ns194 ns .. 201 ns
encode, batchedgf2_127group.encode/binary.127/mode=batch,n=102413.1 ns13.0 ns .. 13.2 ns
encode, batchedgf2_127-lambdagroup.encode/binary-lambda.127/mode=batch,n=102410.1 ns10.1 ns .. 10.2 ns
encode, batchedgf2_127-wgroup.encode/binary-w.127/mode=batch,n=102410.3 ns10.3 ns .. 10.3 ns
encode, batchedgf2_127-ugroup.encode/binary-u.127/mode=batch,n=10249.17 ns9.15 ns .. 9.20 ns
encode, batchedgf2_109group.encode/binary.109/mode=batch,n=102410.9 ns10.9 ns .. 11.0 ns
encode, batchedgf2_109-lambdagroup.encode/binary-lambda.109/mode=batch,n=10248.13 ns8.12 ns .. 8.15 ns
encode, batchedgf2_109-wgroup.encode/binary-w.109/mode=batch,n=102410.4 ns10.3 ns .. 10.4 ns
encode, batchedgf2_109-ugroup.encode/binary-u.109/mode=batch,n=10249.88 ns9.84 ns .. 9.92 ns
encode, batchedgf2_122group.encode/binary.122/mode=batch,n=102415.7 ns15.6 ns .. 15.7 ns
encode, batchedgf2_122-lambdagroup.encode/binary-lambda.122/mode=batch,n=102411.9 ns11.9 ns .. 11.9 ns
encode, batchedgf2_122-wgroup.encode/binary-w.122/mode=batch,n=102414.4 ns14.4 ns .. 14.5 ns
encode, batchedgf2_122-ugroup.encode/binary-u.122/mode=batch,n=102412.1 ns12.0 ns .. 12.1 ns
encode, batchedgf2_122-glsgroup.encode/binary.122-gls/mode=batch,n=102415.2 ns15.2 ns .. 15.2 ns
encode, batchedgf2_122-gls-lambdagroup.encode/binary-lambda.122-gls/mode=batch,n=102411.6 ns11.6 ns .. 11.6 ns
encode, batchedgf2_122-gls-wgroup.encode/binary-w.122-gls/mode=batch,n=102414.4 ns14.4 ns .. 14.5 ns
encode, batchedgf2_122-gls-ugroup.encode/binary-u.122-gls/mode=batch,n=102412.3 ns12.3 ns .. 12.3 ns
encode, batchededwards127group.encode/edwards.127/mode=batch,n=102422.0 ns21.9 ns .. 22.0 ns
encode, batchededwards107group.encode/edwards.107/mode=batch,n=102420.3 ns20.2 ns .. 20.3 ns
encode, batchedtwisted128group.encode/twisted.128/mode=batch,n=102416.0 ns16.0 ns .. 16.0 ns
encode, batchedweier127group.encode/weier.127/mode=batch,n=102410.1 ns10.1 ns .. 10.1 ns
encode, batchedweier127-jacobiangroup.encode/weier-jacobian.127/mode=batch,n=102415.7 ns15.7 ns .. 15.7 ns
encode, batchedweier107group.encode/weier.107/mode=batch,n=102411.5 ns11.5 ns .. 11.5 ns
encode, batchedweier107-jacobiangroup.encode/weier-jacobian.107/mode=batch,n=102415.3 ns15.3 ns .. 15.3 ns
encode, batchededwards61x2group.encode/edwards.61x2/mode=batch,n=102416.2 ns16.2 ns .. 16.3 ns
encode, batchedweier61x2group.encode/weier.61x2/mode=batch,n=10248.11 ns8.09 ns .. 8.12 ns
encode, batchedweier61x2-jacobiangroup.encode/weier-jacobian.61x2/mode=batch,n=102411.7 ns11.7 ns .. 11.7 ns
encode, batchedtwisted61x2group.encode/twisted.61x2/mode=batch,n=10248.07 ns8.05 ns .. 8.09 ns
encode, batchedtwisted64x2group.encode/twisted.64x2/mode=batch,n=102410.3 ns10.3 ns .. 10.4 ns
encode, batchedtwisted-goldilocks2group.encode/twisted.goldilocks2/mode=batch,n=102411.3 ns11.2 ns .. 11.3 ns
decode, one at a timegf2_127group.decode/binary.127/mode=indep367 ns366 ns .. 368 ns
decode, one at a timegf2_127-lambdagroup.decode/binary-lambda.127/mode=indep364 ns364 ns .. 365 ns
decode, one at a timegf2_127-wgroup.decode/binary-w.127/mode=indep361 ns361 ns .. 362 ns
decode, one at a timegf2_127-ugroup.decode/binary-u.127/mode=indep376 ns375 ns .. 377 ns
decode, one at a timegf2_109group.decode/binary.109/mode=indep380 ns379 ns .. 381 ns
decode, one at a timegf2_109-lambdagroup.decode/binary-lambda.109/mode=indep381 ns381 ns .. 382 ns
decode, one at a timegf2_109-wgroup.decode/binary-w.109/mode=indep378 ns377 ns .. 379 ns
decode, one at a timegf2_109-ugroup.decode/binary-u.109/mode=indep398 ns397 ns .. 400 ns
decode, one at a timegf2_122group.decode/binary.122/mode=indep197 ns196 ns .. 197 ns
decode, one at a timegf2_122-lambdagroup.decode/binary-lambda.122/mode=indep196 ns195 ns .. 196 ns
decode, one at a timegf2_122-wgroup.decode/binary-w.122/mode=indep193 ns192 ns .. 193 ns
decode, one at a timegf2_122-ugroup.decode/binary-u.122/mode=indep223 ns222 ns .. 223 ns
decode, one at a timegf2_122-glsgroup.decode/binary.122-gls/mode=indep195 ns194 ns .. 195 ns
decode, one at a timegf2_122-gls-lambdagroup.decode/binary-lambda.122-gls/mode=indep187 ns187 ns .. 188 ns
decode, one at a timegf2_122-gls-wgroup.decode/binary-w.122-gls/mode=indep191 ns191 ns .. 191 ns
decode, one at a timegf2_122-gls-ugroup.decode/binary-u.122-gls/mode=indep207 ns206 ns .. 207 ns
decode, one at a timeedwards127group.decode/edwards.127/mode=indep489 ns488 ns .. 490 ns
decode, one at a timeedwards107group.decode/edwards.107/mode=indep359 ns359 ns .. 360 ns
decode, one at a timetwisted128group.decode/twisted.128/mode=indep949 ns946 ns .. 953 ns
decode, one at a timeweier127group.decode/weier.127/mode=indep489 ns487 ns .. 490 ns
decode, one at a timeweier127-jacobiangroup.decode/weier-jacobian.127/mode=indep492 ns490 ns .. 493 ns
decode, one at a timeweier107group.decode/weier.107/mode=indep358 ns357 ns .. 358 ns
decode, one at a timeweier107-jacobiangroup.decode/weier-jacobian.107/mode=indep351 ns350 ns .. 352 ns
decode, one at a timeedwards61x2group.decode/edwards.61x2/mode=indep405 ns404 ns .. 406 ns
decode, one at a timeweier61x2group.decode/weier.61x2/mode=indep416 ns416 ns .. 417 ns
decode, one at a timeweier61x2-jacobiangroup.decode/weier-jacobian.61x2/mode=indep417 ns415 ns .. 418 ns
decode, one at a timetwisted61x2group.decode/twisted.61x2/mode=indep425 ns425 ns .. 426 ns
decode, one at a timetwisted64x2group.decode/twisted.64x2/mode=indep721 ns719 ns .. 722 ns
decode, one at a timetwisted-goldilocks2group.decode/twisted.goldilocks2/mode=indep1.53 µs1.53 µs .. 1.54 µs
decode, batchedgf2_127group.decode/binary.127/mode=batch,n=102414.0 ns14.0 ns .. 14.0 ns
decode, batchedgf2_127-lambdagroup.decode/binary-lambda.127/mode=batch,n=102414.0 ns14.0 ns .. 14.0 ns
decode, batchedgf2_127-wgroup.decode/binary-w.127/mode=batch,n=102415.1 ns15.1 ns .. 15.1 ns
decode, batchedgf2_127-ugroup.decode/binary-u.127/mode=batch,n=102418.3 ns18.3 ns .. 18.4 ns
decode, batchedgf2_109group.decode/binary.109/mode=batch,n=102414.2 ns14.2 ns .. 14.2 ns
decode, batchedgf2_109-lambdagroup.decode/binary-lambda.109/mode=batch,n=102414.1 ns14.1 ns .. 14.2 ns
decode, batchedgf2_109-wgroup.decode/binary-w.109/mode=batch,n=102415.5 ns15.4 ns .. 15.5 ns
decode, batchedgf2_109-ugroup.decode/binary-u.109/mode=batch,n=102418.4 ns18.4 ns .. 18.4 ns
decode, batchedgf2_122group.decode/binary.122/mode=batch,n=102413.5 ns13.5 ns .. 13.5 ns
decode, batchedgf2_122-lambdagroup.decode/binary-lambda.122/mode=batch,n=102413.5 ns13.5 ns .. 13.5 ns
decode, batchedgf2_122-wgroup.decode/binary-w.122/mode=batch,n=102414.4 ns14.4 ns .. 14.5 ns
decode, batchedgf2_122-ugroup.decode/binary-u.122/mode=batch,n=102418.7 ns18.7 ns .. 18.8 ns
decode, batchedgf2_122-glsgroup.decode/binary.122-gls/mode=batch,n=102413.2 ns13.2 ns .. 13.2 ns
decode, batchedgf2_122-gls-lambdagroup.decode/binary-lambda.122-gls/mode=batch,n=102413.2 ns13.2 ns .. 13.2 ns
decode, batchedgf2_122-gls-wgroup.decode/binary-w.122-gls/mode=batch,n=102414.3 ns14.3 ns .. 14.3 ns
decode, batchedgf2_122-gls-ugroup.decode/binary-u.122-gls/mode=batch,n=102416.8 ns16.8 ns .. 16.8 ns
decode, batchededwards127group.decode/edwards.127/mode=batch,n=1024486 ns484 ns .. 488 ns
decode, batchededwards107group.decode/edwards.107/mode=batch,n=1024354 ns353 ns .. 355 ns
decode, batchedtwisted128group.decode/twisted.128/mode=batch,n=1024952 ns948 ns .. 956 ns
decode, batchedweier127group.decode/weier.127/mode=batch,n=1024485 ns483 ns .. 487 ns
decode, batchedweier127-jacobiangroup.decode/weier-jacobian.127/mode=batch,n=1024485 ns484 ns .. 487 ns
decode, batchedweier107group.decode/weier.107/mode=batch,n=1024352 ns351 ns .. 353 ns
decode, batchedweier107-jacobiangroup.decode/weier-jacobian.107/mode=batch,n=1024352 ns351 ns .. 352 ns
decode, batchededwards61x2group.decode/edwards.61x2/mode=batch,n=1024404 ns403 ns .. 405 ns
decode, batchedweier61x2group.decode/weier.61x2/mode=batch,n=1024412 ns411 ns .. 413 ns
decode, batchedweier61x2-jacobiangroup.decode/weier-jacobian.61x2/mode=batch,n=1024413 ns412 ns .. 414 ns
decode, batchedtwisted61x2group.decode/twisted.61x2/mode=batch,n=1024420 ns419 ns .. 421 ns
decode, batchedtwisted64x2group.decode/twisted.64x2/mode=batch,n=1024718 ns717 ns .. 720 ns
decode, batchedtwisted-goldilocks2group.decode/twisted.goldilocks2/mode=batch,n=10241.52 µs1.51 µs .. 1.52 µs
hash to curve, one at a timexorhash_to_curve/sha256 (XOR baseline)24.2 ns23.9 ns .. 24.6 ns
hash to curve, one at a timegf2_127hash_to_curve/gf2_127/pornin map x1485 ns485 ns .. 486 ns
hash to curve, one at a timegf2_127-lambdah2c/binary-lambda.127/mode=indep806 ns804 ns .. 808 ns
hash to curve, one at a timegf2_127-wh2c/binary-w.127/mode=indep865 ns863 ns .. 866 ns
hash to curve, one at a timegf2_127-uh2c/binary-u.127/mode=indep869 ns865 ns .. 874 ns
hash to curve, one at a timegf2_109hash_to_curve/gf2_109/pornin map x1560 ns559 ns .. 561 ns
hash to curve, one at a timegf2_109-lambdah2c/binary-lambda.109/mode=indep873 ns871 ns .. 875 ns
hash to curve, one at a timegf2_109-wh2c/binary-w.109/mode=indep855 ns854 ns .. 857 ns
hash to curve, one at a timegf2_109-uh2c/binary-u.109/mode=indep874 ns872 ns .. 875 ns
hash to curve, one at a timegf2_122hash_to_curve/gf2_122/pornin map x1373 ns373 ns .. 373 ns
hash to curve, one at a timegf2_122-lambdah2c/binary-lambda.122/mode=indep509 ns507 ns .. 510 ns
hash to curve, one at a timegf2_122-wh2c/binary-w.122/mode=indep517 ns516 ns .. 518 ns
hash to curve, one at a timegf2_122-uh2c/binary-u.122/mode=indep531 ns530 ns .. 532 ns
hash to curve, one at a timegf2_122-glshash_to_curve/gf2_122-gls/pornin map x1369 ns367 ns .. 370 ns
hash to curve, one at a timegf2_122-gls-lambdah2c/binary-lambda.122-gls/mode=indep515 ns513 ns .. 517 ns
hash to curve, one at a timegf2_122-gls-wh2c/binary-w.122-gls/mode=indep509 ns507 ns .. 511 ns
hash to curve, one at a timegf2_122-gls-uh2c/binary-u.122-gls/mode=indep522 ns521 ns .. 524 ns
hash to curve, one at a timeedwards127h2c/edwards.127/mode=indep1.07 µs1.06 µs .. 1.07 µs
hash to curve, one at a timeedwards107h2c/edwards.107/mode=indep806 ns802 ns .. 809 ns
hash to curve, one at a timetwisted128h2c/twisted.128/mode=indep1.92 µs1.92 µs .. 1.93 µs
hash to curve, one at a timeweier127h2c/weier.127/mode=indep1.03 µs1.02 µ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, one at a timeweier107h2c/weier.107/mode=indep746 ns744 ns .. 747 ns
hash to curve, one at a timeweier107-jacobianh2c/weier-jacobian.107/mode=indep742 ns741 ns .. 744 ns
hash to curve, one at a timeedwards61x2h2c/edwards.61x2/mode=indep624 ns622 ns .. 626 ns
hash to curve, one at a timeweier61x2h2c/weier.61x2/mode=indep637 ns635 ns .. 639 ns
hash to curve, one at a timeweier61x2-jacobianh2c/weier-jacobian.61x2/mode=indep638 ns637 ns .. 640 ns
hash to curve, one at a timetwisted61x2h2c/twisted.61x2/mode=indep630 ns629 ns .. 631 ns
hash to curve, one at a timetwisted64x2h2c/twisted.64x2/mode=indep1.10 µs1.10 µs .. 1.10 µs
hash to curve, one at a timetwisted-goldilocks2h2c/twisted.goldilocks2/mode=indep1.73 µs1.72 µs .. 1.74 µs
hash to curve, one at a timeristretto255hash_to_curve/ristretto255/hash_from_bytes<Sha512>4.72 µs4.70 µs .. 4.73 µs
hash to curve, one at a timesecp256k1hash_to_curve/secp256k1/try-and-increment (parse)4.49 µs4.48 µs .. 4.49 µs
hash to curve, batchedgf2_127hash_to_curve/gf2_127/pornin map x1, batched61.5 ns61.4 ns .. 61.5 ns
hash to curve, batchedgf2_127-lambdah2c/binary-lambda.127/mode=batch,n=102475.6 ns75.5 ns .. 75.7 ns
hash to curve, batchedgf2_127-wh2c/binary-w.127/mode=batch,n=102483.3 ns83.2 ns .. 83.4 ns
hash to curve, batchedgf2_127-uh2c/binary-u.127/mode=batch,n=102485.8 ns85.5 ns .. 86.1 ns
hash to curve, batchedgf2_109hash_to_curve/gf2_109/pornin map x1, batched63.7 ns63.7 ns .. 63.8 ns
hash to curve, batchedgf2_109-lambdah2c/binary-lambda.109/mode=batch,n=102482.0 ns81.9 ns .. 82.1 ns
hash to curve, batchedgf2_109-wh2c/binary-w.109/mode=batch,n=102479.4 ns79.3 ns .. 79.5 ns
hash to curve, batchedgf2_109-uh2c/binary-u.109/mode=batch,n=102481.2 ns81.1 ns .. 81.4 ns
hash to curve, batchedgf2_122hash_to_curve/gf2_122/pornin map x1, batched62.8 ns62.8 ns .. 62.8 ns
hash to curve, batchedgf2_122-lambdah2c/binary-lambda.122/mode=batch,n=102474.9 ns74.8 ns .. 75.1 ns
hash to curve, batchedgf2_122-wh2c/binary-w.122/mode=batch,n=102476.8 ns76.6 ns .. 76.9 ns
hash to curve, batchedgf2_122-uh2c/binary-u.122/mode=batch,n=102487.6 ns87.5 ns .. 87.7 ns
hash to curve, batchedgf2_122-glshash_to_curve/gf2_122-gls/pornin map x1, batched62.0 ns61.9 ns .. 62.0 ns
hash to curve, batchedgf2_122-gls-lambdah2c/binary-lambda.122-gls/mode=batch,n=102476.5 ns76.3 ns .. 76.6 ns
hash to curve, batchedgf2_122-gls-wh2c/binary-w.122-gls/mode=batch,n=102478.6 ns78.5 ns .. 78.8 ns
hash to curve, batchedgf2_122-gls-uh2c/binary-u.122-gls/mode=batch,n=102480.2 ns80.1 ns .. 80.3 ns
hash to curve, batchededwards127h2c/edwards.127/mode=batch,n=10241.07 µs1.07 µs .. 1.07 µs
hash to curve, batchededwards107h2c/edwards.107/mode=batch,n=1024805 ns801 ns .. 810 ns
hash to curve, batchedtwisted128h2c/twisted.128/mode=batch,n=10241.92 µs1.92 µs .. 1.93 µs
hash to curve, batchedweier127h2c/weier.127/mode=batch,n=10241.04 µs1.03 µs .. 1.04 µs
hash to curve, batchedweier127-jacobianh2c/weier-jacobian.127/mode=batch,n=10241.04 µs1.04 µs .. 1.04 µs
hash to curve, batchedweier107h2c/weier.107/mode=batch,n=1024748 ns747 ns .. 750 ns
hash to curve, batchedweier107-jacobianh2c/weier-jacobian.107/mode=batch,n=1024745 ns743 ns .. 748 ns
hash to curve, batchededwards61x2h2c/edwards.61x2/mode=batch,n=1024620 ns617 ns .. 623 ns
hash to curve, batchedweier61x2h2c/weier.61x2/mode=batch,n=1024637 ns635 ns .. 638 ns
hash to curve, batchedweier61x2-jacobianh2c/weier-jacobian.61x2/mode=batch,n=1024638 ns636 ns .. 639 ns
hash to curve, batchedtwisted61x2h2c/twisted.61x2/mode=batch,n=1024632 ns630 ns .. 634 ns
hash to curve, batchedtwisted64x2h2c/twisted.64x2/mode=batch,n=10241.10 µs1.10 µs .. 1.10 µs
hash to curve, batchedtwisted-goldilocks2h2c/twisted.goldilocks2/mode=batch,n=10241.75 µs1.74 µs .. 1.76 µs
hash to addend, one at a timegf2_127-lambdahash_to_curve/gf2_127-lambda/pornin map x1 to (x, λ)456 ns455 ns .. 457 ns
hash to addend, one at a timegf2_127-whash_to_curve/gf2_127-w/pornin map x1 to (x, λ)455 ns454 ns .. 456 ns
hash to addend, one at a timegf2_127-uhash_to_curve/gf2_127-u/pornin map x1 to (u, v)461 ns460 ns .. 462 ns
hash to addend, one at a timegf2_109-lambdahash_to_curve/gf2_109-lambda/pornin map x1 to (x, λ)550 ns548 ns .. 553 ns
hash to addend, one at a timegf2_109-whash_to_curve/gf2_109-w/pornin map x1 to (x, λ)535 ns534 ns .. 535 ns
hash to addend, one at a timegf2_109-uhash_to_curve/gf2_109-u/pornin map x1 to (u, v)533 ns532 ns .. 533 ns
hash to addend, one at a timegf2_122-lambdahash_to_curve/gf2_122-lambda/pornin map x1 to (x, λ)326 ns326 ns .. 327 ns
hash to addend, one at a timegf2_122-whash_to_curve/gf2_122-w/pornin map x1 to (x, λ)326 ns326 ns .. 327 ns
hash to addend, one at a timegf2_122-uhash_to_curve/gf2_122-u/pornin map x1 to (u, v)326 ns325 ns .. 326 ns
hash to addend, one at a timegf2_122-gls-lambdahash_to_curve/gf2_122-gls-lambda/pornin map x1 to (x, λ)315 ns314 ns .. 316 ns
hash to addend, one at a timegf2_122-gls-whash_to_curve/gf2_122-gls-w/pornin map x1 to (x, λ)316 ns315 ns .. 317 ns
hash to addend, one at a timegf2_122-gls-uhash_to_curve/gf2_122-gls-u/pornin map x1 to (u, v)319 ns318 ns .. 320 ns
hash to addend, batchedgf2_127-lambdahash_to_curve/gf2_127-lambda/pornin map x1 to (x, λ), batched53.5 ns53.4 ns .. 53.6 ns
hash to addend, batchedgf2_127-whash_to_curve/gf2_127-w/pornin map x1 to (x, λ), batched53.5 ns53.4 ns .. 53.6 ns
hash to addend, batchedgf2_127-uhash_to_curve/gf2_127-u/pornin map x1 to (u, v), batched57.2 ns57.2 ns .. 57.3 ns
hash to addend, batchedgf2_109-lambdahash_to_curve/gf2_109-lambda/pornin map x1 to (x, λ), batched55.2 ns55.0 ns .. 55.5 ns
hash to addend, batchedgf2_109-whash_to_curve/gf2_109-w/pornin map x1 to (x, λ), batched54.5 ns54.5 ns .. 54.5 ns
hash to addend, batchedgf2_109-uhash_to_curve/gf2_109-u/pornin map x1 to (u, v), batched60.7 ns60.3 ns .. 61.0 ns
hash to addend, batchedgf2_122-lambdahash_to_curve/gf2_122-lambda/pornin map x1 to (x, λ), batched53.9 ns53.9 ns .. 54.0 ns
hash to addend, batchedgf2_122-whash_to_curve/gf2_122-w/pornin map x1 to (x, λ), batched54.0 ns53.9 ns .. 54.0 ns
hash to addend, batchedgf2_122-uhash_to_curve/gf2_122-u/pornin map x1 to (u, v), batched57.1 ns57.0 ns .. 57.1 ns
hash to addend, batchedgf2_122-gls-lambdahash_to_curve/gf2_122-gls-lambda/pornin map x1 to (x, λ), batched55.4 ns55.4 ns .. 55.5 ns
hash to addend, batchedgf2_122-gls-whash_to_curve/gf2_122-gls-w/pornin map x1 to (x, λ), batched55.4 ns55.4 ns .. 55.4 ns
hash to addend, batchedgf2_122-gls-uhash_to_curve/gf2_122-gls-u/pornin map x1 to (u, v), batched55.7 ns55.7 ns .. 55.8 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 bytes12511
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 formulas4431212441136
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 hashes4421112448523
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended22321122333
gf2_122-lambdaincompleteλ-projective442111244636
gf2_122-wincompleteλ-projective, w codec442111244636
gf2_122-uunscaled (X:S:Z), w codec442111244636
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended22311122333
gf2_122-gls-lambdaincompleteλ-projective442111244636
gf2_122-gls-wincompleteλ-projective, w codec442111244636
gf2_122-gls-uunscaled (X:S:Z), w codec442111244636
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended443121244636
gf2_109-lambdaincompleteλ-projective4421112448523
gf2_109-wincompleteλ-projective, w codec4421112448523
gf2_109-uunscaled (X:S:Z), w codec4421112448523
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached32321122111
weier127short Weierstrass, projective += affine22221122111
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine22211122111
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached32321122111
weier107short Weierstrass, projective += affine22221122111
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine22211122111
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached22211122111
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached22211122111
weier61x2short Weierstrass, signed-x codec, projective += affine22211122111
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine22211122111
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached442111244111
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached22211122111
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached22211122111
references, 32 and 33 bytes
ristretto255curve25519-dalek12111011
secp256k1libsecp256k121

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

116 benchmarks
operationbenchmarkfamilymodetime95% CIunit
batch invertgf2_109/batch invert (product tree)gf2_109batch3.49 ns3.49 ns .. 3.50 nsper elem
batch invertgf2_122/batch invert (product tree)gf2_122batch4.47 ns4.47 ns .. 4.47 nsper elem
batch invertgf2_127/batch invert (product tree)gf2_127batch3.60 ns3.60 ns .. 3.61 nsper elem
batch invertfp107/batch invert (product tree)fp107batch5.23 ns5.22 ns .. 5.23 nsper elem
batch invertfp127/batch invert (product tree)fp127batch5.64 ns5.64 ns .. 5.64 nsper elem
batch invertfp61x2/batch invert (product tree)fp61x2batch4.67 ns4.66 ns .. 4.67 nsper elem
batch invertfp64x2/batch invert (product tree)fp64x2batch5.77 ns5.77 ns .. 5.78 nsper elem
batch invertgoldilocks2/batch invert (product tree)goldilocks2batch5.87 ns5.85 ns .. 5.89 nsper elem
halftracegf2_109/halftracegf2_109per-element37.2 ns37.2 ns .. 37.2 nsper elem
halftracegf2_109/halftrace (byte tables)gf2_109per-element3.32 ns3.32 ns .. 3.33 nsper elem
halftracegf2_122/qsolve (z^2 + z = c, 2 base halftraces)gf2_122per-element2.69 ns2.68 ns .. 2.69 nsper elem
halftracegf2_127/halftracegf2_127per-element30.0 ns29.9 ns .. 30.0 nsper elem
halftracegf2_127/halftrace (byte tables)gf2_127per-element4.11 ns4.11 ns .. 4.11 nsper elem
halftracegf2_127/halftrace (nibble tables)gf2_127per-element17.2 ns17.2 ns .. 17.2 nsper elem
packfp107/packfp107per-element0.67 ns0.67 ns .. 0.67 nsper elem
packfp127/packfp127per-element0.34 ns0.34 ns .. 0.34 nsper elem
packfp128/packfp128per-element0.34 ns0.34 ns .. 0.34 nsper elem
packfp61x2/packfp61x2per-element0.34 ns0.34 ns .. 0.34 nsper elem
packfp64x2/packfp64x2per-element0.34 ns0.34 ns .. 0.34 nsper elem
packgoldilocks2/packgoldilocks2per-element0.40 ns0.40 ns .. 0.40 nsper elem
tracegf2_109/tracegf2_109per-element0.46 ns0.46 ns .. 0.46 nsper elem
tracegf2_122/tracegf2_122per-element0.35 ns0.34 ns .. 0.35 nsper elem
tracegf2_127/tracegf2_127per-element0.33 ns0.33 ns .. 0.33 nsper elem
negfp107/negfp107per-element0.42 ns0.42 ns .. 0.43 nsper elem
negfp127/negfp127per-element0.66 ns0.66 ns .. 0.66 nsper elem
negfp128/negfp128per-element0.40 ns0.40 ns .. 0.40 nsper elem
negfp61x2/negfp61x2per-element0.38 ns0.38 ns .. 0.38 nsper elem
negfp64x2/negfp64x2per-element0.40 ns0.40 ns .. 0.40 nsper elem
neggoldilocks2/neggoldilocks2per-element0.39 ns0.39 ns .. 0.39 nsper elem
mul_u2gf2_122/mul_u2 (by a^2 = 1 + a) latency (dependent chain)gf2_122latency0.63 ns0.63 ns .. 0.63 nsper elem
mul_u2gf2_122/mul_u2 (by a^2 = 1 + a) throughput (8 chains)gf2_122throughput0.20 ns0.20 ns .. 0.20 nsper elem
normalizegf2_109/normalize (to_u128)gf2_109per-element0.45 ns0.45 ns .. 0.45 nsper elem
normalizegf2_122/normalize (to_u128)gf2_122per-element0.65 ns0.65 ns .. 0.65 nsper elem
normalizegf2_127/normalize (to_u128)gf2_127per-element0.41 ns0.41 ns .. 0.41 nsper elem
unpackfp107/unpackfp107per-element0.51 ns0.51 ns .. 0.51 nsper elem
unpackfp127/unpackfp127per-element0.51 ns0.51 ns .. 0.51 nsper elem
unpackfp128/unpackfp128per-element0.51 ns0.51 ns .. 0.51 nsper elem
unpackfp61x2/unpackfp61x2per-element0.72 ns0.72 ns .. 0.72 nsper elem
unpackfp64x2/unpackfp64x2per-element0.55 ns0.55 ns .. 0.55 nsper elem
unpackgoldilocks2/unpackgoldilocks2per-element0.55 ns0.55 ns .. 0.55 nsper elem
subfp128/subfp128per-element0.60 ns0.60 ns .. 0.60 nsper elem
subfp61x2/subfp61x2per-element0.55 ns0.55 ns .. 0.55 nsper elem
subfp64x2/subfp64x2per-element0.53 ns0.53 ns .. 0.54 nsper elem
subgoldilocks2/subgoldilocks2per-element0.59 ns0.59 ns .. 0.60 nsper elem
addfp107/addfp107per-element0.51 ns0.50 ns .. 0.52 nsper elem
addfp127/addfp127per-element0.83 ns0.83 ns .. 0.83 nsper elem
addfp128/addfp128per-element0.89 ns0.89 ns .. 0.89 nsper elem
addfp61x2/addfp61x2per-element0.53 ns0.53 ns .. 0.53 nsper elem
addfp64x2/addfp64x2per-element0.56 ns0.56 ns .. 0.57 nsper elem
addgoldilocks2/addgoldilocks2per-element0.59 ns0.59 ns .. 0.59 nsper elem
squaregf2_109/square latency (dependent chain)gf2_109latency2.17 ns2.16 ns .. 2.17 nsper elem
squaregf2_109/square throughput (8 chains)gf2_109throughput0.83 ns0.83 ns .. 0.84 nsper elem
squaregf2_122/square latency (dependent chain)gf2_122latency4.44 ns4.43 ns .. 4.44 nsper elem
squaregf2_122/square throughput (8 chains)gf2_122throughput1.09 ns1.09 ns .. 1.09 nsper elem
squaregf2_127/square latency (dependent chain)gf2_127latency2.08 ns2.08 ns .. 2.09 nsper elem
squaregf2_127/square throughput (8 chains)gf2_127throughput0.70 ns0.70 ns .. 0.70 nsper elem
squarefp107/square latency (dependent chain)fp107latency3.01 ns3.00 ns .. 3.02 nsper elem
squarefp107/square throughput (8 chains)fp107throughput0.97 ns0.97 ns .. 0.97 nsper elem
squarefp127/square latency (dependent chain)fp127latency3.57 ns3.56 ns .. 3.57 nsper elem
squarefp127/square throughput (8 chains)fp127throughput1.78 ns1.78 ns .. 1.78 nsper elem
squarefp128/square latency (dependent chain)fp128latency6.37 ns6.36 ns .. 6.37 nsper elem
squarefp128/square throughput (8 chains)fp128throughput2.58 ns2.58 ns .. 2.58 nsper elem
squarefp61x2/square latency (dependent chain)fp61x2latency3.48 ns3.48 ns .. 3.49 nsper elem
squarefp61x2/square throughput (8 chains)fp61x2throughput1.40 ns1.39 ns .. 1.40 nsper elem
squarefp64x2/square latency (dependent chain)fp64x2latency4.92 ns4.91 ns .. 4.92 nsper elem
squarefp64x2/square throughput (8 chains)fp64x2throughput2.23 ns2.23 ns .. 2.24 nsper elem
squaregoldilocks2/square latency (dependent chain)goldilocks2latency3.43 ns3.43 ns .. 3.44 nsper elem
squaregoldilocks2/square throughput (8 chains)goldilocks2throughput1.69 ns1.68 ns .. 1.71 nsper elem
mul_basegf2_122/mul_base (by a GF(2^61) constant) latency (dependent chain)gf2_122latency3.52 ns3.52 ns .. 3.52 nsper elem
mul_basegf2_122/mul_base (by a GF(2^61) constant) throughput (8 chains)gf2_122throughput1.14 ns1.14 ns .. 1.14 nsper elem
mulgf2_109/mul latency (dependent chain)gf2_109latency3.92 ns3.91 ns .. 3.93 nsper elem
mulgf2_109/mul throughput (8 chains)gf2_109throughput1.04 ns1.04 ns .. 1.04 nsper elem
mulgf2_122/mul latency (dependent chain)gf2_122latency4.90 ns4.90 ns .. 4.90 nsper elem
mulgf2_122/mul throughput (8 chains)gf2_122throughput1.21 ns1.21 ns .. 1.21 nsper elem
mulgf2_127/mul latency (dependent chain)gf2_127latency3.75 ns3.74 ns .. 3.77 nsper elem
mulgf2_127/mul throughput (8 chains)gf2_127throughput1.21 ns1.21 ns .. 1.21 nsper elem
mulfp107 schoolbook/mul latency (dependent chain)fp107latency3.20 ns3.20 ns .. 3.21 nsper elem
mulfp107 schoolbook/mul throughput (8 chains)fp107throughput1.15 ns1.15 ns .. 1.15 nsper elem
mulfp107/mul latency (dependent chain)fp107latency3.49 ns3.48 ns .. 3.50 nsper elem
mulfp107/mul throughput (8 chains)fp107throughput1.29 ns1.29 ns .. 1.29 nsper elem
mulfp127/mul latency (dependent chain)fp127latency3.82 ns3.81 ns .. 3.82 nsper elem
mulfp127/mul throughput (8 chains)fp127throughput1.50 ns1.50 ns .. 1.50 nsper elem
mulfp128/mul latency (dependent chain)fp128latency6.58 ns6.57 ns .. 6.58 nsper elem
mulfp128/mul throughput (8 chains)fp128throughput2.77 ns2.77 ns .. 2.77 nsper elem
mulfp61x2/mul latency (dependent chain)fp61x2latency3.30 ns3.30 ns .. 3.31 nsper elem
mulfp61x2/mul throughput (8 chains)fp61x2throughput1.26 ns1.26 ns .. 1.26 nsper elem
mulfp64x2/mul latency (dependent chain)fp64x2latency5.08 ns5.07 ns .. 5.09 nsper elem
mulfp64x2/mul throughput (8 chains)fp64x2throughput2.24 ns2.24 ns .. 2.24 nsper elem
mulgoldilocks2/mul latency (dependent chain)goldilocks2latency2.90 ns2.90 ns .. 2.90 nsper elem
mulgoldilocks2/mul throughput (8 chains)goldilocks2throughput1.36 ns1.35 ns .. 1.38 nsper elem
invertgf2_109/invertgf2_109per-element341 ns340 ns .. 343 nsper elem
invertgf2_122/invertgf2_122per-element159 ns159 ns .. 159 nsper elem
invertgf2_127/invertgf2_127per-element317 ns317 ns .. 318 nsper elem
invertfp107/invertfp107per-element477 ns477 ns .. 478 nsper elem
invertfp127/invertfp127per-element520 ns518 ns .. 522 nsper elem
invertfp128/invertfp128per-element933 ns932 ns .. 934 nsper elem
invertfp61x2/invertfp61x2per-element159 ns159 ns .. 159 nsper elem
invertfp64x2/invertfp64x2per-element281 ns280 ns .. 281 nsper elem
invertgoldilocks2/invertgoldilocks2per-element186 ns182 ns .. 190 nsper elem
sqrtgf2_109/sqrtgf2_109per-element2.77 ns2.77 ns .. 2.78 nsper elem
sqrtgf2_122/sqrtgf2_122per-element2.95 ns2.95 ns .. 2.95 nsper elem
sqrtgf2_127/sqrtgf2_127per-element1.26 ns1.26 ns .. 1.26 nsper elem
sqrtfp107/sqrt (x^(2^105))fp107per-element341 ns340 ns .. 341 nsper elem
sqrtfp127/sqrt (x^(2^125))fp127per-element470 ns468 ns .. 472 nsper elem
sqrtfp128/sqrtfp128per-element878 ns877 ns .. 878 nsper elem
sqrtfp61x2/sqrtfp61x2per-element277 ns277 ns .. 277 nsper elem
sqrtfp64x2/sqrtfp64x2per-element485 ns485 ns .. 485 nsper elem
sqrtgoldilocks2/sqrtgoldilocks2per-element727 ns724 ns .. 730 nsper elem
pow_p34fp107/pow_p34 (x^(2^105-1))fp107per-element469 ns468 ns .. 470 nsper elem
pow_p34fp127/pow_p34 (x^(2^125-1))fp127per-element494 ns493 ns .. 495 nsper elem
sqrt_ratiofp107/sqrt_ratiofp107per-element482 ns482 ns .. 482 nsper elem
sqrt_ratiofp127/sqrt_ratiofp127per-element518 ns517 ns .. 519 nsper elem
sqrt_ratiofp128/sqrt_ratiofp128per-element932 ns932 ns .. 933 nsper elem
sqrt_ratiofp61x2/sqrt_ratiofp61x2per-element277 ns277 ns .. 278 nsper elem
sqrt_ratiofp64x2/sqrt_ratiofp64x2per-element481 ns481 ns .. 482 nsper elem
sqrt_ratiogoldilocks2/sqrt_ratiogoldilocks2per-element677 ns676 ns .. 678 nsper elem

group ops

470 benchmarks
operationbenchmarkfamilymodetime95% CIunit
preparebinary.109/mode=batch,n=1024gf2_109batch2.79 ns2.79 ns .. 2.80 nsper elem
preparebinary.109/mode=batch,n=64gf2_109batch2.83 ns2.82 ns .. 2.83 nsper elem
preparebinary.109/mode=batch,n=8gf2_109batch4.00 ns3.99 ns .. 4.01 nsper elem
preparebinary.109/mode=indepgf2_109per-element2.77 ns2.76 ns .. 2.77 nsper elem
preparebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch5.17 ns5.16 ns .. 5.18 nsper elem
preparebinary-lambda.109/mode=batch,n=64gf2_109-lambdabatch14.0 ns14.0 ns .. 14.0 nsper elem
preparebinary-lambda.109/mode=batch,n=8gf2_109-lambdabatch68.7 ns68.5 ns .. 68.9 nsper elem
preparebinary-lambda.109/mode=indepgf2_109-lambdaper-element349 ns348 ns .. 350 nsper elem
preparebinary-u.109/mode=batch,n=1024gf2_109-ubatch0.49 ns0.48 ns .. 0.49 nsper elem
preparebinary-u.109/mode=batch,n=64gf2_109-ubatch0.51 ns0.51 ns .. 0.51 nsper elem
preparebinary-u.109/mode=batch,n=8gf2_109-ubatch1.42 ns1.41 ns .. 1.42 nsper elem
preparebinary-u.109/mode=indepgf2_109-uper-element0.63 ns0.63 ns .. 0.63 nsper elem
preparebinary-w.109/mode=batch,n=1024gf2_109-wbatch0.48 ns0.47 ns .. 0.48 nsper elem
preparebinary-w.109/mode=batch,n=64gf2_109-wbatch0.51 ns0.51 ns .. 0.51 nsper elem
preparebinary-w.109/mode=batch,n=8gf2_109-wbatch1.40 ns1.40 ns .. 1.41 nsper elem
preparebinary-w.109/mode=indepgf2_109-wper-element0.61 ns0.61 ns .. 0.62 nsper elem
preparebinary.122/mode=batch,n=1024gf2_122batch5.02 ns5.01 ns .. 5.03 nsper elem
preparebinary.122/mode=indepgf2_122per-element4.92 ns4.90 ns .. 4.93 nsper elem
preparebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch4.44 ns4.42 ns .. 4.45 nsper elem
preparebinary.122-gls/mode=indepgf2_122-glsper-element4.31 ns4.29 ns .. 4.32 nsper elem
preparebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch7.53 ns7.52 ns .. 7.55 nsper elem
preparebinary-lambda.122-gls/mode=batch,n=64gf2_122-gls-lambdabatch13.1 ns13.1 ns .. 13.2 nsper elem
preparebinary-lambda.122-gls/mode=batch,n=8gf2_122-gls-lambdabatch47.8 ns47.7 ns .. 48.0 nsper elem
preparebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element167 ns167 ns .. 168 nsper elem
preparebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch0.48 ns0.47 ns .. 0.48 nsper elem
preparebinary-u.122-gls/mode=batch,n=64gf2_122-gls-ubatch0.51 ns0.51 ns .. 0.51 nsper elem
preparebinary-u.122-gls/mode=batch,n=8gf2_122-gls-ubatch1.42 ns1.41 ns .. 1.42 nsper elem
preparebinary-u.122-gls/mode=indepgf2_122-gls-uper-element0.63 ns0.63 ns .. 0.63 nsper elem
preparebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch0.49 ns0.48 ns .. 0.50 nsper elem
preparebinary-w.122-gls/mode=batch,n=64gf2_122-gls-wbatch0.51 ns0.51 ns .. 0.51 nsper elem
preparebinary-w.122-gls/mode=batch,n=8gf2_122-gls-wbatch1.42 ns1.41 ns .. 1.42 nsper elem
preparebinary-w.122-gls/mode=indepgf2_122-gls-wper-element0.63 ns0.63 ns .. 0.63 nsper elem
preparebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch7.55 ns7.53 ns .. 7.56 nsper elem
preparebinary-lambda.122/mode=batch,n=64gf2_122-lambdabatch13.1 ns13.1 ns .. 13.1 nsper elem
preparebinary-lambda.122/mode=batch,n=8gf2_122-lambdabatch46.9 ns46.8 ns .. 47.0 nsper elem
preparebinary-lambda.122/mode=indepgf2_122-lambdaper-element166 ns166 ns .. 167 nsper elem
preparebinary-u.122/mode=batch,n=1024gf2_122-ubatch0.48 ns0.47 ns .. 0.48 nsper elem
preparebinary-u.122/mode=batch,n=64gf2_122-ubatch0.50 ns0.50 ns .. 0.51 nsper elem
preparebinary-u.122/mode=batch,n=8gf2_122-ubatch1.41 ns1.41 ns .. 1.42 nsper elem
preparebinary-u.122/mode=indepgf2_122-uper-element0.61 ns0.61 ns .. 0.62 nsper elem
preparebinary-w.122/mode=batch,n=1024gf2_122-wbatch0.46 ns0.45 ns .. 0.47 nsper elem
preparebinary-w.122/mode=batch,n=64gf2_122-wbatch0.51 ns0.50 ns .. 0.51 nsper elem
preparebinary-w.122/mode=batch,n=8gf2_122-wbatch1.39 ns1.39 ns .. 1.40 nsper elem
preparebinary-w.122/mode=indepgf2_122-wper-element0.63 ns0.63 ns .. 0.63 nsper elem
preparebinary.127/mode=batch,n=1024gf2_127batch3.54 ns3.54 ns .. 3.54 nsper elem
preparebinary.127/mode=batch,n=64gf2_127batch3.68 ns3.68 ns .. 3.69 nsper elem
preparebinary.127/mode=batch,n=8gf2_127batch4.37 ns4.36 ns .. 4.38 nsper elem
preparebinary.127/mode=indepgf2_127per-element3.88 ns3.87 ns .. 3.91 nsper elem
preparebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch6.33 ns6.30 ns .. 6.35 nsper elem
preparebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch14.2 ns14.2 ns .. 14.2 nsper elem
preparebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch64.1 ns63.9 ns .. 64.2 nsper elem
preparebinary-lambda.127/mode=indepgf2_127-lambdaper-element340 ns339 ns .. 340 nsper elem
preparebinary-u.127/mode=batch,n=1024gf2_127-ubatch0.49 ns0.48 ns .. 0.49 nsper elem
preparebinary-u.127/mode=batch,n=64gf2_127-ubatch0.51 ns0.51 ns .. 0.51 nsper elem
preparebinary-u.127/mode=batch,n=8gf2_127-ubatch1.41 ns1.40 ns .. 1.41 nsper elem
preparebinary-u.127/mode=indepgf2_127-uper-element0.63 ns0.63 ns .. 0.63 nsper elem
preparebinary-w.127/mode=batch,n=1024gf2_127-wbatch0.48 ns0.47 ns .. 0.49 nsper elem
preparebinary-w.127/mode=batch,n=64gf2_127-wbatch0.51 ns0.51 ns .. 0.51 nsper elem
preparebinary-w.127/mode=batch,n=8gf2_127-wbatch1.40 ns1.40 ns .. 1.41 nsper elem
preparebinary-w.127/mode=indepgf2_127-wper-element0.63 ns0.62 ns .. 0.63 nsper elem
prepareedwards.107/mode=batch,n=1024edwards107batch22.7 ns22.6 ns .. 22.8 nsper elem
prepareedwards.107/mode=indepedwards107per-element546 ns544 ns .. 548 nsper elem
prepareedwards.127/mode=batch,n=1024edwards127batch28.3 ns28.2 ns .. 28.3 nsper elem
prepareedwards.127/mode=indepedwards127per-element582 ns581 ns .. 583 nsper elem
prepareedwards.61x2/mode=batch,n=1024edwards61x2batch18.8 ns18.8 ns .. 18.9 nsper elem
prepareedwards.61x2/mode=indepedwards61x2per-element216 ns216 ns .. 217 nsper elem
preparetwisted.goldilocks2/mode=batch,n=1024twisted-goldilocks2batch4.51 ns4.48 ns .. 4.53 nsper elem
preparetwisted.goldilocks2/mode=indeptwisted-goldilocks2per-element4.48 ns4.46 ns .. 4.49 nsper elem
preparetwisted.128/mode=batch,n=1024twisted128batch8.08 ns8.06 ns .. 8.10 nsper elem
preparetwisted.128/mode=indeptwisted128per-element8.24 ns8.22 ns .. 8.26 nsper elem
preparetwisted.61x2/mode=batch,n=1024twisted61x2batch3.60 ns3.59 ns .. 3.60 nsper elem
preparetwisted.61x2/mode=batch,n=64twisted61x2batch3.80 ns3.79 ns .. 3.81 nsper elem
preparetwisted.61x2/mode=batch,n=8twisted61x2batch6.03 ns6.02 ns .. 6.05 nsper elem
preparetwisted.61x2/mode=indeptwisted61x2per-element3.41 ns3.40 ns .. 3.41 nsper elem
preparetwisted.64x2/mode=batch,n=1024twisted64x2batch5.51 ns5.49 ns .. 5.53 nsper elem
preparetwisted.64x2/mode=indeptwisted64x2per-element5.43 ns5.41 ns .. 5.44 nsper elem
prepareweier.107/mode=batch,n=1024weier107batch0.49 ns0.48 ns .. 0.50 nsper elem
prepareweier.107/mode=indepweier107per-element0.62 ns0.62 ns .. 0.62 nsper elem
prepareweier-jacobian.107/mode=batch,n=1024weier107-jacobianbatch0.48 ns0.48 ns .. 0.49 nsper elem
prepareweier-jacobian.107/mode=indepweier107-jacobianper-element0.62 ns0.61 ns .. 0.62 nsper elem
prepareweier.127/mode=batch,n=1024weier127batch0.46 ns0.46 ns .. 0.47 nsper elem
prepareweier.127/mode=indepweier127per-element0.61 ns0.61 ns .. 0.62 nsper elem
prepareweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch0.49 ns0.48 ns .. 0.50 nsper elem
prepareweier-jacobian.127/mode=indepweier127-jacobianper-element0.62 ns0.62 ns .. 0.62 nsper elem
prepareweier.61x2/mode=batch,n=1024weier61x2batch0.72 ns0.66 ns .. 0.78 nsper elem
prepareweier.61x2/mode=indepweier61x2per-element0.63 ns0.63 ns .. 0.63 nsper elem
prepareweier-jacobian.61x2/mode=batch,n=1024weier61x2-jacobianbatch0.54 ns0.52 ns .. 0.58 nsper elem
prepareweier-jacobian.61x2/mode=indepweier61x2-jacobianper-element0.63 ns0.63 ns .. 0.63 nsper elem
addxor-sha256/xor 32B, 1 accumulatorxorlatency0.38 ns0.37 ns .. 0.38 nsper elem
addxor-sha256/xor 32B, 8 accumulatorsxorthroughput0.71 ns0.70 ns .. 0.71 nsper elem
addbinary.109/mode=latencygf2_109latency24.3 ns24.2 ns .. 24.4 nsper elem
addbinary.109/mode=throughputgf2_109throughput12.8 ns12.8 ns .. 12.9 nsper elem
addgf2_109/extended += affine, 8 accumulatorsgf2_109throughput16.0 ns16.0 ns .. 16.0 nsper elem
addbinary-lambda.109/mode=latencygf2_109-lambdalatency24.2 ns24.1 ns .. 24.3 nsper elem
addbinary-lambda.109/mode=throughputgf2_109-lambdathroughput12.0 ns12.0 ns .. 12.0 nsper elem
addbinary-u.109/mode=latencygf2_109-ulatency19.0 ns18.9 ns .. 19.0 nsper elem
addbinary-u.109/mode=throughputgf2_109-uthroughput9.76 ns9.74 ns .. 9.78 nsper elem
addbinary-w.109/mode=latencygf2_109-wlatency24.2 ns24.2 ns .. 24.3 nsper elem
addbinary-w.109/mode=throughputgf2_109-wthroughput12.0 ns11.9 ns .. 12.0 nsper elem
addbinary.122/mode=latencygf2_122latency26.1 ns26.1 ns .. 26.2 nsper elem
addbinary.122/mode=throughputgf2_122throughput17.8 ns17.8 ns .. 17.9 nsper elem
addgf2_122/extended += affine, 8 accumulatorsgf2_122throughput22.2 ns22.2 ns .. 22.2 nsper elem
addbinary.122-gls/mode=latencygf2_122-glslatency23.7 ns23.7 ns .. 23.8 nsper elem
addbinary.122-gls/mode=throughputgf2_122-glsthroughput16.8 ns16.7 ns .. 16.8 nsper elem
addgf2_122-gls/extended += affine, 8 accumulatorsgf2_122-glsthroughput20.1 ns20.1 ns .. 20.1 nsper elem
addbinary-lambda.122-gls/mode=latencygf2_122-gls-lambdalatency23.1 ns23.1 ns .. 23.2 nsper elem
addbinary-lambda.122-gls/mode=throughputgf2_122-gls-lambdathroughput16.6 ns16.5 ns .. 16.6 nsper elem
addbinary-u.122-gls/mode=latencygf2_122-gls-ulatency18.9 ns18.8 ns .. 18.9 nsper elem
addbinary-u.122-gls/mode=throughputgf2_122-gls-uthroughput13.1 ns13.1 ns .. 13.1 nsper elem
addbinary-w.122-gls/mode=latencygf2_122-gls-wlatency23.1 ns23.0 ns .. 23.1 nsper elem
addbinary-w.122-gls/mode=throughputgf2_122-gls-wthroughput16.6 ns16.5 ns .. 16.6 nsper elem
addbinary-lambda.122/mode=latencygf2_122-lambdalatency23.0 ns23.0 ns .. 23.1 nsper elem
addbinary-lambda.122/mode=throughputgf2_122-lambdathroughput16.6 ns16.5 ns .. 16.6 nsper elem
addbinary-u.122/mode=latencygf2_122-ulatency18.8 ns18.8 ns .. 18.9 nsper elem
addbinary-u.122/mode=throughputgf2_122-uthroughput13.1 ns13.0 ns .. 13.1 nsper elem
addbinary-w.122/mode=latencygf2_122-wlatency23.0 ns22.9 ns .. 23.0 nsper elem
addbinary-w.122/mode=throughputgf2_122-wthroughput16.6 ns16.5 ns .. 16.6 nsper elem
addbinary.127/mode=latencygf2_127latency22.0 ns21.9 ns .. 22.0 nsper elem
addbinary.127/mode=throughputgf2_127throughput14.1 ns14.1 ns .. 14.1 nsper elem
addgf2_127/extended += affine, 8 accumulatorsgf2_127throughput18.8 ns18.8 ns .. 18.9 nsper elem
addbinary-lambda.127/mode=latencygf2_127-lambdalatency20.2 ns20.1 ns .. 20.2 nsper elem
addbinary-lambda.127/mode=throughputgf2_127-lambdathroughput14.9 ns14.9 ns .. 14.9 nsper elem
addbinary-u.127/mode=latencygf2_127-ulatency17.5 ns17.4 ns .. 17.5 nsper elem
addbinary-u.127/mode=throughputgf2_127-uthroughput10.7 ns10.6 ns .. 10.7 nsper elem
addbinary-w.127/mode=latencygf2_127-wlatency20.2 ns20.1 ns .. 20.2 nsper elem
addbinary-w.127/mode=throughputgf2_127-wthroughput14.9 ns14.8 ns .. 14.9 nsper elem
addedwards.107/mode=latencyedwards107latency18.4 ns18.3 ns .. 18.4 nsper elem
addedwards.107/mode=throughputedwards107throughput15.5 ns15.4 ns .. 15.5 nsper elem
addedwards107/+= montgomery affine, 8 accumulatorsedwards107throughput29.1 ns29.1 ns .. 29.1 nsper elem
addedwards.127/mode=latencyedwards127latency22.2 ns22.2 ns .. 22.2 nsper elem
addedwards.127/mode=throughputedwards127throughput20.1 ns20.0 ns .. 20.1 nsper elem
addedwards127/+= montgomery affine, 8 accumulatorsedwards127throughput40.1 ns40.1 ns .. 40.1 nsper elem
addedwards.61x2/mode=latencyedwards61x2latency22.5 ns22.4 ns .. 22.5 nsper elem
addedwards.61x2/mode=throughputedwards61x2throughput13.3 ns13.3 ns .. 13.4 nsper elem
addtwisted.goldilocks2/mode=latencytwisted-goldilocks2latency19.0 ns18.9 ns .. 19.0 nsper elem
addtwisted.goldilocks2/mode=throughputtwisted-goldilocks2throughput15.0 ns15.0 ns .. 15.1 nsper elem
addtwisted.128/mode=latencytwisted128latency28.8 ns28.7 ns .. 28.8 nsper elem
addtwisted.128/mode=throughputtwisted128throughput23.9 ns23.8 ns .. 24.0 nsper elem
addtwisted.61x2/mode=latencytwisted61x2latency22.3 ns22.3 ns .. 22.3 nsper elem
addtwisted.61x2/mode=throughputtwisted61x2throughput12.5 ns12.4 ns .. 12.6 nsper elem
addtwisted.64x2/mode=latencytwisted64x2latency28.6 ns28.5 ns .. 28.7 nsper elem
addtwisted.64x2/mode=throughputtwisted64x2throughput17.2 ns17.2 ns .. 17.3 nsper elem
addweier.107/mode=latencyweier107latency32.4 ns32.3 ns .. 32.4 nsper elem
addweier.107/mode=throughputweier107throughput30.5 ns30.4 ns .. 30.5 nsper elem
addweier-jacobian.107/mode=latencyweier107-jacobianlatency35.5 ns35.4 ns .. 35.6 nsper elem
addweier-jacobian.107/mode=throughputweier107-jacobianthroughput28.7 ns28.6 ns .. 28.7 nsper elem
addweier.127/mode=latencyweier127latency46.7 ns46.5 ns .. 46.8 nsper elem
addweier.127/mode=throughputweier127throughput45.4 ns45.3 ns .. 45.5 nsper elem
addweier-jacobian.127/mode=latencyweier127-jacobianlatency45.3 ns45.1 ns .. 45.6 nsper elem
addweier-jacobian.127/mode=throughputweier127-jacobianthroughput37.5 ns37.4 ns .. 37.6 nsper elem
addweier.61x2/mode=latencyweier61x2latency36.2 ns36.2 ns .. 36.3 nsper elem
addweier.61x2/mode=throughputweier61x2throughput26.8 ns26.7 ns .. 26.8 nsper elem
addweier-jacobian.61x2/mode=latencyweier61x2-jacobianlatency37.2 ns37.1 ns .. 37.3 nsper elem
addweier-jacobian.61x2/mode=throughputweier61x2-jacobianthroughput31.6 ns31.6 ns .. 31.7 nsper elem
addristretto255/+=, 1 accumulatorristretto255latency63.8 ns63.7 ns .. 63.8 nsper elem
addristretto255/+=, 8 accumulatorsristretto255throughput65.1 ns64.8 ns .. 65.5 nsper elem
subtractbinary.109/mode=throughputgf2_109throughput13.2 ns13.2 ns .. 13.3 nsper elem
subtractbinary-lambda.109/mode=throughputgf2_109-lambdathroughput12.1 ns12.1 ns .. 12.1 nsper elem
subtractbinary-u.109/mode=throughputgf2_109-uthroughput9.88 ns9.86 ns .. 9.90 nsper elem
subtractbinary-w.109/mode=throughputgf2_109-wthroughput12.1 ns12.1 ns .. 12.1 nsper elem
subtractbinary-lambda.122-gls/mode=throughputgf2_122-gls-lambdathroughput16.7 ns16.7 ns .. 16.8 nsper elem
subtractbinary-u.122-gls/mode=throughputgf2_122-gls-uthroughput13.2 ns13.2 ns .. 13.2 nsper elem
subtractbinary-w.122-gls/mode=throughputgf2_122-gls-wthroughput16.8 ns16.7 ns .. 16.9 nsper elem
subtractbinary-lambda.122/mode=throughputgf2_122-lambdathroughput16.7 ns16.7 ns .. 16.8 nsper elem
subtractbinary-u.122/mode=throughputgf2_122-uthroughput13.2 ns13.2 ns .. 13.2 nsper elem
subtractbinary-w.122/mode=throughputgf2_122-wthroughput17.1 ns16.7 ns .. 17.5 nsper elem
subtractbinary.127/mode=throughputgf2_127throughput14.7 ns14.7 ns .. 14.7 nsper elem
subtractbinary-lambda.127/mode=throughputgf2_127-lambdathroughput15.1 ns15.1 ns .. 15.2 nsper elem
subtractbinary-u.127/mode=throughputgf2_127-uthroughput10.8 ns10.7 ns .. 10.8 nsper elem
subtractbinary-w.127/mode=throughputgf2_127-wthroughput14.7 ns14.6 ns .. 14.8 nsper elem
subtracttwisted.61x2/mode=throughputtwisted61x2throughput12.8 ns12.7 ns .. 12.8 nsper elem
subtractristretto255/-=, 8 accumulatorsristretto255throughput64.4 ns64.1 ns .. 64.7 nsper elem
negatebinary.109gf2_109per-element1.13 ns1.13 ns .. 1.13 nsper elem
negategf2_109/affine (y += x)gf2_109per-element0.63 ns0.63 ns .. 0.63 nsper elem
negatebinary-lambda.109gf2_109-lambdaper-element0.65 ns0.65 ns .. 0.65 nsper elem
negatebinary-u.109gf2_109-uper-element0.65 ns0.65 ns .. 0.65 nsper elem
negatebinary-w.109gf2_109-wper-element0.65 ns0.65 ns .. 0.65 nsper elem
negatebinary.122gf2_122per-element1.13 ns1.13 ns .. 1.13 nsper elem
negategf2_122/affine (y += x)gf2_122per-element0.63 ns0.63 ns .. 0.63 nsper elem
negatebinary.122-glsgf2_122-glsper-element1.12 ns1.12 ns .. 1.13 nsper elem
negatebinary-lambda.122-glsgf2_122-gls-lambdaper-element0.65 ns0.65 ns .. 0.65 nsper elem
negatebinary-u.122-glsgf2_122-gls-uper-element0.65 ns0.65 ns .. 0.65 nsper elem
negatebinary-w.122-glsgf2_122-gls-wper-element0.65 ns0.65 ns .. 0.65 nsper elem
negatebinary-lambda.122gf2_122-lambdaper-element0.65 ns0.65 ns .. 0.65 nsper elem
negatebinary-u.122gf2_122-uper-element0.65 ns0.65 ns .. 0.65 nsper elem
negatebinary-w.122gf2_122-wper-element0.65 ns0.65 ns .. 0.65 nsper elem
negatebinary.127gf2_127per-element1.08 ns1.08 ns .. 1.09 nsper elem
negategf2_127/affine (y += x)gf2_127per-element0.64 ns0.64 ns .. 0.64 nsper elem
negatebinary-lambda.127gf2_127-lambdaper-element0.65 ns0.65 ns .. 0.65 nsper elem
negatebinary-u.127gf2_127-uper-element0.64 ns0.63 ns .. 0.64 nsper elem
negatebinary-w.127gf2_127-wper-element0.65 ns0.65 ns .. 0.65 nsper elem
negateedwards.107edwards107per-element0.83 ns0.82 ns .. 0.83 nsper elem
negateedwards107/extended (-X, -T)edwards107per-element1.02 ns1.02 ns .. 1.02 nsper elem
negateedwards.127edwards127per-element1.34 ns1.33 ns .. 1.34 nsper elem
negateedwards127/extended (-X, -T)edwards127per-element1.44 ns1.43 ns .. 1.45 nsper elem
negateedwards.61x2edwards61x2per-element0.88 ns0.88 ns .. 0.88 nsper elem
negatetwisted.goldilocks2twisted-goldilocks2per-element1.49 ns1.48 ns .. 1.49 nsper elem
negatetwisted.128twisted128per-element0.85 ns0.85 ns .. 0.86 nsper elem
negatetwisted.61x2twisted61x2per-element0.91 ns0.90 ns .. 0.92 nsper elem
negatetwisted.64x2twisted64x2per-element0.91 ns0.90 ns .. 0.91 nsper elem
negateweier.107weier107per-element0.58 ns0.58 ns .. 0.58 nsper elem
negateweier107/projective (-Y)weier107per-element0.80 ns0.80 ns .. 0.80 nsper elem
negateweier-jacobian.107weier107-jacobianper-element0.58 ns0.58 ns .. 0.58 nsper elem
negateweier.127weier127per-element0.69 ns0.69 ns .. 0.69 nsper elem
negateweier127/projective (-Y)weier127per-element0.93 ns0.92 ns .. 0.93 nsper elem
negateweier-jacobian.127weier127-jacobianper-element0.69 ns0.69 ns .. 0.69 nsper elem
negateweier.61x2weier61x2per-element0.66 ns0.66 ns .. 0.66 nsper elem
negateweier-jacobian.61x2weier61x2-jacobianper-element0.66 ns0.66 ns .. 0.66 nsper elem
negateristretto255/-Pristretto255per-element6.20 ns6.17 ns .. 6.22 nsper elem
negatesecp256k1/PublicKey::negatesecp256k1per-element12.8 ns12.7 ns .. 12.9 nsper elem
is identitybinary.109gf2_109per-element0.64 ns0.63 ns .. 0.64 nsper elem
is identitybinary-lambda.109gf2_109-lambdaper-element0.56 ns0.55 ns .. 0.56 nsper elem
is identitybinary-u.109gf2_109-uper-element0.56 ns0.55 ns .. 0.56 nsper elem
is identitybinary-w.109gf2_109-wper-element0.56 ns0.56 ns .. 0.56 nsper elem
is identitybinary.122gf2_122per-element0.77 ns0.77 ns .. 0.78 nsper elem
is identitybinary.122-glsgf2_122-glsper-element0.77 ns0.77 ns .. 0.77 nsper elem
is identitybinary-lambda.122-glsgf2_122-gls-lambdaper-element0.78 ns0.77 ns .. 0.78 nsper elem
is identitybinary-u.122-glsgf2_122-gls-uper-element0.78 ns0.77 ns .. 0.78 nsper elem
is identitybinary-w.122-glsgf2_122-gls-wper-element0.78 ns0.77 ns .. 0.78 nsper elem
is identitybinary-lambda.122gf2_122-lambdaper-element0.77 ns0.77 ns .. 0.78 nsper elem
is identitybinary-u.122gf2_122-uper-element0.77 ns0.77 ns .. 0.78 nsper elem
is identitybinary-w.122gf2_122-wper-element0.77 ns0.77 ns .. 0.78 nsper elem
is identitybinary.127gf2_127per-element0.81 ns0.81 ns .. 0.81 nsper elem
is identitybinary-lambda.127gf2_127-lambdaper-element0.84 ns0.84 ns .. 0.84 nsper elem
is identitybinary-u.127gf2_127-uper-element0.84 ns0.84 ns .. 0.84 nsper elem
is identitybinary-w.127gf2_127-wper-element0.84 ns0.84 ns .. 0.84 nsper elem
is identityedwards.107edwards107per-element0.75 ns0.74 ns .. 0.75 nsper elem
is identityedwards.127edwards127per-element0.38 ns0.38 ns .. 0.38 nsper elem
is identityedwards.61x2edwards61x2per-element0.38 ns0.38 ns .. 0.38 nsper elem
is identitytwisted.goldilocks2twisted-goldilocks2per-element0.52 ns0.52 ns .. 0.53 nsper elem
is identitytwisted.128twisted128per-element0.34 ns0.34 ns .. 0.35 nsper elem
is identitytwisted.61x2twisted61x2per-element0.34 ns0.34 ns .. 0.35 nsper elem
is identitytwisted.64x2twisted64x2per-element0.34 ns0.34 ns .. 0.35 nsper elem
is identityweier.107weier107per-element0.84 ns0.84 ns .. 0.84 nsper elem
is identityweier-jacobian.107weier107-jacobianper-element0.84 ns0.84 ns .. 0.84 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
is identityweier.61x2weier61x2per-element0.52 ns0.52 ns .. 0.53 nsper elem
is identityweier-jacobian.61x2weier61x2-jacobianper-element0.52 ns0.52 ns .. 0.53 nsper elem
equals addendbinary.109/mode=matchgf2_109match2.24 ns2.23 ns .. 2.26 nsper elem
equals addendbinary.109/mode=mismatchgf2_109mismatch2.28 ns2.28 ns .. 2.29 nsper elem
equals addendbinary-lambda.109/mode=matchgf2_109-lambdamatch1.60 ns1.60 ns .. 1.61 nsper elem
equals addendbinary-lambda.109/mode=mismatchgf2_109-lambdamismatch1.60 ns1.60 ns .. 1.60 nsper elem
equals addendbinary-u.109/mode=matchgf2_109-umatch3.46 ns3.46 ns .. 3.47 nsper elem
equals addendbinary-u.109/mode=mismatchgf2_109-umismatch3.50 ns3.48 ns .. 3.53 nsper elem
equals addendbinary-w.109/mode=matchgf2_109-wmatch1.82 ns1.81 ns .. 1.82 nsper elem
equals addendbinary-w.109/mode=mismatchgf2_109-wmismatch1.82 ns1.82 ns .. 1.82 nsper elem
equals addendbinary.122/mode=mismatchgf2_122mismatch3.75 ns3.73 ns .. 3.76 nsper elem
equals addendbinary.122-gls/mode=mismatchgf2_122-glsmismatch3.79 ns3.78 ns .. 3.79 nsper elem
equals addendbinary-lambda.122-gls/mode=matchgf2_122-gls-lambdamatch3.79 ns3.78 ns .. 3.80 nsper elem
equals addendbinary-lambda.122-gls/mode=mismatchgf2_122-gls-lambdamismatch3.79 ns3.79 ns .. 3.80 nsper elem
equals addendbinary-u.122-gls/mode=matchgf2_122-gls-umatch5.32 ns5.30 ns .. 5.33 nsper elem
equals addendbinary-u.122-gls/mode=mismatchgf2_122-gls-umismatch5.31 ns5.30 ns .. 5.32 nsper elem
equals addendbinary-w.122-gls/mode=matchgf2_122-gls-wmatch3.79 ns3.78 ns .. 3.80 nsper elem
equals addendbinary-w.122-gls/mode=mismatchgf2_122-gls-wmismatch3.79 ns3.78 ns .. 3.79 nsper elem
equals addendbinary-lambda.122/mode=matchgf2_122-lambdamatch3.78 ns3.77 ns .. 3.79 nsper elem
equals addendbinary-lambda.122/mode=mismatchgf2_122-lambdamismatch3.79 ns3.79 ns .. 3.80 nsper elem
equals addendbinary-u.122/mode=matchgf2_122-umatch5.31 ns5.30 ns .. 5.32 nsper elem
equals addendbinary-u.122/mode=mismatchgf2_122-umismatch5.34 ns5.32 ns .. 5.36 nsper elem
equals addendbinary-w.122/mode=matchgf2_122-wmatch3.77 ns3.77 ns .. 3.78 nsper elem
equals addendbinary-w.122/mode=mismatchgf2_122-wmismatch3.79 ns3.78 ns .. 3.79 nsper elem
equals addendbinary.127/mode=matchgf2_127match2.98 ns2.97 ns .. 2.99 nsper elem
equals addendbinary.127/mode=mismatchgf2_127mismatch2.87 ns2.87 ns .. 2.88 nsper elem
equals addendbinary-lambda.127/mode=matchgf2_127-lambdamatch3.84 ns3.83 ns .. 3.85 nsper elem
equals addendbinary-lambda.127/mode=mismatchgf2_127-lambdamismatch3.81 ns3.79 ns .. 3.82 nsper elem
equals addendbinary-u.127/mode=matchgf2_127-umatch4.67 ns4.66 ns .. 4.68 nsper elem
equals addendbinary-u.127/mode=mismatchgf2_127-umismatch4.68 ns4.68 ns .. 4.69 nsper elem
equals addendbinary-w.127/mode=matchgf2_127-wmatch3.86 ns3.84 ns .. 3.89 nsper elem
equals addendbinary-w.127/mode=mismatchgf2_127-wmismatch3.84 ns3.83 ns .. 3.84 nsper elem
equals addendedwards.107/mode=mismatchedwards107mismatch3.05 ns3.04 ns .. 3.06 nsper elem
equals addendedwards.127/mode=mismatchedwards127mismatch1.97 ns1.97 ns .. 1.98 nsper elem
equals addendedwards.61x2/mode=mismatchedwards61x2mismatch1.65 ns1.64 ns .. 1.66 nsper elem
equals addendtwisted.goldilocks2/mode=mismatchtwisted-goldilocks2mismatch4.92 ns4.89 ns .. 4.95 nsper elem
equals addendtwisted.128/mode=mismatchtwisted128mismatch7.51 ns7.49 ns .. 7.53 nsper elem
equals addendtwisted.61x2/mode=matchtwisted61x2match3.32 ns3.31 ns .. 3.33 nsper elem
equals addendtwisted.61x2/mode=mismatchtwisted61x2mismatch3.32 ns3.31 ns .. 3.32 nsper elem
equals addendtwisted.64x2/mode=mismatchtwisted64x2mismatch5.39 ns5.37 ns .. 5.40 nsper elem
equals addendweier.107/mode=mismatchweier107mismatch3.63 ns3.62 ns .. 3.64 nsper elem
equals addendweier-jacobian.107/mode=mismatchweier107-jacobianmismatch5.96 ns5.95 ns .. 5.98 nsper elem
equals addendweier.127/mode=mismatchweier127mismatch2.05 ns2.04 ns .. 2.06 nsper elem
equals addendweier-jacobian.127/mode=mismatchweier127-jacobianmismatch4.53 ns4.52 ns .. 4.54 nsper elem
equals addendweier.61x2/mode=mismatchweier61x2mismatch1.70 ns1.69 ns .. 1.71 nsper elem
equals addendweier-jacobian.61x2/mode=mismatchweier61x2-jacobianmismatch3.59 ns3.57 ns .. 3.62 nsper elem
encodebinary.109/mode=batch,n=1024gf2_109batch10.9 ns10.9 ns .. 11.0 nsper elem
encodebinary.109/mode=batch,n=64gf2_109batch20.3 ns20.3 ns .. 20.4 nsper elem
encodebinary.109/mode=batch,n=8gf2_109batch76.6 ns76.4 ns .. 76.8 nsper elem
encodebinary.109/mode=indepgf2_109per-element381 ns381 ns .. 382 nsper elem
encodebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch8.13 ns8.12 ns .. 8.15 nsper elem
encodebinary-lambda.109/mode=batch,n=64gf2_109-lambdabatch17.5 ns17.4 ns .. 17.5 nsper elem
encodebinary-lambda.109/mode=batch,n=8gf2_109-lambdabatch73.3 ns73.1 ns .. 73.5 nsper elem
encodebinary-lambda.109/mode=indepgf2_109-lambdaper-element366 ns364 ns .. 368 nsper elem
encodebinary-u.109/mode=batch,n=1024gf2_109-ubatch9.88 ns9.84 ns .. 9.92 nsper elem
encodebinary-u.109/mode=batch,n=64gf2_109-ubatch19.1 ns19.0 ns .. 19.1 nsper elem
encodebinary-u.109/mode=batch,n=8gf2_109-ubatch74.5 ns74.3 ns .. 74.8 nsper elem
encodebinary-u.109/mode=indepgf2_109-uper-element397 ns394 ns .. 401 nsper elem
encodebinary-w.109/mode=batch,n=1024gf2_109-wbatch10.4 ns10.3 ns .. 10.4 nsper elem
encodebinary-w.109/mode=batch,n=64gf2_109-wbatch19.7 ns19.7 ns .. 19.7 nsper elem
encodebinary-w.109/mode=batch,n=8gf2_109-wbatch76.3 ns76.1 ns .. 76.5 nsper elem
encodebinary-w.109/mode=indepgf2_109-wper-element359 ns357 ns .. 361 nsper elem
encodebinary.122/mode=batch,n=1024gf2_122batch15.7 ns15.6 ns .. 15.7 nsper elem
encodebinary.122/mode=indepgf2_122per-element211 ns210 ns .. 212 nsper elem
encodebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch15.2 ns15.2 ns .. 15.2 nsper elem
encodebinary.122-gls/mode=indepgf2_122-glsper-element209 ns208 ns .. 209 nsper elem
encodebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch11.6 ns11.6 ns .. 11.6 nsper elem
encodebinary-lambda.122-gls/mode=batch,n=64gf2_122-gls-lambdabatch17.7 ns17.7 ns .. 17.7 nsper elem
encodebinary-lambda.122-gls/mode=batch,n=8gf2_122-gls-lambdabatch53.2 ns53.1 ns .. 53.4 nsper elem
encodebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element189 ns189 ns .. 190 nsper elem
encodebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch12.3 ns12.3 ns .. 12.3 nsper elem
encodebinary-u.122-gls/mode=batch,n=64gf2_122-gls-ubatch18.1 ns18.1 ns .. 18.2 nsper elem
encodebinary-u.122-gls/mode=batch,n=8gf2_122-gls-ubatch51.2 ns51.1 ns .. 51.3 nsper elem
encodebinary-u.122-gls/mode=indepgf2_122-gls-uper-element195 ns195 ns .. 196 nsper elem
encodebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch14.4 ns14.4 ns .. 14.5 nsper elem
encodebinary-w.122-gls/mode=batch,n=64gf2_122-gls-wbatch20.6 ns20.6 ns .. 20.7 nsper elem
encodebinary-w.122-gls/mode=batch,n=8gf2_122-gls-wbatch55.5 ns55.4 ns .. 55.6 nsper elem
encodebinary-w.122-gls/mode=indepgf2_122-gls-wper-element204 ns204 ns .. 205 nsper elem
encodebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch11.9 ns11.9 ns .. 11.9 nsper elem
encodebinary-lambda.122/mode=batch,n=64gf2_122-lambdabatch17.8 ns17.8 ns .. 17.8 nsper elem
encodebinary-lambda.122/mode=batch,n=8gf2_122-lambdabatch52.8 ns52.6 ns .. 52.9 nsper elem
encodebinary-lambda.122/mode=indepgf2_122-lambdaper-element189 ns189 ns .. 189 nsper elem
encodebinary-u.122/mode=batch,n=1024gf2_122-ubatch12.1 ns12.0 ns .. 12.1 nsper elem
encodebinary-u.122/mode=batch,n=64gf2_122-ubatch18.1 ns18.0 ns .. 18.1 nsper elem
encodebinary-u.122/mode=batch,n=8gf2_122-ubatch50.6 ns50.5 ns .. 50.7 nsper elem
encodebinary-u.122/mode=indepgf2_122-uper-element206 ns206 ns .. 207 nsper elem
encodebinary-w.122/mode=batch,n=1024gf2_122-wbatch14.4 ns14.4 ns .. 14.5 nsper elem
encodebinary-w.122/mode=batch,n=64gf2_122-wbatch20.6 ns20.6 ns .. 20.6 nsper elem
encodebinary-w.122/mode=batch,n=8gf2_122-wbatch55.6 ns55.4 ns .. 55.7 nsper elem
encodebinary-w.122/mode=indepgf2_122-wper-element204 ns204 ns .. 205 nsper elem
encodebinary.127/mode=batch,n=1024gf2_127batch13.1 ns13.0 ns .. 13.2 nsper elem
encodebinary.127/mode=batch,n=64gf2_127batch21.7 ns21.7 ns .. 21.8 nsper elem
encodebinary.127/mode=batch,n=8gf2_127batch71.6 ns71.4 ns .. 71.8 nsper elem
encodebinary.127/mode=indepgf2_127per-element371 ns370 ns .. 372 nsper elem
encodebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch10.1 ns10.1 ns .. 10.2 nsper elem
encodebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch18.4 ns18.3 ns .. 18.4 nsper elem
encodebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch68.2 ns68.0 ns .. 68.3 nsper elem
encodebinary-lambda.127/mode=indepgf2_127-lambdaper-element361 ns360 ns .. 362 nsper elem
encodebinary-u.127/mode=batch,n=1024gf2_127-ubatch9.17 ns9.15 ns .. 9.20 nsper elem
encodebinary-u.127/mode=batch,n=64gf2_127-ubatch17.2 ns17.1 ns .. 17.2 nsper elem
encodebinary-u.127/mode=batch,n=8gf2_127-ubatch65.7 ns65.5 ns .. 65.9 nsper elem
encodebinary-u.127/mode=indepgf2_127-uper-element355 ns354 ns .. 355 nsper elem
encodebinary-w.127/mode=batch,n=1024gf2_127-wbatch10.3 ns10.3 ns .. 10.3 nsper elem
encodebinary-w.127/mode=batch,n=64gf2_127-wbatch18.6 ns18.6 ns .. 18.6 nsper elem
encodebinary-w.127/mode=batch,n=8gf2_127-wbatch67.8 ns67.7 ns .. 68.0 nsper elem
encodebinary-w.127/mode=indepgf2_127-wper-element361 ns360 ns .. 361 nsper elem
encodeedwards.107/mode=batch,n=1024edwards107batch20.3 ns20.2 ns .. 20.3 nsper elem
encodeedwards.107/mode=indepedwards107per-element506 ns505 ns .. 507 nsper elem
encodeedwards.127/mode=batch,n=1024edwards127batch22.0 ns21.9 ns .. 22.0 nsper elem
encodeedwards.127/mode=indepedwards127per-element549 ns548 ns .. 551 nsper elem
encodeedwards.61x2/mode=batch,n=1024edwards61x2batch16.2 ns16.2 ns .. 16.3 nsper elem
encodeedwards.61x2/mode=indepedwards61x2per-element181 ns180 ns .. 181 nsper elem
encodetwisted.goldilocks2/mode=batch,n=1024twisted-goldilocks2batch11.3 ns11.2 ns .. 11.3 nsper elem
encodetwisted.goldilocks2/mode=indeptwisted-goldilocks2per-element197 ns194 ns .. 201 nsper elem
encodetwisted.128/mode=batch,n=1024twisted128batch16.0 ns16.0 ns .. 16.0 nsper elem
encodetwisted.128/mode=indeptwisted128per-element939 ns937 ns .. 941 nsper elem
encodetwisted.61x2/mode=batch,n=1024twisted61x2batch8.07 ns8.05 ns .. 8.09 nsper elem
encodetwisted.61x2/mode=batch,n=64twisted61x2batch13.8 ns13.8 ns .. 13.9 nsper elem
encodetwisted.61x2/mode=batch,n=8twisted61x2batch45.4 ns45.3 ns .. 45.5 nsper elem
encodetwisted.61x2/mode=indeptwisted61x2per-element179 ns178 ns .. 179 nsper elem
encodetwisted.64x2/mode=batch,n=1024twisted64x2batch10.3 ns10.3 ns .. 10.4 nsper elem
encodetwisted.64x2/mode=indeptwisted64x2per-element290 ns290 ns .. 291 nsper elem
encodeweier.107/mode=batch,n=1024weier107batch11.5 ns11.5 ns .. 11.5 nsper elem
encodeweier.107/mode=indepweier107per-element497 ns496 ns .. 498 nsper elem
encodeweier-jacobian.107/mode=batch,n=1024weier107-jacobianbatch15.3 ns15.3 ns .. 15.3 nsper elem
encodeweier-jacobian.107/mode=indepweier107-jacobianper-element502 ns501 ns .. 503 nsper elem
encodeweier.127/mode=batch,n=1024weier127batch10.1 ns10.1 ns .. 10.1 nsper elem
encodeweier.127/mode=indepweier127per-element536 ns534 ns .. 537 nsper elem
encodeweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch15.7 ns15.7 ns .. 15.7 nsper elem
encodeweier-jacobian.127/mode=indepweier127-jacobianper-element533 ns530 ns .. 536 nsper elem
encodeweier.61x2/mode=batch,n=1024weier61x2batch8.11 ns8.09 ns .. 8.12 nsper elem
encodeweier.61x2/mode=indepweier61x2per-element170 ns169 ns .. 170 nsper elem
encodeweier-jacobian.61x2/mode=batch,n=1024weier61x2-jacobianbatch11.7 ns11.7 ns .. 11.7 nsper elem
encodeweier-jacobian.61x2/mode=indepweier61x2-jacobianper-element179 ns179 ns .. 180 nsper elem
decodebinary.109/mode=batch,n=1024gf2_109batch14.2 ns14.2 ns .. 14.2 nsper elem
decodebinary.109/mode=batch,n=64gf2_109batch23.5 ns23.4 ns .. 23.6 nsper elem
decodebinary.109/mode=batch,n=8gf2_109batch82.3 ns82.1 ns .. 82.5 nsper elem
decodebinary.109/mode=indepgf2_109per-element380 ns379 ns .. 381 nsper elem
decodebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch14.1 ns14.1 ns .. 14.2 nsper elem
decodebinary-lambda.109/mode=batch,n=64gf2_109-lambdabatch23.6 ns23.5 ns .. 23.7 nsper elem
decodebinary-lambda.109/mode=batch,n=8gf2_109-lambdabatch82.3 ns82.1 ns .. 82.6 nsper elem
decodebinary-lambda.109/mode=indepgf2_109-lambdaper-element381 ns381 ns .. 382 nsper elem
decodebinary-u.109/mode=batch,n=1024gf2_109-ubatch18.4 ns18.4 ns .. 18.4 nsper elem
decodebinary-u.109/mode=batch,n=64gf2_109-ubatch26.7 ns26.6 ns .. 26.9 nsper elem
decodebinary-u.109/mode=batch,n=8gf2_109-ubatch87.4 ns87.2 ns .. 87.6 nsper elem
decodebinary-u.109/mode=indepgf2_109-uper-element398 ns397 ns .. 400 nsper elem
decodebinary-w.109/mode=batch,n=1024gf2_109-wbatch15.5 ns15.4 ns .. 15.5 nsper elem
decodebinary-w.109/mode=batch,n=64gf2_109-wbatch24.4 ns24.4 ns .. 24.5 nsper elem
decodebinary-w.109/mode=batch,n=8gf2_109-wbatch83.9 ns83.7 ns .. 84.1 nsper elem
decodebinary-w.109/mode=indepgf2_109-wper-element378 ns377 ns .. 379 nsper elem
decodebinary.122/mode=batch,n=1024gf2_122batch13.5 ns13.5 ns .. 13.5 nsper elem
decodebinary.122/mode=indepgf2_122per-element197 ns196 ns .. 197 nsper elem
decodebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch13.2 ns13.2 ns .. 13.2 nsper elem
decodebinary.122-gls/mode=indepgf2_122-glsper-element195 ns194 ns .. 195 nsper elem
decodebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch13.2 ns13.2 ns .. 13.2 nsper elem
decodebinary-lambda.122-gls/mode=batch,n=64gf2_122-gls-lambdabatch19.4 ns19.4 ns .. 19.5 nsper elem
decodebinary-lambda.122-gls/mode=batch,n=8gf2_122-gls-lambdabatch57.7 ns57.6 ns .. 57.9 nsper elem
decodebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element187 ns187 ns .. 188 nsper elem
decodebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch16.8 ns16.8 ns .. 16.8 nsper elem
decodebinary-u.122-gls/mode=batch,n=64gf2_122-gls-ubatch22.6 ns22.5 ns .. 22.6 nsper elem
decodebinary-u.122-gls/mode=batch,n=8gf2_122-gls-ubatch62.1 ns61.9 ns .. 62.4 nsper elem
decodebinary-u.122-gls/mode=indepgf2_122-gls-uper-element207 ns206 ns .. 207 nsper elem
decodebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch14.3 ns14.3 ns .. 14.3 nsper elem
decodebinary-w.122-gls/mode=batch,n=64gf2_122-gls-wbatch20.1 ns20.0 ns .. 20.1 nsper elem
decodebinary-w.122-gls/mode=batch,n=8gf2_122-gls-wbatch58.4 ns58.3 ns .. 58.5 nsper elem
decodebinary-w.122-gls/mode=indepgf2_122-gls-wper-element191 ns191 ns .. 191 nsper elem
decodebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch13.5 ns13.5 ns .. 13.5 nsper elem
decodebinary-lambda.122/mode=batch,n=64gf2_122-lambdabatch19.8 ns19.8 ns .. 19.8 nsper elem
decodebinary-lambda.122/mode=batch,n=8gf2_122-lambdabatch57.4 ns57.1 ns .. 57.6 nsper elem
decodebinary-lambda.122/mode=indepgf2_122-lambdaper-element196 ns195 ns .. 196 nsper elem
decodebinary-u.122/mode=batch,n=1024gf2_122-ubatch18.7 ns18.7 ns .. 18.8 nsper elem
decodebinary-u.122/mode=batch,n=64gf2_122-ubatch25.2 ns25.2 ns .. 25.3 nsper elem
decodebinary-u.122/mode=batch,n=8gf2_122-ubatch65.6 ns65.4 ns .. 65.8 nsper elem
decodebinary-u.122/mode=indepgf2_122-uper-element223 ns222 ns .. 223 nsper elem
decodebinary-w.122/mode=batch,n=1024gf2_122-wbatch14.4 ns14.4 ns .. 14.5 nsper elem
decodebinary-w.122/mode=batch,n=64gf2_122-wbatch20.6 ns20.6 ns .. 20.7 nsper elem
decodebinary-w.122/mode=batch,n=8gf2_122-wbatch59.0 ns58.9 ns .. 59.2 nsper elem
decodebinary-w.122/mode=indepgf2_122-wper-element193 ns192 ns .. 193 nsper elem
decodebinary.127/mode=batch,n=1024gf2_127batch14.0 ns14.0 ns .. 14.0 nsper elem
decodebinary.127/mode=batch,n=64gf2_127batch22.1 ns22.1 ns .. 22.1 nsper elem
decodebinary.127/mode=batch,n=8gf2_127batch76.4 ns76.3 ns .. 76.6 nsper elem
decodebinary.127/mode=indepgf2_127per-element367 ns366 ns .. 368 nsper elem
decodebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch14.0 ns14.0 ns .. 14.0 nsper elem
decodebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch22.1 ns22.1 ns .. 22.1 nsper elem
decodebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch76.3 ns76.1 ns .. 76.6 nsper elem
decodebinary-lambda.127/mode=indepgf2_127-lambdaper-element364 ns364 ns .. 365 nsper elem
decodebinary-u.127/mode=batch,n=1024gf2_127-ubatch18.3 ns18.3 ns .. 18.4 nsper elem
decodebinary-u.127/mode=batch,n=64gf2_127-ubatch26.9 ns26.9 ns .. 27.0 nsper elem
decodebinary-u.127/mode=batch,n=8gf2_127-ubatch82.4 ns82.1 ns .. 82.6 nsper elem
decodebinary-u.127/mode=indepgf2_127-uper-element376 ns375 ns .. 377 nsper elem
decodebinary-w.127/mode=batch,n=1024gf2_127-wbatch15.1 ns15.1 ns .. 15.1 nsper elem
decodebinary-w.127/mode=batch,n=64gf2_127-wbatch23.0 ns22.9 ns .. 23.0 nsper elem
decodebinary-w.127/mode=batch,n=8gf2_127-wbatch78.2 ns78.0 ns .. 78.4 nsper elem
decodebinary-w.127/mode=indepgf2_127-wper-element361 ns361 ns .. 362 nsper elem
decodeedwards.107/mode=batch,n=1024edwards107batch354 ns353 ns .. 355 nsper elem
decodeedwards.107/mode=indepedwards107per-element359 ns359 ns .. 360 nsper elem
decodeedwards.127/mode=batch,n=1024edwards127batch486 ns484 ns .. 488 nsper elem
decodeedwards.127/mode=indepedwards127per-element489 ns488 ns .. 490 nsper elem
decodeedwards.61x2/mode=batch,n=1024edwards61x2batch404 ns403 ns .. 405 nsper elem
decodeedwards.61x2/mode=indepedwards61x2per-element405 ns404 ns .. 406 nsper elem
decodetwisted.goldilocks2/mode=batch,n=1024twisted-goldilocks2batch1.52 µs1.51 µs .. 1.52 µsper elem
decodetwisted.goldilocks2/mode=indeptwisted-goldilocks2per-element1.53 µs1.53 µs .. 1.54 µsper elem
decodetwisted.128/mode=batch,n=1024twisted128batch952 ns948 ns .. 956 nsper elem
decodetwisted.128/mode=indeptwisted128per-element949 ns946 ns .. 953 nsper elem
decodetwisted.61x2/mode=batch,n=1024twisted61x2batch420 ns419 ns .. 421 nsper elem
decodetwisted.61x2/mode=batch,n=64twisted61x2batch418 ns418 ns .. 419 nsper elem
decodetwisted.61x2/mode=batch,n=8twisted61x2batch423 ns421 ns .. 424 nsper elem
decodetwisted.61x2/mode=indeptwisted61x2per-element425 ns425 ns .. 426 nsper elem
decodetwisted.64x2/mode=batch,n=1024twisted64x2batch718 ns717 ns .. 720 nsper elem
decodetwisted.64x2/mode=indeptwisted64x2per-element721 ns719 ns .. 722 nsper elem
decodeweier.107/mode=batch,n=1024weier107batch352 ns351 ns .. 353 nsper elem
decodeweier.107/mode=indepweier107per-element358 ns357 ns .. 358 nsper elem
decodeweier-jacobian.107/mode=batch,n=1024weier107-jacobianbatch352 ns351 ns .. 352 nsper elem
decodeweier-jacobian.107/mode=indepweier107-jacobianper-element351 ns350 ns .. 352 nsper elem
decodeweier.127/mode=batch,n=1024weier127batch485 ns483 ns .. 487 nsper elem
decodeweier.127/mode=indepweier127per-element489 ns487 ns .. 490 nsper elem
decodeweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch485 ns484 ns .. 487 nsper elem
decodeweier-jacobian.127/mode=indepweier127-jacobianper-element492 ns490 ns .. 493 nsper elem
decodeweier.61x2/mode=batch,n=1024weier61x2batch412 ns411 ns .. 413 nsper elem
decodeweier.61x2/mode=indepweier61x2per-element416 ns416 ns .. 417 nsper elem
decodeweier-jacobian.61x2/mode=batch,n=1024weier61x2-jacobianbatch413 ns412 ns .. 414 nsper elem
decodeweier-jacobian.61x2/mode=indepweier61x2-jacobianper-element417 ns415 ns .. 418 nsper elem
normalizegf2_109/normalize, batchedgf2_109batch9.75 ns9.74 ns .. 9.76 nsper elem
normalizegf2_122/normalize, batchedgf2_122batch14.2 ns14.2 ns .. 14.2 nsper elem
normalizegf2_122-gls/normalize, batchedgf2_122-glsbatch13.2 ns13.2 ns .. 13.3 nsper elem
batch sumgf2_109/batch affine (tree sum)gf2_109batch14.9 ns14.9 ns .. 14.9 nsper elem
batch sumgf2_122/batch affine (tree sum)gf2_122batch15.8 ns15.8 ns .. 15.8 nsper elem
batch sumgf2_127/batch affine (tree sum)gf2_127batch16.0 ns16.0 ns .. 16.1 nsper elem
batch sumedwards107/batch montgomery affine (tree sum)edwards107batch24.5 ns24.5 ns .. 24.5 nsper elem
batch sumedwards127/batch montgomery affine (tree sum)edwards127batch30.3 ns30.2 ns .. 30.3 nsper elem
batch sumweier107/batch affine (tree sum)weier107batch23.1 ns23.1 ns .. 23.1 nsper elem
batch sumweier127/batch affine (tree sum)weier127batch28.6 ns28.5 ns .. 28.6 nsper elem
batch sumsecp256k1/combine_keys (jacobian += affine)secp256k1batch88.8 ns88.3 ns .. 89.3 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.

242 benchmarks
operationbenchmarkfamilymodetime95% CIunit
hash to curvesha256 (XOR baseline)xorper-element24.2 ns23.9 ns .. 24.6 nsper elem
hash to curvebinary.109/mode=batch,n=1024gf2_109batch81.7 ns81.4 ns .. 81.9 nsper elem
hash to curvebinary.109/mode=batch,n=64gf2_109batch139 ns139 ns .. 139 nsper elem
hash to curvebinary.109/mode=batch,n=8gf2_109batch360 ns359 ns .. 361 nsper elem
hash to curvebinary.109/mode=indepgf2_109per-element870 ns869 ns .. 871 nsper elem
hash to curvebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch82.0 ns81.9 ns .. 82.1 nsper elem
hash to curvebinary-lambda.109/mode=batch,n=64gf2_109-lambdabatch139 ns138 ns .. 139 nsper elem
hash to curvebinary-lambda.109/mode=batch,n=8gf2_109-lambdabatch360 ns359 ns .. 361 nsper elem
hash to curvebinary-lambda.109/mode=indepgf2_109-lambdaper-element873 ns871 ns .. 875 nsper elem
hash to curvebinary-u.109/mode=batch,n=1024gf2_109-ubatch81.2 ns81.1 ns .. 81.4 nsper elem
hash to curvebinary-u.109/mode=batch,n=64gf2_109-ubatch135 ns135 ns .. 135 nsper elem
hash to curvebinary-u.109/mode=batch,n=8gf2_109-ubatch349 ns349 ns .. 350 nsper elem
hash to curvebinary-u.109/mode=indepgf2_109-uper-element874 ns872 ns .. 875 nsper elem
hash to curvebinary-w.109/mode=batch,n=1024gf2_109-wbatch79.4 ns79.3 ns .. 79.5 nsper elem
hash to curvebinary-w.109/mode=batch,n=64gf2_109-wbatch131 ns131 ns .. 132 nsper elem
hash to curvebinary-w.109/mode=batch,n=8gf2_109-wbatch346 ns345 ns .. 347 nsper elem
hash to curvebinary-w.109/mode=indepgf2_109-wper-element855 ns854 ns .. 857 nsper elem
hash to curvebinary.122/mode=batch,n=1024gf2_122batch74.9 ns74.8 ns .. 75.1 nsper elem
hash to curvebinary.122/mode=indepgf2_122per-element510 ns508 ns .. 511 nsper elem
hash to curvebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch74.7 ns74.5 ns .. 74.9 nsper elem
hash to curvebinary.122-gls/mode=indepgf2_122-glsper-element535 ns534 ns .. 537 nsper elem
hash to curvebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch76.5 ns76.3 ns .. 76.6 nsper elem
hash to curvebinary-lambda.122-gls/mode=batch,n=64gf2_122-gls-lambdabatch114 ns114 ns .. 114 nsper elem
hash to curvebinary-lambda.122-gls/mode=batch,n=8gf2_122-gls-lambdabatch265 ns265 ns .. 266 nsper elem
hash to curvebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element515 ns513 ns .. 517 nsper elem
hash to curvebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch80.2 ns80.1 ns .. 80.3 nsper elem
hash to curvebinary-u.122-gls/mode=batch,n=64gf2_122-gls-ubatch117 ns116 ns .. 117 nsper elem
hash to curvebinary-u.122-gls/mode=batch,n=8gf2_122-gls-ubatch258 ns257 ns .. 259 nsper elem
hash to curvebinary-u.122-gls/mode=indepgf2_122-gls-uper-element522 ns521 ns .. 524 nsper elem
hash to curvebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch78.6 ns78.5 ns .. 78.8 nsper elem
hash to curvebinary-w.122-gls/mode=batch,n=64gf2_122-gls-wbatch115 ns115 ns .. 115 nsper elem
hash to curvebinary-w.122-gls/mode=batch,n=8gf2_122-gls-wbatch256 ns255 ns .. 256 nsper elem
hash to curvebinary-w.122-gls/mode=indepgf2_122-gls-wper-element509 ns507 ns .. 511 nsper elem
hash to curvebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch74.9 ns74.8 ns .. 75.1 nsper elem
hash to curvebinary-lambda.122/mode=batch,n=64gf2_122-lambdabatch110 ns110 ns .. 110 nsper elem
hash to curvebinary-lambda.122/mode=batch,n=8gf2_122-lambdabatch249 ns248 ns .. 249 nsper elem
hash to curvebinary-lambda.122/mode=indepgf2_122-lambdaper-element509 ns507 ns .. 510 nsper elem
hash to curvebinary-u.122/mode=batch,n=1024gf2_122-ubatch87.6 ns87.5 ns .. 87.7 nsper elem
hash to curvebinary-u.122/mode=batch,n=64gf2_122-ubatch125 ns125 ns .. 126 nsper elem
hash to curvebinary-u.122/mode=batch,n=8gf2_122-ubatch268 ns267 ns .. 268 nsper elem
hash to curvebinary-u.122/mode=indepgf2_122-uper-element531 ns530 ns .. 532 nsper elem
hash to curvebinary-w.122/mode=batch,n=1024gf2_122-wbatch76.8 ns76.6 ns .. 76.9 nsper elem
hash to curvebinary-w.122/mode=batch,n=64gf2_122-wbatch114 ns113 ns .. 114 nsper elem
hash to curvebinary-w.122/mode=batch,n=8gf2_122-wbatch257 ns257 ns .. 258 nsper elem
hash to curvebinary-w.122/mode=indepgf2_122-wper-element517 ns516 ns .. 518 nsper elem
hash to curvebinary.127/mode=batch,n=1024gf2_127batch72.9 ns72.9 ns .. 73.0 nsper elem
hash to curvebinary.127/mode=batch,n=64gf2_127batch127 ns127 ns .. 127 nsper elem
hash to curvebinary.127/mode=batch,n=8gf2_127batch322 ns320 ns .. 325 nsper elem
hash to curvebinary.127/mode=indepgf2_127per-element779 ns778 ns .. 781 nsper elem
hash to curvebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch75.6 ns75.5 ns .. 75.7 nsper elem
hash to curvebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch127 ns126 ns .. 127 nsper elem
hash to curvebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch318 ns317 ns .. 319 nsper elem
hash to curvebinary-lambda.127/mode=indepgf2_127-lambdaper-element806 ns804 ns .. 808 nsper elem
hash to curvebinary-u.127/mode=batch,n=1024gf2_127-ubatch85.8 ns85.5 ns .. 86.1 nsper elem
hash to curvebinary-u.127/mode=batch,n=64gf2_127-ubatch142 ns141 ns .. 142 nsper elem
hash to curvebinary-u.127/mode=batch,n=8gf2_127-ubatch351 ns350 ns .. 352 nsper elem
hash to curvebinary-u.127/mode=indepgf2_127-uper-element869 ns865 ns .. 874 nsper elem
hash to curvebinary-w.127/mode=batch,n=1024gf2_127-wbatch83.3 ns83.2 ns .. 83.4 nsper elem
hash to curvebinary-w.127/mode=batch,n=64gf2_127-wbatch138 ns138 ns .. 139 nsper elem
hash to curvebinary-w.127/mode=batch,n=8gf2_127-wbatch346 ns345 ns .. 347 nsper elem
hash to curvebinary-w.127/mode=indepgf2_127-wper-element865 ns863 ns .. 866 nsper elem
hash to curveedwards.107/mode=batch,n=1024edwards107batch805 ns801 ns .. 810 nsper elem
hash to curveedwards.107/mode=indepedwards107per-element806 ns802 ns .. 809 nsper elem
hash to curveedwards107/edwards-native try-and-incrementedwards107per-element1.07 µs1.07 µs .. 1.07 µsper elem
hash to curveedwards.127/mode=batch,n=1024edwards127batch1.07 µs1.07 µs .. 1.07 µ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.10 µs1.10 µs .. 1.10 µsper elem
hash to curveedwards.61x2/mode=batch,n=1024edwards61x2batch620 ns617 ns .. 623 nsper elem
hash to curveedwards.61x2/mode=indepedwards61x2per-element624 ns622 ns .. 626 nsper elem
hash to curvetwisted.goldilocks2/mode=batch,n=1024twisted-goldilocks2batch1.75 µs1.74 µs .. 1.76 µsper elem
hash to curvetwisted.goldilocks2/mode=indeptwisted-goldilocks2per-element1.73 µs1.72 µs .. 1.74 µsper elem
hash to curvetwisted.128/mode=batch,n=1024twisted128batch1.92 µs1.92 µs .. 1.93 µsper elem
hash to curvetwisted.128/mode=indeptwisted128per-element1.92 µs1.92 µs .. 1.93 µsper elem
hash to curvetwisted.61x2/mode=batch,n=1024twisted61x2batch632 ns630 ns .. 634 nsper elem
hash to curvetwisted.61x2/mode=batch,n=64twisted61x2batch641 ns639 ns .. 643 nsper elem
hash to curvetwisted.61x2/mode=batch,n=8twisted61x2batch646 ns645 ns .. 648 nsper elem
hash to curvetwisted.61x2/mode=indeptwisted61x2per-element630 ns629 ns .. 631 nsper elem
hash to curvetwisted.64x2/mode=batch,n=1024twisted64x2batch1.10 µs1.10 µs .. 1.10 µsper elem
hash to curvetwisted.64x2/mode=indeptwisted64x2per-element1.10 µs1.10 µs .. 1.10 µsper elem
hash to curveweier.107/mode=batch,n=1024weier107batch748 ns747 ns .. 750 nsper elem
hash to curveweier.107/mode=indepweier107per-element746 ns744 ns .. 747 nsper elem
hash to curveweier-jacobian.107/mode=batch,n=1024weier107-jacobianbatch745 ns743 ns .. 748 nsper elem
hash to curveweier-jacobian.107/mode=indepweier107-jacobianper-element742 ns741 ns .. 744 nsper elem
hash to curveweier.127/mode=batch,n=1024weier127batch1.04 µs1.03 µs .. 1.04 µsper elem
hash to curveweier.127/mode=indepweier127per-element1.03 µs1.02 µs .. 1.03 µsper elem
hash to curveweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch1.04 µs1.04 µs .. 1.04 µsper elem
hash to curveweier-jacobian.127/mode=indepweier127-jacobianper-element1.03 µs1.03 µs .. 1.03 µsper elem
hash to curveweier.61x2/mode=batch,n=1024weier61x2batch637 ns635 ns .. 638 nsper elem
hash to curveweier.61x2/mode=indepweier61x2per-element637 ns635 ns .. 639 nsper elem
hash to curveweier-jacobian.61x2/mode=batch,n=1024weier61x2-jacobianbatch638 ns636 ns .. 639 nsper elem
hash to curveweier-jacobian.61x2/mode=indepweier61x2-jacobianper-element638 ns637 ns .. 640 nsper elem
hash to curveristretto255/hash_from_bytes<Sha512>ristretto255per-element4.72 µs4.70 µs .. 4.73 µsper elem
hash to curvesecp256k1/ellswift decodesecp256k1per-element4.97 µs4.96 µs .. 4.98 µsper elem
hash to curvesecp256k1/try-and-increment (parse)secp256k1per-element4.49 µs4.48 µs .. 4.49 µsper elem
ID to addendbinary.109/proj=fp127,h2c=pornin,mode=batch,n=1024gf2_109batch43.5 ns43.3 ns .. 43.6 nsper elem
ID to addendbinary.109/proj=fp127,h2c=ti,mode=batch,n=1024gf2_109batch47.0 ns46.9 ns .. 47.1 nsper elem
ID to addendbinary.109/proj=fp130,h2c=pornin,mode=batch,n=1024gf2_109batch48.1 ns48.0 ns .. 48.2 nsper elem
ID to addendbinary.109/proj=fp130,h2c=ti,mode=batch,n=1024gf2_109batch59.3 ns59.2 ns .. 59.5 nsper elem
ID to addendbinary.109/proj=gf2_127,h2c=pornin,mode=batch,n=1024gf2_109batch41.7 ns41.7 ns .. 41.8 nsper elem
ID to addendbinary.109/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_109batch43.9 ns43.7 ns .. 44.1 nsper elem
ID to addendbinary.109/proj=none,h2c=pornin,mode=batch,n=1024gf2_109batch64.2 ns64.1 ns .. 64.3 nsper elem
ID to addendbinary.109/proj=none,h2c=ti,mode=batch,n=1024gf2_109batch74.8 ns74.7 ns .. 74.9 nsper elem
ID to addendbinary-lambda.109/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_109-lambdabatch36.4 ns36.3 ns .. 36.4 nsper elem
ID to addendbinary-lambda.109/proj=fp127,h2c=ti,mode=batch,n=1024gf2_109-lambdabatch49.9 ns49.7 ns .. 50.0 nsper elem
ID to addendbinary-lambda.109/proj=fp127,h2c=ti-addend,mode=batch,n=1024gf2_109-lambdabatch45.1 ns45.0 ns .. 45.2 nsper elem
ID to addendbinary-lambda.109/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_109-lambdabatch40.8 ns40.7 ns .. 40.8 nsper elem
ID to addendbinary-lambda.109/proj=fp130,h2c=ti,mode=batch,n=1024gf2_109-lambdabatch62.1 ns61.9 ns .. 62.2 nsper elem
ID to addendbinary-lambda.109/proj=fp130,h2c=ti-addend,mode=batch,n=1024gf2_109-lambdabatch57.3 ns57.2 ns .. 57.4 nsper elem
ID to addendbinary-lambda.109/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_109-lambdabatch34.2 ns34.1 ns .. 34.2 nsper elem
ID to addendbinary-lambda.109/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_109-lambdabatch47.5 ns47.4 ns .. 47.6 nsper elem
ID to addendbinary-lambda.109/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024gf2_109-lambdabatch42.8 ns42.7 ns .. 43.0 nsper elem
ID to addendbinary-lambda.109/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_109-lambdabatch57.7 ns57.6 ns .. 57.8 nsper elem
ID to addendbinary-lambda.109/proj=none,h2c=ti,mode=batch,n=1024gf2_109-lambdabatch77.8 ns77.5 ns .. 78.1 nsper elem
ID to addendbinary-lambda.109/proj=none,h2c=ti-addend,mode=batch,n=1024gf2_109-lambdabatch72.6 ns72.4 ns .. 72.7 nsper elem
ID to addendbinary-u.109/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_109-ubatch40.3 ns40.2 ns .. 40.3 nsper elem
ID to addendbinary-u.109/proj=fp127,h2c=ti,mode=batch,n=1024gf2_109-ubatch50.6 ns50.4 ns .. 50.7 nsper elem
ID to addendbinary-u.109/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_109-ubatch44.7 ns44.6 ns .. 44.8 nsper elem
ID to addendbinary-u.109/proj=fp130,h2c=ti,mode=batch,n=1024gf2_109-ubatch60.4 ns60.3 ns .. 60.5 nsper elem
ID to addendbinary-u.109/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_109-ubatch38.1 ns38.0 ns .. 38.1 nsper elem
ID to addendbinary-u.109/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_109-ubatch48.3 ns48.2 ns .. 48.4 nsper elem
ID to addendbinary-u.109/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_109-ubatch61.6 ns61.5 ns .. 61.7 nsper elem
ID to addendbinary-u.109/proj=none,h2c=ti,mode=batch,n=1024gf2_109-ubatch78.1 ns78.0 ns .. 78.3 nsper elem
ID to addendbinary-w.109/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_109-wbatch36.4 ns36.3 ns .. 36.4 nsper elem
ID to addendbinary-w.109/proj=fp127,h2c=ti,mode=batch,n=1024gf2_109-wbatch47.2 ns47.1 ns .. 47.3 nsper elem
ID to addendbinary-w.109/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_109-wbatch40.6 ns40.5 ns .. 40.7 nsper elem
ID to addendbinary-w.109/proj=fp130,h2c=ti,mode=batch,n=1024gf2_109-wbatch56.5 ns56.4 ns .. 56.7 nsper elem
ID to addendbinary-w.109/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_109-wbatch34.2 ns34.2 ns .. 34.3 nsper elem
ID to addendbinary-w.109/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_109-wbatch44.9 ns44.8 ns .. 45.0 nsper elem
ID to addendbinary-w.109/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_109-wbatch57.6 ns57.5 ns .. 57.7 nsper elem
ID to addendbinary-w.109/proj=none,h2c=ti,mode=batch,n=1024gf2_109-wbatch75.8 ns75.6 ns .. 75.9 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-lambdabatch37.9 ns37.9 ns .. 38.0 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-gls-lambdabatch50.6 ns50.5 ns .. 50.7 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp127,h2c=ti-addend,mode=batch,n=1024gf2_122-gls-lambdabatch43.6 ns43.5 ns .. 43.7 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-lambdabatch42.3 ns42.1 ns .. 42.5 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-gls-lambdabatch61.0 ns60.8 ns .. 61.2 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp130,h2c=ti-addend,mode=batch,n=1024gf2_122-gls-lambdabatch53.8 ns53.5 ns .. 54.1 nsper elem
ID to addendbinary-lambda.122-gls/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-lambdabatch35.0 ns34.9 ns .. 35.1 nsper elem
ID to addendbinary-lambda.122-gls/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-gls-lambdabatch45.9 ns45.8 ns .. 46.0 nsper elem
ID to addendbinary-lambda.122-gls/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024gf2_122-gls-lambdabatch38.2 ns38.0 ns .. 38.2 nsper elem
ID to addendbinary-lambda.122-gls/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-lambdabatch58.8 ns58.7 ns .. 59.0 nsper elem
ID to addendbinary-lambda.122-gls/proj=none,h2c=ti,mode=batch,n=1024gf2_122-gls-lambdabatch73.6 ns73.4 ns .. 73.8 nsper elem
ID to addendbinary-lambda.122-gls/proj=none,h2c=ti-addend,mode=batch,n=1024gf2_122-gls-lambdabatch66.4 ns66.2 ns .. 66.6 nsper elem
ID to addendbinary-u.122-gls/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-ubatch38.6 ns38.3 ns .. 38.9 nsper elem
ID to addendbinary-u.122-gls/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-gls-ubatch46.7 ns46.7 ns .. 46.8 nsper elem
ID to addendbinary-u.122-gls/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-ubatch42.2 ns42.1 ns .. 42.3 nsper elem
ID to addendbinary-u.122-gls/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-gls-ubatch57.1 ns57.0 ns .. 57.2 nsper elem
ID to addendbinary-u.122-gls/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-ubatch36.1 ns35.9 ns .. 36.4 nsper elem
ID to addendbinary-u.122-gls/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-gls-ubatch44.4 ns44.3 ns .. 44.5 nsper elem
ID to addendbinary-u.122-gls/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-ubatch60.2 ns60.1 ns .. 60.4 nsper elem
ID to addendbinary-u.122-gls/proj=none,h2c=ti,mode=batch,n=1024gf2_122-gls-ubatch71.9 ns71.8 ns .. 72.1 nsper elem
ID to addendbinary-w.122-gls/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-wbatch38.0 ns37.9 ns .. 38.1 nsper elem
ID to addendbinary-w.122-gls/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-gls-wbatch44.5 ns44.3 ns .. 44.6 nsper elem
ID to addendbinary-w.122-gls/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-wbatch42.4 ns42.3 ns .. 42.5 nsper elem
ID to addendbinary-w.122-gls/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-gls-wbatch54.5 ns54.4 ns .. 54.6 nsper elem
ID to addendbinary-w.122-gls/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-wbatch34.9 ns34.8 ns .. 34.9 nsper elem
ID to addendbinary-w.122-gls/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-gls-wbatch40.9 ns40.8 ns .. 41.0 nsper elem
ID to addendbinary-w.122-gls/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-wbatch59.3 ns59.1 ns .. 59.5 nsper elem
ID to addendbinary-w.122-gls/proj=none,h2c=ti,mode=batch,n=1024gf2_122-gls-wbatch72.6 ns72.5 ns .. 72.8 nsper elem
ID to addendbinary-lambda.122/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-lambdabatch36.0 ns35.9 ns .. 36.1 nsper elem
ID to addendbinary-lambda.122/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-lambdabatch53.2 ns53.0 ns .. 53.4 nsper elem
ID to addendbinary-lambda.122/proj=fp127,h2c=ti-addend,mode=batch,n=1024gf2_122-lambdabatch45.6 ns45.5 ns .. 45.7 nsper elem
ID to addendbinary-lambda.122/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-lambdabatch40.8 ns40.7 ns .. 40.9 nsper elem
ID to addendbinary-lambda.122/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-lambdabatch61.8 ns61.5 ns .. 62.1 nsper elem
ID to addendbinary-lambda.122/proj=fp130,h2c=ti-addend,mode=batch,n=1024gf2_122-lambdabatch53.4 ns53.2 ns .. 53.7 nsper elem
ID to addendbinary-lambda.122/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-lambdabatch33.6 ns33.5 ns .. 33.7 nsper elem
ID to addendbinary-lambda.122/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-lambdabatch45.6 ns45.5 ns .. 45.7 nsper elem
ID to addendbinary-lambda.122/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024gf2_122-lambdabatch37.8 ns37.7 ns .. 37.8 nsper elem
ID to addendbinary-lambda.122/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-lambdabatch59.3 ns58.9 ns .. 59.8 nsper elem
ID to addendbinary-lambda.122/proj=none,h2c=ti,mode=batch,n=1024gf2_122-lambdabatch77.1 ns77.0 ns .. 77.2 nsper elem
ID to addendbinary-lambda.122/proj=none,h2c=ti-addend,mode=batch,n=1024gf2_122-lambdabatch69.6 ns69.4 ns .. 69.7 nsper elem
ID to addendbinary-u.122/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-ubatch41.2 ns41.1 ns .. 41.3 nsper elem
ID to addendbinary-u.122/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-ubatch55.2 ns55.0 ns .. 55.3 nsper elem
ID to addendbinary-u.122/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-ubatch45.2 ns45.1 ns .. 45.3 nsper elem
ID to addendbinary-u.122/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-ubatch64.8 ns64.7 ns .. 65.0 nsper elem
ID to addendbinary-u.122/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-ubatch38.8 ns38.7 ns .. 38.8 nsper elem
ID to addendbinary-u.122/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-ubatch51.6 ns51.5 ns .. 51.7 nsper elem
ID to addendbinary-u.122/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-ubatch63.2 ns63.1 ns .. 63.3 nsper elem
ID to addendbinary-u.122/proj=none,h2c=ti,mode=batch,n=1024gf2_122-ubatch82.4 ns82.2 ns .. 82.5 nsper elem
ID to addendbinary-w.122/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-wbatch36.0 ns35.9 ns .. 36.1 nsper elem
ID to addendbinary-w.122/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-wbatch45.3 ns45.3 ns .. 45.4 nsper elem
ID to addendbinary-w.122/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-wbatch40.6 ns40.5 ns .. 40.7 nsper elem
ID to addendbinary-w.122/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-wbatch54.5 ns54.4 ns .. 54.6 nsper elem
ID to addendbinary-w.122/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-wbatch33.2 ns33.0 ns .. 33.4 nsper elem
ID to addendbinary-w.122/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-wbatch41.3 ns41.2 ns .. 41.3 nsper elem
ID to addendbinary-w.122/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-wbatch58.6 ns58.5 ns .. 58.7 nsper elem
ID to addendbinary-w.122/proj=none,h2c=ti,mode=batch,n=1024gf2_122-wbatch71.5 ns71.4 ns .. 71.6 nsper elem
ID to addendbinary.127/proj=fp127,h2c=pornin,mode=batch,n=1024gf2_127batch41.7 ns41.6 ns .. 41.8 nsper elem
ID to addendbinary.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127batch49.5 ns49.3 ns .. 49.6 nsper elem
ID to addendbinary.127/proj=fp130,h2c=pornin,mode=batch,n=1024gf2_127batch45.9 ns45.8 ns .. 46.0 nsper elem
ID to addendbinary.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127batch59.6 ns59.5 ns .. 59.8 nsper elem
ID to addendbinary.127/proj=gf2_127,h2c=pornin,mode=batch,n=1024gf2_127batch39.1 ns39.0 ns .. 39.2 nsper elem
ID to addendbinary.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127batch43.0 ns42.8 ns .. 43.1 nsper elem
ID to addendbinary.127/proj=none,h2c=pornin,mode=batch,n=1024gf2_127batch62.6 ns62.5 ns .. 62.8 nsper elem
ID to addendbinary.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127batch71.3 ns71.2 ns .. 71.4 nsper elem
ID to addendbinary-lambda.127/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch36.5 ns36.4 ns .. 36.6 nsper elem
ID to addendbinary-lambda.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch52.4 ns52.3 ns .. 52.5 nsper elem
ID to addendbinary-lambda.127/proj=fp127,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch45.4 ns45.3 ns .. 45.5 nsper elem
ID to addendbinary-lambda.127/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch40.9 ns40.8 ns .. 41.1 nsper elem
ID to addendbinary-lambda.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch62.7 ns62.6 ns .. 62.9 nsper elem
ID to addendbinary-lambda.127/proj=fp130,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch55.8 ns55.6 ns .. 55.9 nsper elem
ID to addendbinary-lambda.127/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch34.1 ns33.9 ns .. 34.2 nsper elem
ID to addendbinary-lambda.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch46.1 ns46.0 ns .. 46.2 nsper elem
ID to addendbinary-lambda.127/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch39.4 ns39.3 ns .. 39.5 nsper elem
ID to addendbinary-lambda.127/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch58.4 ns58.2 ns .. 58.6 nsper elem
ID to addendbinary-lambda.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch74.5 ns74.4 ns .. 74.6 nsper elem
ID to addendbinary-lambda.127/proj=none,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch67.6 ns67.4 ns .. 67.7 nsper elem
ID to addendbinary-u.127/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch39.6 ns39.5 ns .. 39.7 nsper elem
ID to addendbinary-u.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127-ubatch48.8 ns48.7 ns .. 48.9 nsper elem
ID to addendbinary-u.127/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch43.8 ns43.7 ns .. 43.8 nsper elem
ID to addendbinary-u.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127-ubatch61.1 ns61.0 ns .. 61.2 nsper elem
ID to addendbinary-u.127/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch37.2 ns37.1 ns .. 37.3 nsper elem
ID to addendbinary-u.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127-ubatch44.4 ns44.3 ns .. 44.5 nsper elem
ID to addendbinary-u.127/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch61.4 ns61.3 ns .. 61.6 nsper elem
ID to addendbinary-u.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127-ubatch75.7 ns75.5 ns .. 75.8 nsper elem
ID to addendbinary-w.127/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch36.3 ns36.2 ns .. 36.4 nsper elem
ID to addendbinary-w.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127-wbatch45.4 ns45.3 ns .. 45.5 nsper elem
ID to addendbinary-w.127/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch40.8 ns40.7 ns .. 40.9 nsper elem
ID to addendbinary-w.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127-wbatch57.0 ns56.9 ns .. 57.2 nsper elem
ID to addendbinary-w.127/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch34.2 ns34.0 ns .. 34.3 nsper elem
ID to addendbinary-w.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127-wbatch40.9 ns40.8 ns .. 41.0 nsper elem
ID to addendbinary-w.127/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch58.5 ns58.4 ns .. 58.7 nsper elem
ID to addendbinary-w.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127-wbatch72.7 ns72.6 ns .. 72.9 nsper elem
ID to addendtwisted.61x2/proj=fp127,h2c=elligator2,mode=batch,n=1024twisted61x2batch881 ns879 ns .. 884 nsper elem
ID to addendtwisted.61x2/proj=fp127,h2c=ti,mode=batch,n=1024twisted61x2batch604 ns602 ns .. 605 nsper elem
ID to addendtwisted.61x2/proj=fp130,h2c=elligator2,mode=batch,n=1024twisted61x2batch882 ns879 ns .. 884 nsper elem
ID to addendtwisted.61x2/proj=fp130,h2c=ti,mode=batch,n=1024twisted61x2batch612 ns610 ns .. 613 nsper elem
ID to addendtwisted.61x2/proj=gf2_127,h2c=elligator2,mode=batch,n=1024twisted61x2batch871 ns870 ns .. 873 nsper elem
ID to addendtwisted.61x2/proj=gf2_127,h2c=ti,mode=batch,n=1024twisted61x2batch594 ns592 ns .. 595 nsper elem
ID to addendtwisted.61x2/proj=none,h2c=elligator2,mode=batch,n=1024twisted61x2batch916 ns914 ns .. 917 nsper elem
ID to addendtwisted.61x2/proj=none,h2c=ti,mode=batch,n=1024twisted61x2batch629 ns627 ns .. 630 nsper elem
hash to addendgf2_109-lambda/try-and-increment to (x, λ)gf2_109-lambdaper-element938 ns937 ns .. 939 nsper elem
hash to addendgf2_109-lambda/try-and-increment to (x, λ), batchedgf2_109-lambdabatch77.6 ns77.5 ns .. 77.6 nsper elem
hash to addendgf2_122-gls-lambda/try-and-increment to (x, λ)gf2_122-gls-lambdaper-element504 ns503 ns .. 505 nsper elem
hash to addendgf2_122-gls-lambda/try-and-increment to (x, λ), batchedgf2_122-gls-lambdabatch73.8 ns73.8 ns .. 73.9 nsper elem
hash to addendgf2_122-lambda/try-and-increment to (x, λ)gf2_122-lambdaper-element520 ns519 ns .. 520 nsper elem
hash to addendgf2_122-lambda/try-and-increment to (x, λ), batchedgf2_122-lambdabatch72.3 ns72.3 ns .. 72.3 nsper elem
hash to addendgf2_127-lambda/try-and-increment to (x, λ)gf2_127-lambdaper-element761 ns759 ns .. 762 nsper elem
hash to addendgf2_127-lambda/try-and-increment to (x, λ), batchedgf2_127-lambdabatch72.8 ns72.8 ns .. 72.9 nsper elem
steps: digestdigest/sha512 (ristretto input)ristretto255per-element60.9 ns60.7 ns .. 61.1 nsper elem
steps: ristretto255ristretto255/from_uniform_bytes (2 maps + add)ristretto255per-element4.78 µs4.76 µs .. 4.79 µsper elem
x on curveristretto255/decompress (valid, inv sqrt)ristretto255per-element2.32 µs2.31 µs .. 2.32 µsper elem
x on curvesecp256k1/x: parse compressed (sqrt)secp256k1per-element2.25 µs2.24 µs .. 2.25 µsper 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.

43 benchmarks
operationbenchmarkfamilymodetime95% CIunit
one map to addendgf2_109-lambda/pornin map x1 to (x, λ)gf2_109-lambdaper-element550 ns548 ns .. 553 nsper elem
one map to addendgf2_109-lambda/pornin map x1 to (x, λ), batchedgf2_109-lambdabatch55.2 ns55.0 ns .. 55.5 nsper elem
one map to addendgf2_109-u/pornin map x1 to (u, v)gf2_109-uper-element533 ns532 ns .. 533 nsper elem
one map to addendgf2_109-u/pornin map x1 to (u, v), batchedgf2_109-ubatch60.7 ns60.3 ns .. 61.0 nsper elem
one map to addendgf2_109-w/pornin map x1 to (x, λ)gf2_109-wper-element535 ns534 ns .. 535 nsper elem
one map to addendgf2_109-w/pornin map x1 to (x, λ), batchedgf2_109-wbatch54.5 ns54.5 ns .. 54.5 nsper elem
one map to addendgf2_122-gls-lambda/pornin map x1 to (x, λ)gf2_122-gls-lambdaper-element315 ns314 ns .. 316 nsper elem
one map to addendgf2_122-gls-lambda/pornin map x1 to (x, λ), batchedgf2_122-gls-lambdabatch55.4 ns55.4 ns .. 55.5 nsper elem
one map to addendgf2_122-gls-u/pornin map x1 to (u, v)gf2_122-gls-uper-element319 ns318 ns .. 320 nsper elem
one map to addendgf2_122-gls-u/pornin map x1 to (u, v), batchedgf2_122-gls-ubatch55.7 ns55.7 ns .. 55.8 nsper elem
one map to addendgf2_122-gls-w/pornin map x1 to (x, λ)gf2_122-gls-wper-element316 ns315 ns .. 317 nsper elem
one map to addendgf2_122-gls-w/pornin map x1 to (x, λ), batchedgf2_122-gls-wbatch55.4 ns55.4 ns .. 55.4 nsper elem
one map to addendgf2_122-lambda/pornin map x1 to (x, λ)gf2_122-lambdaper-element326 ns326 ns .. 327 nsper elem
one map to addendgf2_122-lambda/pornin map x1 to (x, λ), batchedgf2_122-lambdabatch53.9 ns53.9 ns .. 54.0 nsper elem
one map to addendgf2_122-u/pornin map x1 to (u, v)gf2_122-uper-element326 ns325 ns .. 326 nsper elem
one map to addendgf2_122-u/pornin map x1 to (u, v), batchedgf2_122-ubatch57.1 ns57.0 ns .. 57.1 nsper elem
one map to addendgf2_122-w/pornin map x1 to (x, λ)gf2_122-wper-element326 ns326 ns .. 327 nsper elem
one map to addendgf2_122-w/pornin map x1 to (x, λ), batchedgf2_122-wbatch54.0 ns53.9 ns .. 54.0 nsper elem
one map to addendgf2_127-lambda/pornin map x1 to (x, λ)gf2_127-lambdaper-element456 ns455 ns .. 457 nsper elem
one map to addendgf2_127-lambda/pornin map x1 to (x, λ), batchedgf2_127-lambdabatch53.5 ns53.4 ns .. 53.6 nsper elem
one map to addendgf2_127-u/pornin map x1 to (u, v)gf2_127-uper-element461 ns460 ns .. 462 nsper elem
one map to addendgf2_127-u/pornin map x1 to (u, v), batchedgf2_127-ubatch57.2 ns57.2 ns .. 57.3 nsper elem
one map to addendgf2_127-w/pornin map x1 to (x, λ)gf2_127-wper-element455 ns454 ns .. 456 nsper elem
one map to addendgf2_127-w/pornin map x1 to (x, λ), batchedgf2_127-wbatch53.5 ns53.4 ns .. 53.6 nsper elem
one mapgf2_109/pornin map x1gf2_109per-element560 ns559 ns .. 561 nsper elem
one mapgf2_109/pornin map x1, batchedgf2_109batch63.7 ns63.7 ns .. 63.8 nsper elem
one mapgf2_122/pornin map x1gf2_122per-element373 ns373 ns .. 373 nsper elem
one mapgf2_122/pornin map x1, batchedgf2_122batch62.8 ns62.8 ns .. 62.8 nsper elem
one mapgf2_122-gls/pornin map x1gf2_122-glsper-element369 ns367 ns .. 370 nsper elem
one mapgf2_122-gls/pornin map x1, batchedgf2_122-glsbatch62.0 ns61.9 ns .. 62.0 nsper elem
one mapgf2_127/pornin map x1gf2_127per-element485 ns485 ns .. 486 nsper elem
one mapgf2_127/pornin map x1, batchedgf2_127batch61.5 ns61.4 ns .. 61.5 nsper elem
one mapedwards107/elligator2 x1edwards107per-element1.07 µs1.06 µs .. 1.07 µsper elem
one mapedwards127/elligator2 x1edwards127per-element1.29 µs1.28 µs .. 1.29 µsper elem
one mapedwards61x2/elligator2 x1edwards61x2per-element734 ns734 ns .. 735 nsper elem
one maptwisted-goldilocks2/elligator2 x1twisted-goldilocks2per-element2.16 µs2.16 µs .. 2.17 µsper elem
one maptwisted128/elligator2 x1twisted128per-element3.32 µs3.32 µs .. 3.33 µsper elem
one maptwisted61x2/elligator2 x1twisted61x2per-element892 ns891 ns .. 894 nsper elem
one maptwisted64x2/elligator2 x1twisted64x2per-element1.53 µs1.53 µs .. 1.53 µsper elem
one mapweier107/sswu x1weier107per-element1.04 µs1.04 µs .. 1.04 µsper elem
one mapweier127/sswu x1weier127per-element1.10 µs1.10 µs .. 1.10 µsper elem
one mapweier61x2/sswu x1weier61x2per-element703 ns701 ns .. 704 nsper elem
two maps summedgf2_127/pornin map x2gf2_127per-element916 ns914 ns .. 917 nsper 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.

556 benchmarks
operationbenchmarkfamilymodetime95% CIunit
encode (hash + cells)xor-sha256.64/m=12150,n=3500xorper-element199 ns199 ns .. 199 nsper elem
encode (hash + cells)xor-sha256.64/m=1350,n=3500xorper-element165 ns165 ns .. 166 nsper elem
encode (hash + cells)xor-sha256.64/m=150,n=3500xorper-element139 ns139 ns .. 140 nsper elem
encode (hash + cells)xor-sha256.64/m=20,n=3500xorper-element116 ns115 ns .. 116 nsper elem
encode (hash + cells)xor-sha256.64/m=5,n=3500xorper-element95.2 ns95.0 ns .. 95.5 nsper elem
encode (hash + cells)xor-siphash.64/m=12150,n=3500xor-siphashper-element188 ns187 ns .. 188 nsper elem
encode (hash + cells)xor-siphash.64/m=12150,n=3500,map=mcg64xor-siphashper-element183 ns182 ns .. 183 nsper elem
encode (hash + cells)xor-siphash.64/m=1350,n=3500xor-siphashper-element155 ns154 ns .. 155 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-element129 ns129 ns .. 130 nsper elem
encode (hash + cells)xor-siphash.64/m=150,n=3500,map=mcg64xor-siphashper-element124 ns123 ns .. 124 nsper elem
encode (hash + cells)xor-siphash.64/m=20,n=3500xor-siphashper-element104 ns104 ns .. 104 nsper elem
encode (hash + cells)xor-siphash.64/m=20,n=3500,map=mcg64xor-siphashper-element99.3 ns99.0 ns .. 99.5 nsper elem
encode (hash + cells)xor-siphash.64/m=5,n=3500xor-siphashper-element85.7 ns85.5 ns .. 85.9 nsper elem
encode (hash + cells)xor-siphash.64/m=5,n=3500,map=mcg64xor-siphashper-element82.0 ns81.8 ns .. 82.2 nsper elem
encode (hash + cells)binary.109/m=12150,n=3500,h2c=porningf2_109per-element398 ns397 ns .. 399 nsper elem
encode (hash + cells)binary.109/m=12150,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109per-element337 ns337 ns .. 338 nsper elem
encode (hash + cells)binary.109/m=1350,n=3500,h2c=porningf2_109per-element324 ns323 ns .. 325 nsper elem
encode (hash + cells)binary.109/m=1350,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109per-element265 ns264 ns .. 265 nsper elem
encode (hash + cells)binary.109/m=5,n=3500,h2c=porningf2_109per-element172 ns172 ns .. 172 nsper elem
encode (hash + cells)binary.109/m=5,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109per-element109 ns108 ns .. 109 nsper elem
encode (hash + cells)binary-lambda.109/m=12150,n=3500,h2c=pornin-addendgf2_109-lambdaper-element361 ns360 ns .. 362 nsper elem
encode (hash + cells)binary-lambda.109/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdaper-element305 ns305 ns .. 306 nsper elem
encode (hash + cells)binary-lambda.109/m=1350,n=3500,h2c=pornin-addendgf2_109-lambdaper-element303 ns303 ns .. 304 nsper elem
encode (hash + cells)binary-lambda.109/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdaper-element244 ns244 ns .. 244 nsper elem
encode (hash + cells)binary-lambda.109/m=150,n=3500,h2c=pornin-addendgf2_109-lambdaper-element245 ns245 ns .. 245 nsper elem
encode (hash + cells)binary-lambda.109/m=20,n=3500,h2c=pornin-addendgf2_109-lambdaper-element189 ns188 ns .. 189 nsper elem
encode (hash + cells)binary-lambda.109/m=5,n=3500,h2c=pornin-addendgf2_109-lambdaper-element158 ns158 ns .. 159 nsper elem
encode (hash + cells)binary-lambda.109/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdaper-element98.5 ns98.4 ns .. 98.7 nsper elem
encode (hash + cells)binary-u.109/m=12150,n=3500,h2c=pornin-addendgf2_109-uper-element341 ns340 ns .. 342 nsper elem
encode (hash + cells)binary-u.109/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-uper-element290 ns289 ns .. 291 nsper elem
encode (hash + cells)binary-u.109/m=1350,n=3500,h2c=pornin-addendgf2_109-uper-element282 ns281 ns .. 282 nsper elem
encode (hash + cells)binary-u.109/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-uper-element222 ns222 ns .. 223 nsper elem
encode (hash + cells)binary-u.109/m=150,n=3500,h2c=pornin-addendgf2_109-uper-element229 ns229 ns .. 230 nsper elem
encode (hash + cells)binary-u.109/m=20,n=3500,h2c=pornin-addendgf2_109-uper-element185 ns184 ns .. 185 nsper elem
encode (hash + cells)binary-u.109/m=5,n=3500,h2c=pornin-addendgf2_109-uper-element157 ns157 ns .. 157 nsper elem
encode (hash + cells)binary-u.109/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-uper-element94.5 ns94.3 ns .. 94.7 nsper elem
encode (hash + cells)binary-w.109/m=12150,n=3500,h2c=pornin-addendgf2_109-wper-element361 ns360 ns .. 362 nsper elem
encode (hash + cells)binary-w.109/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wper-element302 ns301 ns .. 302 nsper elem
encode (hash + cells)binary-w.109/m=1350,n=3500,h2c=pornin-addendgf2_109-wper-element302 ns302 ns .. 303 nsper elem
encode (hash + cells)binary-w.109/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wper-element239 ns238 ns .. 241 nsper elem
encode (hash + cells)binary-w.109/m=150,n=3500,h2c=pornin-addendgf2_109-wper-element245 ns244 ns .. 245 nsper elem
encode (hash + cells)binary-w.109/m=20,n=3500,h2c=pornin-addendgf2_109-wper-element192 ns191 ns .. 192 nsper elem
encode (hash + cells)binary-w.109/m=5,n=3500,h2c=pornin-addendgf2_109-wper-element159 ns158 ns .. 159 nsper elem
encode (hash + cells)binary-w.109/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wper-element98.3 ns98.1 ns .. 98.4 nsper elem
encode (hash + cells)binary.122/m=12150,n=3500,h2c=porningf2_122per-element463 ns462 ns .. 463 nsper elem
encode (hash + cells)binary.122/m=1350,n=3500,h2c=porningf2_122per-element371 ns370 ns .. 372 nsper elem
encode (hash + cells)binary.122/m=5,n=3500,h2c=porningf2_122per-element169 ns168 ns .. 169 nsper elem
encode (hash + cells)binary.122-gls/m=12150,n=3500,h2c=porningf2_122-glsper-element446 ns445 ns .. 446 nsper elem
encode (hash + cells)binary.122-gls/m=1350,n=3500,h2c=porningf2_122-glsper-element358 ns358 ns .. 359 nsper elem
encode (hash + cells)binary.122-gls/m=5,n=3500,h2c=porningf2_122-glsper-element167 ns166 ns .. 167 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=12150,n=3500,h2c=pornin-addendgf2_122-gls-lambdaper-element417 ns416 ns .. 418 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdaper-element358 ns357 ns .. 359 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=1350,n=3500,h2c=pornin-addendgf2_122-gls-lambdaper-element342 ns341 ns .. 342 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdaper-element286 ns285 ns .. 286 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=5,n=3500,h2c=pornin-addendgf2_122-gls-lambdaper-element154 ns154 ns .. 155 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdaper-element99.0 ns98.9 ns .. 99.2 nsper elem
encode (hash + cells)binary-u.122-gls/m=12150,n=3500,h2c=pornin-addendgf2_122-gls-uper-element378 ns377 ns .. 378 nsper elem
encode (hash + cells)binary-u.122-gls/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-uper-element325 ns324 ns .. 325 nsper elem
encode (hash + cells)binary-u.122-gls/m=1350,n=3500,h2c=pornin-addendgf2_122-gls-uper-element306 ns305 ns .. 307 nsper elem
encode (hash + cells)binary-u.122-gls/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-uper-element252 ns251 ns .. 252 nsper elem
encode (hash + cells)binary-u.122-gls/m=5,n=3500,h2c=pornin-addendgf2_122-gls-uper-element150 ns150 ns .. 151 nsper elem
encode (hash + cells)binary-u.122-gls/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-uper-element94.5 ns94.4 ns .. 94.7 nsper elem
encode (hash + cells)binary-w.122-gls/m=12150,n=3500,h2c=pornin-addendgf2_122-gls-wper-element417 ns416 ns .. 417 nsper elem
encode (hash + cells)binary-w.122-gls/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wper-element360 ns359 ns .. 361 nsper elem
encode (hash + cells)binary-w.122-gls/m=1350,n=3500,h2c=pornin-addendgf2_122-gls-wper-element340 ns340 ns .. 341 nsper elem
encode (hash + cells)binary-w.122-gls/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wper-element281 ns280 ns .. 283 nsper elem
encode (hash + cells)binary-w.122-gls/m=5,n=3500,h2c=pornin-addendgf2_122-gls-wper-element154 ns154 ns .. 154 nsper elem
encode (hash + cells)binary-w.122-gls/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wper-element98.7 ns98.5 ns .. 98.9 nsper elem
encode (hash + cells)binary-lambda.122/m=12150,n=3500,h2c=pornin-addendgf2_122-lambdaper-element417 ns417 ns .. 418 nsper elem
encode (hash + cells)binary-lambda.122/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdaper-element358 ns357 ns .. 359 nsper elem
encode (hash + cells)binary-lambda.122/m=1350,n=3500,h2c=pornin-addendgf2_122-lambdaper-element341 ns340 ns .. 342 nsper elem
encode (hash + cells)binary-lambda.122/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdaper-element284 ns283 ns .. 285 nsper elem
encode (hash + cells)binary-lambda.122/m=5,n=3500,h2c=pornin-addendgf2_122-lambdaper-element154 ns154 ns .. 154 nsper elem
encode (hash + cells)binary-lambda.122/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdaper-element99.3 ns99.1 ns .. 99.4 nsper elem
encode (hash + cells)binary-u.122/m=12150,n=3500,h2c=pornin-addendgf2_122-uper-element378 ns376 ns .. 381 nsper elem
encode (hash + cells)binary-u.122/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-uper-element325 ns325 ns .. 326 nsper elem
encode (hash + cells)binary-u.122/m=1350,n=3500,h2c=pornin-addendgf2_122-uper-element308 ns308 ns .. 309 nsper elem
encode (hash + cells)binary-u.122/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-uper-element253 ns252 ns .. 253 nsper elem
encode (hash + cells)binary-u.122/m=5,n=3500,h2c=pornin-addendgf2_122-uper-element152 ns151 ns .. 152 nsper elem
encode (hash + cells)binary-u.122/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-uper-element94.3 ns93.8 ns .. 94.7 nsper elem
encode (hash + cells)binary-w.122/m=12150,n=3500,h2c=pornin-addendgf2_122-wper-element417 ns417 ns .. 418 nsper elem
encode (hash + cells)binary-w.122/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wper-element361 ns360 ns .. 362 nsper elem
encode (hash + cells)binary-w.122/m=1350,n=3500,h2c=pornin-addendgf2_122-wper-element341 ns340 ns .. 342 nsper elem
encode (hash + cells)binary-w.122/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wper-element285 ns285 ns .. 286 nsper elem
encode (hash + cells)binary-w.122/m=5,n=3500,h2c=pornin-addendgf2_122-wper-element154 ns154 ns .. 154 nsper elem
encode (hash + cells)binary-w.122/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wper-element99.4 ns99.2 ns .. 99.5 nsper elem
encode (hash + cells)binary.127/m=12150,n=3500,h2c=porningf2_127per-element411 ns410 ns .. 412 nsper elem
encode (hash + cells)binary.127/m=12150,n=3500,h2c=pornin,map=mcg64gf2_127per-element411 ns411 ns .. 412 nsper elem
encode (hash + cells)binary.127/m=12150,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127per-element352 ns352 ns .. 353 nsper elem
encode (hash + cells)binary.127/m=1350,n=3500,h2c=porningf2_127per-element329 ns327 ns .. 331 nsper elem
encode (hash + cells)binary.127/m=1350,n=3500,h2c=pornin,map=mcg64gf2_127per-element330 ns329 ns .. 331 nsper elem
encode (hash + cells)binary.127/m=1350,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127per-element273 ns272 ns .. 273 nsper elem
encode (hash + cells)binary.127/m=150,n=3500,h2c=pornin,map=mcg64gf2_127per-element259 ns259 ns .. 260 nsper elem
encode (hash + cells)binary.127/m=20,n=3500,h2c=pornin,map=mcg64gf2_127per-element197 ns197 ns .. 198 nsper elem
encode (hash + cells)binary.127/m=5,n=3500,h2c=porningf2_127per-element161 ns160 ns .. 162 nsper elem
encode (hash + cells)binary.127/m=5,n=3500,h2c=pornin,map=mcg64gf2_127per-element158 ns158 ns .. 159 nsper elem
encode (hash + cells)binary.127/m=5,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127per-element102 ns102 ns .. 102 nsper elem
encode (hash + cells)binary-lambda.127/m=12150,n=3500,h2c=pornin-addendgf2_127-lambdaper-element399 ns399 ns .. 400 nsper elem
encode (hash + cells)binary-lambda.127/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdaper-element341 ns341 ns .. 342 nsper elem
encode (hash + cells)binary-lambda.127/m=1350,n=3500,h2c=pornin-addendgf2_127-lambdaper-element326 ns325 ns .. 326 nsper elem
encode (hash + cells)binary-lambda.127/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdaper-element268 ns267 ns .. 268 nsper elem
encode (hash + cells)binary-lambda.127/m=5,n=3500,h2c=pornin-addendgf2_127-lambdaper-element151 ns151 ns .. 151 nsper elem
encode (hash + cells)binary-lambda.127/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdaper-element96.4 ns96.3 ns .. 96.6 nsper elem
encode (hash + cells)binary-u.127/m=12150,n=3500,h2c=pornin-addendgf2_127-uper-element351 ns349 ns .. 352 nsper elem
encode (hash + cells)binary-u.127/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-uper-element294 ns293 ns .. 295 nsper elem
encode (hash + cells)binary-u.127/m=1350,n=3500,h2c=pornin-addendgf2_127-uper-element288 ns287 ns .. 288 nsper elem
encode (hash + cells)binary-u.127/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-uper-element227 ns227 ns .. 228 nsper elem
encode (hash + cells)binary-u.127/m=150,n=3500,h2c=pornin-addendgf2_127-uper-element231 ns231 ns .. 232 nsper elem
encode (hash + cells)binary-u.127/m=20,n=3500,h2c=pornin-addendgf2_127-uper-element183 ns183 ns .. 184 nsper elem
encode (hash + cells)binary-u.127/m=5,n=3500,h2c=pornin-addendgf2_127-uper-element152 ns151 ns .. 152 nsper elem
encode (hash + cells)binary-u.127/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-uper-element90.5 ns90.4 ns .. 90.7 nsper elem
encode (hash + cells)binary-w.127/m=12150,n=3500,h2c=pornin-addendgf2_127-wper-element398 ns397 ns .. 399 nsper elem
encode (hash + cells)binary-w.127/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wper-element341 ns340 ns .. 341 nsper elem
encode (hash + cells)binary-w.127/m=1350,n=3500,h2c=pornin-addendgf2_127-wper-element325 ns325 ns .. 326 nsper elem
encode (hash + cells)binary-w.127/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wper-element268 ns268 ns .. 268 nsper elem
encode (hash + cells)binary-w.127/m=5,n=3500,h2c=pornin-addendgf2_127-wper-element151 ns151 ns .. 151 nsper elem
encode (hash + cells)binary-w.127/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wper-element95.9 ns95.6 ns .. 96.1 nsper elem
encode (hash + cells)edwards.107/m=1350,n=3500,h2c=tiedwards107per-element1.09 µs1.08 µs .. 1.09 µsper elem
encode (hash + cells)edwards.127/m=1350,n=3500,h2c=tiedwards127per-element1.44 µs1.43 µs .. 1.44 µsper elem
encode (hash + cells)edwards.61x2/m=1350,n=3500,h2c=tiedwards61x2per-element940 ns938 ns .. 942 nsper elem
encode (hash + cells)twisted.goldilocks2/m=1350,n=3500,h2c=titwisted-goldilocks2per-element2.18 µs2.17 µs .. 2.18 µsper elem
encode (hash + cells)twisted.128/m=1350,n=3500,h2c=titwisted128per-element2.37 µs2.36 µs .. 2.38 µsper elem
encode (hash + cells)twisted.61x2/m=1350,n=3500,h2c=titwisted61x2per-element900 ns898 ns .. 902 nsper elem
encode (hash + cells)twisted.64x2/m=1350,n=3500,h2c=titwisted64x2per-element1.45 µs1.45 µs .. 1.45 µsper elem
encode (hash + cells)weier.107/m=1350,n=3500,h2c=tiweier107per-element1.24 µs1.24 µs .. 1.25 µsper elem
encode (hash + cells)weier-jacobian.107/m=1350,n=3500,h2c=tiweier107-jacobianper-element1.21 µs1.21 µs .. 1.21 µsper elem
encode (hash + cells)weier.127/m=1350,n=3500,h2c=tiweier127per-element1.74 µs1.74 µs .. 1.74 µsper elem
encode (hash + cells)weier-jacobian.127/m=1350,n=3500,h2c=tiweier127-jacobianper-element1.59 µs1.59 µs .. 1.59 µsper elem
encode (hash + cells)weier.61x2/m=1350,n=3500,h2c=tiweier61x2per-element1.08 µs1.08 µs .. 1.09 µsper elem
encode (hash + cells)weier-jacobian.61x2/m=1350,n=3500,h2c=tiweier61x2-jacobianper-element1.11 µs1.10 µs .. 1.11 µsper elem
encode (hash + cells)ristretto255/m=12150,n=3500ristretto255per-element6.16 µs6.14 µs .. 6.17 µsper elem
encode (hash + cells)ristretto255/m=12150,n=3500,map=mcg64ristretto255per-element6.35 µs6.33 µs .. 6.38 µsper elem
encode (hash + cells)ristretto255/m=1350,n=3500ristretto255per-element5.84 µs5.83 µs .. 5.85 µsper elem
encode (hash + cells)ristretto255/m=1350,n=3500,map=mcg64ristretto255per-element5.96 µs5.92 µs .. 5.99 µsper elem
encode (hash + cells)ristretto255/m=150,n=3500ristretto255per-element5.53 µs5.52 µs .. 5.53 µsper elem
encode (hash + cells)ristretto255/m=150,n=3500,map=mcg64ristretto255per-element5.49 µs5.48 µs .. 5.50 µsper elem
encode (hash + cells)ristretto255/m=20,n=3500ristretto255per-element5.25 µs5.23 µs .. 5.26 µsper elem
encode (hash + cells)ristretto255/m=20,n=3500,map=mcg64ristretto255per-element5.26 µs5.24 µs .. 5.27 µsper elem
encode (hash + cells)ristretto255/m=5,n=3500ristretto255per-element5.11 µs5.10 µs .. 5.11 µsper elem
encode (hash + cells)ristretto255/m=5,n=3500,map=mcg64ristretto255per-element5.08 µs5.08 µs .. 5.09 µsper elem
cell updatesxor-sha256.64/m=1350,n=3500xorper-element141 ns140 ns .. 141 nsper elem
cell updatesxor-siphash.64/m=1350,n=3500xor-siphashper-element141 ns140 ns .. 141 nsper elem
cell updatesbinary.109/m=12150,n=3500gf2_109per-element321 ns320 ns .. 321 nsper elem
cell updatesbinary.109/m=1350,n=3500gf2_109per-element248 ns247 ns .. 248 nsper elem
cell updatesbinary.109/m=5,n=3500gf2_109per-element93.7 ns93.5 ns .. 93.8 nsper elem
cell updatesbinary-lambda.109/m=12150,n=3500gf2_109-lambdaper-element295 ns294 ns .. 296 nsper elem
cell updatesbinary-lambda.109/m=1350,n=3500gf2_109-lambdaper-element237 ns236 ns .. 237 nsper elem
cell updatesbinary-lambda.109/m=150,n=3500gf2_109-lambdaper-element179 ns178 ns .. 179 nsper elem
cell updatesbinary-lambda.109/m=20,n=3500gf2_109-lambdaper-element122 ns122 ns .. 123 nsper elem
cell updatesbinary-lambda.109/m=5,n=3500gf2_109-lambdaper-element92.4 ns92.2 ns .. 92.6 nsper elem
cell updatesbinary-u.109/m=12150,n=3500gf2_109-uper-element273 ns272 ns .. 273 nsper elem
cell updatesbinary-u.109/m=1350,n=3500gf2_109-uper-element212 ns212 ns .. 212 nsper elem
cell updatesbinary-u.109/m=150,n=3500gf2_109-uper-element161 ns160 ns .. 161 nsper elem
cell updatesbinary-u.109/m=20,n=3500gf2_109-uper-element116 ns116 ns .. 116 nsper elem
cell updatesbinary-u.109/m=5,n=3500gf2_109-uper-element87.6 ns87.4 ns .. 87.8 nsper elem
cell updatesbinary-w.109/m=12150,n=3500gf2_109-wper-element292 ns290 ns .. 293 nsper elem
cell updatesbinary-w.109/m=1350,n=3500gf2_109-wper-element237 ns236 ns .. 237 nsper elem
cell updatesbinary-w.109/m=150,n=3500gf2_109-wper-element178 ns177 ns .. 178 nsper elem
cell updatesbinary-w.109/m=20,n=3500gf2_109-wper-element126 ns125 ns .. 126 nsper elem
cell updatesbinary-w.109/m=5,n=3500gf2_109-wper-element92.7 ns92.5 ns .. 92.8 nsper elem
cell updatesbinary.122/m=12150,n=3500gf2_122per-element391 ns390 ns .. 392 nsper elem
cell updatesbinary.122/m=1350,n=3500gf2_122per-element302 ns302 ns .. 303 nsper elem
cell updatesbinary.122/m=5,n=3500gf2_122per-element101 ns101 ns .. 101 nsper elem
cell updatesbinary.122-gls/m=12150,n=3500gf2_122-glsper-element371 ns369 ns .. 373 nsper elem
cell updatesbinary.122-gls/m=1350,n=3500gf2_122-glsper-element291 ns290 ns .. 291 nsper elem
cell updatesbinary.122-gls/m=5,n=3500gf2_122-glsper-element99.3 ns99.0 ns .. 99.6 nsper elem
cell updatesbinary-lambda.122-gls/m=12150,n=3500gf2_122-gls-lambdaper-element359 ns359 ns .. 360 nsper elem
cell updatesbinary-lambda.122-gls/m=1350,n=3500gf2_122-gls-lambdaper-element284 ns284 ns .. 285 nsper elem
cell updatesbinary-lambda.122-gls/m=5,n=3500gf2_122-gls-lambdaper-element97.3 ns97.1 ns .. 97.5 nsper elem
cell updatesbinary-u.122-gls/m=12150,n=3500gf2_122-gls-uper-element317 ns317 ns .. 318 nsper elem
cell updatesbinary-u.122-gls/m=1350,n=3500gf2_122-gls-uper-element246 ns245 ns .. 246 nsper elem
cell updatesbinary-u.122-gls/m=5,n=3500gf2_122-gls-uper-element89.4 ns89.2 ns .. 89.5 nsper elem
cell updatesbinary-w.122-gls/m=12150,n=3500gf2_122-gls-wper-element359 ns358 ns .. 360 nsper elem
cell updatesbinary-w.122-gls/m=1350,n=3500gf2_122-gls-wper-element284 ns283 ns .. 284 nsper elem
cell updatesbinary-w.122-gls/m=5,n=3500gf2_122-gls-wper-element97.4 ns97.2 ns .. 97.6 nsper elem
cell updatesbinary-lambda.122/m=12150,n=3500gf2_122-lambdaper-element360 ns359 ns .. 360 nsper elem
cell updatesbinary-lambda.122/m=1350,n=3500gf2_122-lambdaper-element284 ns283 ns .. 284 nsper elem
cell updatesbinary-lambda.122/m=5,n=3500gf2_122-lambdaper-element96.6 ns96.4 ns .. 96.8 nsper elem
cell updatesbinary-u.122/m=12150,n=3500gf2_122-uper-element317 ns315 ns .. 318 nsper elem
cell updatesbinary-u.122/m=1350,n=3500gf2_122-uper-element246 ns245 ns .. 246 nsper elem
cell updatesbinary-u.122/m=5,n=3500gf2_122-uper-element89.4 ns89.2 ns .. 89.5 nsper elem
cell updatesbinary-w.122/m=12150,n=3500gf2_122-wper-element359 ns358 ns .. 359 nsper elem
cell updatesbinary-w.122/m=1350,n=3500gf2_122-wper-element284 ns283 ns .. 285 nsper elem
cell updatesbinary-w.122/m=5,n=3500gf2_122-wper-element96.5 ns96.3 ns .. 96.7 nsper elem
cell updatesbinary.127/m=12150,n=3500gf2_127per-element341 ns341 ns .. 342 nsper elem
cell updatesbinary.127/m=1350,n=3500gf2_127per-element261 ns260 ns .. 262 nsper elem
cell updatesbinary.127/m=5,n=3500gf2_127per-element94.5 ns94.3 ns .. 94.8 nsper elem
cell updatesbinary-lambda.127/m=12150,n=3500gf2_127-lambdaper-element341 ns341 ns .. 342 nsper elem
cell updatesbinary-lambda.127/m=1350,n=3500gf2_127-lambdaper-element267 ns267 ns .. 267 nsper elem
cell updatesbinary-lambda.127/m=5,n=3500gf2_127-lambdaper-element92.5 ns92.3 ns .. 92.7 nsper elem
cell updatesbinary-u.127/m=12150,n=3500gf2_127-uper-element286 ns285 ns .. 287 nsper elem
cell updatesbinary-u.127/m=1350,n=3500gf2_127-uper-element222 ns222 ns .. 222 nsper elem
cell updatesbinary-u.127/m=150,n=3500gf2_127-uper-element167 ns167 ns .. 168 nsper elem
cell updatesbinary-u.127/m=20,n=3500gf2_127-uper-element120 ns119 ns .. 120 nsper elem
cell updatesbinary-u.127/m=5,n=3500gf2_127-uper-element86.4 ns86.3 ns .. 86.6 nsper elem
cell updatesbinary-w.127/m=12150,n=3500gf2_127-wper-element341 ns341 ns .. 342 nsper elem
cell updatesbinary-w.127/m=1350,n=3500gf2_127-wper-element267 ns267 ns .. 267 nsper elem
cell updatesbinary-w.127/m=5,n=3500gf2_127-wper-element92.4 ns92.1 ns .. 92.6 nsper elem
cell updatesedwards.107/m=1350,n=3500edwards107per-element286 ns285 ns .. 287 nsper elem
cell updatesedwards.127/m=1350,n=3500edwards127per-element338 ns337 ns .. 339 nsper elem
cell updatesedwards.61x2/m=1350,n=3500edwards61x2per-element270 ns270 ns .. 271 nsper elem
cell updatestwisted.goldilocks2/m=1350,n=3500twisted-goldilocks2per-element325 ns324 ns .. 326 nsper elem
cell updatestwisted.128/m=1350,n=3500twisted128per-element427 ns425 ns .. 429 nsper elem
cell updatestwisted.61x2/m=1350,n=3500twisted61x2per-element250 ns250 ns .. 251 nsper elem
cell updatestwisted.64x2/m=1350,n=3500twisted64x2per-element331 ns330 ns .. 331 nsper elem
cell updatesweier.107/m=1350,n=3500weier107per-element474 ns472 ns .. 475 nsper elem
cell updatesweier-jacobian.107/m=1350,n=3500weier107-jacobianper-element439 ns439 ns .. 440 nsper elem
cell updatesweier.127/m=1350,n=3500weier127per-element674 ns673 ns .. 675 nsper elem
cell updatesweier-jacobian.127/m=1350,n=3500weier127-jacobianper-element541 ns540 ns .. 543 nsper elem
cell updatesweier.61x2/m=1350,n=3500weier61x2per-element432 ns432 ns .. 433 nsper elem
cell updatesweier-jacobian.61x2/m=1350,n=3500weier61x2-jacobianper-element487 ns485 ns .. 488 nsper elem
cell updatesristretto255/m=1350,n=3500ristretto255per-element1.02 µs1.02 µs .. 1.02 µsper elem
peel, per differencexor-sha256.64/d=1350,m=2700,prefilter=true,batch=truexorbatch643 ns642 ns .. 645 nsper elem
peel, per differencexor-siphash.64/d=1350,m=2700,prefilter=true,batch=truexor-siphashbatch648 ns647 ns .. 650 nsper elem
peel, per differencebinary.109/d=10000,m=20000,prefilter=true,batch=true,h2c=porningf2_109batch1.14 µs1.13 µs .. 1.14 µsper elem
peel, per differencebinary.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109batch952 ns950 ns .. 953 nsper elem
peel, per differencebinary.109/d=1350,m=2700,prefilter=true,batch=true,h2c=porningf2_109batch838 ns836 ns .. 841 nsper elem
peel, per differencebinary.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109batch614 ns612 ns .. 615 nsper elem
peel, per differencebinary.109/d=4,m=10,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109batch735 ns734 ns .. 737 nsper elem
peel, per differencebinary.109/d=4,m=8,prefilter=true,batch=true,h2c=porningf2_109batch613 ns612 ns .. 615 nsper elem
peel, per differencebinary-lambda.109/d=10000,m=20000,prefilter=false,batch=false,h2c=pornin-addendgf2_109-lambdaper-element1.73 µs1.72 µs .. 1.73 µsper elem
peel, per differencebinary-lambda.109/d=10000,m=20000,prefilter=false,batch=true,h2c=pornin-addendgf2_109-lambdabatch897 ns896 ns .. 899 nsper elem
peel, per differencebinary-lambda.109/d=10000,m=20000,prefilter=true,batch=false,h2c=pornin-addendgf2_109-lambdaper-element1.60 µs1.59 µs .. 1.60 µsper elem
peel, per differencebinary-lambda.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_109-lambdabatch1.12 µs1.12 µs .. 1.13 µsper elem
peel, per differencebinary-lambda.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdabatch957 ns955 ns .. 958 nsper elem
peel, per differencebinary-lambda.109/d=1350,m=2700,prefilter=false,batch=false,h2c=pornin-addendgf2_109-lambdaper-element1.59 µs1.58 µs .. 1.60 µsper elem
peel, per differencebinary-lambda.109/d=1350,m=2700,prefilter=false,batch=true,h2c=pornin-addendgf2_109-lambdabatch683 ns680 ns .. 685 nsper elem
peel, per differencebinary-lambda.109/d=1350,m=2700,prefilter=true,batch=false,h2c=pornin-addendgf2_109-lambdaper-element1.37 µs1.36 µs .. 1.38 µsper elem
peel, per differencebinary-lambda.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_109-lambdabatch829 ns826 ns .. 832 nsper elem
peel, per differencebinary-lambda.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdabatch585 ns584 ns .. 587 nsper elem
peel, per differencebinary-lambda.109/d=150,m=300,prefilter=false,batch=false,h2c=pornin-addendgf2_109-lambdaper-element1.40 µs1.40 µs .. 1.41 µsper elem
peel, per differencebinary-lambda.109/d=150,m=300,prefilter=false,batch=true,h2c=pornin-addendgf2_109-lambdabatch556 ns555 ns .. 557 nsper elem
peel, per differencebinary-lambda.109/d=150,m=300,prefilter=true,batch=false,h2c=pornin-addendgf2_109-lambdaper-element1.14 µs1.13 µs .. 1.14 µsper elem
peel, per differencebinary-lambda.109/d=150,m=300,prefilter=true,batch=true,h2c=pornin-addendgf2_109-lambdabatch650 ns649 ns .. 651 nsper elem
peel, per differencebinary-lambda.109/d=20,m=40,prefilter=false,batch=false,h2c=pornin-addendgf2_109-lambdaper-element1.15 µs1.15 µs .. 1.16 µsper elem
peel, per differencebinary-lambda.109/d=20,m=40,prefilter=false,batch=true,h2c=pornin-addendgf2_109-lambdabatch519 ns518 ns .. 520 nsper elem
peel, per differencebinary-lambda.109/d=20,m=40,prefilter=true,batch=false,h2c=pornin-addendgf2_109-lambdaper-element985 ns982 ns .. 988 nsper elem
peel, per differencebinary-lambda.109/d=20,m=40,prefilter=true,batch=true,h2c=pornin-addendgf2_109-lambdabatch589 ns588 ns .. 590 nsper elem
peel, per differencebinary-lambda.109/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdabatch698 ns697 ns .. 700 nsper elem
peel, per differencebinary-lambda.109/d=4,m=8,prefilter=false,batch=false,h2c=pornin-addendgf2_109-lambdaper-element744 ns742 ns .. 746 nsper elem
peel, per differencebinary-lambda.109/d=4,m=8,prefilter=false,batch=true,h2c=pornin-addendgf2_109-lambdabatch536 ns535 ns .. 538 nsper elem
peel, per differencebinary-lambda.109/d=4,m=8,prefilter=true,batch=false,h2c=pornin-addendgf2_109-lambdaper-element794 ns792 ns .. 796 nsper elem
peel, per differencebinary-lambda.109/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_109-lambdabatch586 ns585 ns .. 588 nsper elem
peel, per differencebinary-u.109/d=10000,m=20000,prefilter=false,batch=false,h2c=pornin-addendgf2_109-uper-element1.66 µs1.66 µs .. 1.67 µsper elem
peel, per differencebinary-u.109/d=10000,m=20000,prefilter=false,batch=true,h2c=pornin-addendgf2_109-ubatch840 ns839 ns .. 841 nsper elem
peel, per differencebinary-u.109/d=10000,m=20000,prefilter=true,batch=false,h2c=pornin-addendgf2_109-uper-element1.54 µs1.54 µs .. 1.54 µsper elem
peel, per differencebinary-u.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch1.05 µs1.05 µs .. 1.06 µsper elem
peel, per differencebinary-u.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-ubatch883 ns882 ns .. 885 nsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=false,batch=false,h2c=pornin-addendgf2_109-uper-element1.49 µs1.49 µs .. 1.49 µsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=false,batch=true,h2c=pornin-addendgf2_109-ubatch640 ns639 ns .. 641 nsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=true,batch=false,h2c=pornin-addendgf2_109-uper-element1.27 µs1.27 µs .. 1.28 µsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch786 ns784 ns .. 788 nsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-ubatch563 ns562 ns .. 564 nsper elem
peel, per differencebinary-u.109/d=150,m=300,prefilter=false,batch=false,h2c=pornin-addendgf2_109-uper-element1.39 µs1.39 µs .. 1.39 µsper elem
peel, per differencebinary-u.109/d=150,m=300,prefilter=false,batch=true,h2c=pornin-addendgf2_109-ubatch550 ns550 ns .. 551 nsper elem
peel, per differencebinary-u.109/d=150,m=300,prefilter=true,batch=false,h2c=pornin-addendgf2_109-uper-element1.12 µs1.12 µs .. 1.13 µsper elem
peel, per differencebinary-u.109/d=150,m=300,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch643 ns642 ns .. 644 nsper elem
peel, per differencebinary-u.109/d=20,m=40,prefilter=false,batch=false,h2c=pornin-addendgf2_109-uper-element1.15 µs1.14 µs .. 1.15 µsper elem
peel, per differencebinary-u.109/d=20,m=40,prefilter=false,batch=true,h2c=pornin-addendgf2_109-ubatch519 ns518 ns .. 521 nsper elem
peel, per differencebinary-u.109/d=20,m=40,prefilter=true,batch=false,h2c=pornin-addendgf2_109-uper-element986 ns984 ns .. 989 nsper elem
peel, per differencebinary-u.109/d=20,m=40,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch590 ns589 ns .. 591 nsper elem
peel, per differencebinary-u.109/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-ubatch714 ns712 ns .. 715 nsper elem
peel, per differencebinary-u.109/d=4,m=8,prefilter=false,batch=false,h2c=pornin-addendgf2_109-uper-element750 ns747 ns .. 753 nsper elem
peel, per differencebinary-u.109/d=4,m=8,prefilter=false,batch=true,h2c=pornin-addendgf2_109-ubatch547 ns546 ns .. 549 nsper elem
peel, per differencebinary-u.109/d=4,m=8,prefilter=true,batch=false,h2c=pornin-addendgf2_109-uper-element802 ns800 ns .. 805 nsper elem
peel, per differencebinary-u.109/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch595 ns593 ns .. 596 nsper elem
peel, per differencebinary-w.109/d=10000,m=20000,prefilter=false,batch=false,h2c=pornin-addendgf2_109-wper-element1.72 µs1.72 µs .. 1.73 µsper elem
peel, per differencebinary-w.109/d=10000,m=20000,prefilter=false,batch=true,h2c=pornin-addendgf2_109-wbatch897 ns895 ns .. 899 nsper elem
peel, per differencebinary-w.109/d=10000,m=20000,prefilter=true,batch=false,h2c=pornin-addendgf2_109-wper-element1.60 µs1.60 µs .. 1.60 µsper elem
peel, per differencebinary-w.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_109-wbatch1.13 µs1.13 µs .. 1.13 µsper elem
peel, per differencebinary-w.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wbatch957 ns955 ns .. 958 nsper elem
peel, per differencebinary-w.109/d=1350,m=2700,prefilter=false,batch=false,h2c=pornin-addendgf2_109-wper-element1.52 µs1.51 µs .. 1.52 µsper elem
peel, per differencebinary-w.109/d=1350,m=2700,prefilter=false,batch=true,h2c=pornin-addendgf2_109-wbatch666 ns665 ns .. 667 nsper elem
peel, per differencebinary-w.109/d=1350,m=2700,prefilter=true,batch=false,h2c=pornin-addendgf2_109-wper-element1.31 µs1.31 µs .. 1.32 µsper elem
peel, per differencebinary-w.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_109-wbatch823 ns821 ns .. 825 nsper elem
peel, per differencebinary-w.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wbatch580 ns579 ns .. 582 nsper elem
peel, per differencebinary-w.109/d=150,m=300,prefilter=false,batch=false,h2c=pornin-addendgf2_109-wper-element1.40 µs1.39 µs .. 1.40 µsper elem
peel, per differencebinary-w.109/d=150,m=300,prefilter=false,batch=true,h2c=pornin-addendgf2_109-wbatch554 ns553 ns .. 555 nsper elem
peel, per differencebinary-w.109/d=150,m=300,prefilter=true,batch=false,h2c=pornin-addendgf2_109-wper-element1.14 µs1.13 µs .. 1.14 µsper elem
peel, per differencebinary-w.109/d=150,m=300,prefilter=true,batch=true,h2c=pornin-addendgf2_109-wbatch649 ns648 ns .. 651 nsper elem
peel, per differencebinary-w.109/d=20,m=40,prefilter=false,batch=false,h2c=pornin-addendgf2_109-wper-element1.15 µs1.15 µs .. 1.15 µsper elem
peel, per differencebinary-w.109/d=20,m=40,prefilter=false,batch=true,h2c=pornin-addendgf2_109-wbatch518 ns517 ns .. 519 nsper elem
peel, per differencebinary-w.109/d=20,m=40,prefilter=true,batch=false,h2c=pornin-addendgf2_109-wper-element986 ns982 ns .. 989 nsper elem
peel, per differencebinary-w.109/d=20,m=40,prefilter=true,batch=true,h2c=pornin-addendgf2_109-wbatch589 ns588 ns .. 590 nsper elem
peel, per differencebinary-w.109/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wbatch694 ns693 ns .. 696 nsper elem
peel, per differencebinary-w.109/d=4,m=8,prefilter=false,batch=false,h2c=pornin-addendgf2_109-wper-element744 ns742 ns .. 747 nsper elem
peel, per differencebinary-w.109/d=4,m=8,prefilter=false,batch=true,h2c=pornin-addendgf2_109-wbatch537 ns536 ns .. 538 nsper elem
peel, per differencebinary-w.109/d=4,m=8,prefilter=true,batch=false,h2c=pornin-addendgf2_109-wper-element796 ns794 ns .. 798 nsper elem
peel, per differencebinary-w.109/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_109-wbatch588 ns587 ns .. 590 nsper elem
peel, per differencebinary.122/d=10000,m=20000,prefilter=true,batch=true,h2c=porningf2_122batch1.20 µs1.20 µs .. 1.20 µsper elem
peel, per differencebinary.122/d=1350,m=2700,prefilter=true,batch=true,h2c=porningf2_122batch891 ns889 ns .. 893 nsper elem
peel, per differencebinary.122/d=4,m=8,prefilter=true,batch=true,h2c=porningf2_122batch527 ns526 ns .. 528 nsper elem
peel, per differencebinary.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=porningf2_122-glsbatch1.18 µs1.18 µs .. 1.18 µsper elem
peel, per differencebinary.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=porningf2_122-glsbatch888 ns886 ns .. 889 nsper elem
peel, per differencebinary.122-gls/d=4,m=8,prefilter=true,batch=true,h2c=porningf2_122-glsbatch521 ns519 ns .. 522 nsper elem
peel, per differencebinary-lambda.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-lambdabatch1.21 µs1.21 µs .. 1.21 µsper elem
peel, per differencebinary-lambda.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdabatch1.02 µs1.01 µs .. 1.02 µsper elem
peel, per differencebinary-lambda.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-lambdabatch888 ns885 ns .. 891 nsper elem
peel, per differencebinary-lambda.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdabatch651 ns648 ns .. 654 nsper elem
peel, per differencebinary-lambda.122-gls/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdabatch560 ns558 ns .. 562 nsper elem
peel, per differencebinary-lambda.122-gls/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-lambdabatch487 ns486 ns .. 488 nsper elem
peel, per differencebinary-u.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-ubatch1.12 µs1.11 µs .. 1.12 µsper elem
peel, per differencebinary-u.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-ubatch926 ns924 ns .. 927 nsper elem
peel, per differencebinary-u.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-ubatch825 ns823 ns .. 826 nsper elem
peel, per differencebinary-u.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-ubatch597 ns596 ns .. 598 nsper elem
peel, per differencebinary-u.122-gls/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-ubatch580 ns578 ns .. 581 nsper elem
peel, per differencebinary-u.122-gls/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-ubatch502 ns500 ns .. 503 nsper elem
peel, per differencebinary-w.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-wbatch1.22 µs1.22 µs .. 1.22 µsper elem
peel, per differencebinary-w.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wbatch1.02 µs1.01 µs .. 1.03 µsper elem
peel, per differencebinary-w.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-wbatch892 ns889 ns .. 895 nsper elem
peel, per differencebinary-w.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wbatch645 ns643 ns .. 647 nsper elem
peel, per differencebinary-w.122-gls/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wbatch560 ns558 ns .. 561 nsper elem
peel, per differencebinary-w.122-gls/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-wbatch488 ns486 ns .. 489 nsper elem
peel, per differencebinary-lambda.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-lambdabatch1.21 µs1.21 µs .. 1.21 µsper elem
peel, per differencebinary-lambda.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdabatch1.02 µs1.02 µs .. 1.02 µsper elem
peel, per differencebinary-lambda.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-lambdabatch879 ns877 ns .. 882 nsper elem
peel, per differencebinary-lambda.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdabatch646 ns643 ns .. 649 nsper elem
peel, per differencebinary-lambda.122/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdabatch568 ns567 ns .. 569 nsper elem
peel, per differencebinary-lambda.122/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-lambdabatch492 ns491 ns .. 493 nsper elem
peel, per differencebinary-u.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-ubatch1.11 µs1.11 µs .. 1.11 µsper elem
peel, per differencebinary-u.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-ubatch923 ns922 ns .. 925 nsper elem
peel, per differencebinary-u.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-ubatch821 ns819 ns .. 824 nsper elem
peel, per differencebinary-u.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-ubatch597 ns595 ns .. 598 nsper elem
peel, per differencebinary-u.122/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-ubatch584 ns583 ns .. 586 nsper elem
peel, per differencebinary-u.122/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-ubatch504 ns503 ns .. 505 nsper elem
peel, per differencebinary-w.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-wbatch1.22 µs1.21 µs .. 1.22 µsper elem
peel, per differencebinary-w.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wbatch1.03 µs1.02 µs .. 1.03 µsper elem
peel, per differencebinary-w.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-wbatch887 ns883 ns .. 891 nsper elem
peel, per differencebinary-w.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wbatch639 ns634 ns .. 643 nsper elem
peel, per differencebinary-w.122/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wbatch563 ns561 ns .. 565 nsper elem
peel, per differencebinary-w.122/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-wbatch492 ns490 ns .. 493 nsper elem
peel, per differencebinary.127/d=10000,m=20000,prefilter=true,batch=true,h2c=porningf2_127batch1.13 µs1.13 µs .. 1.14 µsper elem
peel, per differencebinary.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127batch971 ns969 ns .. 973 nsper elem
peel, per differencebinary.127/d=1350,m=2700,prefilter=true,batch=true,h2c=porningf2_127batch844 ns841 ns .. 846 nsper elem
peel, per differencebinary.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127batch624 ns623 ns .. 626 nsper elem
peel, per differencebinary.127/d=4,m=10,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127batch713 ns711 ns .. 715 nsper elem
peel, per differencebinary.127/d=4,m=8,prefilter=true,batch=true,h2c=porningf2_127batch601 ns599 ns .. 603 nsper elem
peel, per differencebinary-lambda.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_127-lambdabatch1.19 µs1.19 µs .. 1.20 µsper elem
peel, per differencebinary-lambda.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdabatch999 ns997 ns .. 1.00 µsper elem
peel, per differencebinary-lambda.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_127-lambdabatch878 ns874 ns .. 881 nsper elem
peel, per differencebinary-lambda.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdabatch629 ns628 ns .. 631 nsper elem
peel, per differencebinary-lambda.127/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdabatch685 ns683 ns .. 686 nsper elem
peel, per differencebinary-lambda.127/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_127-lambdabatch574 ns572 ns .. 575 nsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=false,batch=false,h2c=pornin-addendgf2_127-uper-element1.65 µs1.65 µs .. 1.65 µsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=false,batch=true,h2c=pornin-addendgf2_127-ubatch858 ns856 ns .. 859 nsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=true,batch=false,h2c=pornin-addendgf2_127-uper-element1.54 µs1.54 µs .. 1.54 µsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch1.08 µs1.08 µs .. 1.08 µsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-ubatch894 ns893 ns .. 896 nsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=false,batch=false,h2c=pornin-addendgf2_127-uper-element1.45 µs1.45 µs .. 1.46 µsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=false,batch=true,h2c=pornin-addendgf2_127-ubatch636 ns633 ns .. 638 nsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=true,batch=false,h2c=pornin-addendgf2_127-uper-element1.26 µs1.26 µs .. 1.27 µsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch796 ns793 ns .. 798 nsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-ubatch573 ns572 ns .. 574 nsper elem
peel, per differencebinary-u.127/d=150,m=300,prefilter=false,batch=false,h2c=pornin-addendgf2_127-uper-element1.36 µs1.36 µs .. 1.37 µsper elem
peel, per differencebinary-u.127/d=150,m=300,prefilter=false,batch=true,h2c=pornin-addendgf2_127-ubatch546 ns544 ns .. 547 nsper elem
peel, per differencebinary-u.127/d=150,m=300,prefilter=true,batch=false,h2c=pornin-addendgf2_127-uper-element1.11 µs1.10 µs .. 1.11 µsper elem
peel, per differencebinary-u.127/d=150,m=300,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch639 ns637 ns .. 640 nsper elem
peel, per differencebinary-u.127/d=20,m=40,prefilter=false,batch=false,h2c=pornin-addendgf2_127-uper-element1.10 µs1.09 µs .. 1.10 µsper elem
peel, per differencebinary-u.127/d=20,m=40,prefilter=false,batch=true,h2c=pornin-addendgf2_127-ubatch514 ns513 ns .. 516 nsper elem
peel, per differencebinary-u.127/d=20,m=40,prefilter=true,batch=false,h2c=pornin-addendgf2_127-uper-element966 ns962 ns .. 970 nsper elem
peel, per differencebinary-u.127/d=20,m=40,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch576 ns574 ns .. 577 nsper elem
peel, per differencebinary-u.127/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-ubatch698 ns695 ns .. 700 nsper elem
peel, per differencebinary-u.127/d=4,m=8,prefilter=false,batch=false,h2c=pornin-addendgf2_127-uper-element720 ns718 ns .. 722 nsper elem
peel, per differencebinary-u.127/d=4,m=8,prefilter=false,batch=true,h2c=pornin-addendgf2_127-ubatch529 ns527 ns .. 530 nsper elem
peel, per differencebinary-u.127/d=4,m=8,prefilter=true,batch=false,h2c=pornin-addendgf2_127-uper-element769 ns767 ns .. 771 nsper elem
peel, per differencebinary-u.127/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch576 ns575 ns .. 578 nsper elem
peel, per differencebinary-w.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch1.20 µs1.20 µs .. 1.20 µsper elem
peel, per differencebinary-w.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wbatch999 ns997 ns .. 1.00 µsper elem
peel, per differencebinary-w.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch879 ns876 ns .. 881 nsper elem
peel, per differencebinary-w.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wbatch636 ns634 ns .. 638 nsper elem
peel, per differencebinary-w.127/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wbatch684 ns682 ns .. 685 nsper elem
peel, per differencebinary-w.127/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch568 ns566 ns .. 569 nsper elem
peel, per differenceedwards.107/d=1350,m=2700,prefilter=true,batch=true,h2c=tiedwards107batch1.66 µs1.65 µs .. 1.66 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiedwards127batch1.99 µs1.99 µs .. 2.00 µsper elem
peel, per differenceedwards.61x2/d=1350,m=2700,prefilter=true,batch=true,h2c=tiedwards61x2batch1.45 µs1.45 µs .. 1.46 µsper elem
peel, per differencetwisted.goldilocks2/d=1350,m=2700,prefilter=true,batch=true,h2c=titwisted-goldilocks2batch2.81 µs2.80 µs .. 2.82 µsper elem
peel, per differencetwisted.128/d=1350,m=2700,prefilter=true,batch=true,h2c=titwisted128batch3.06 µs3.05 µs .. 3.07 µsper elem
peel, per differencetwisted.61x2/d=1350,m=2700,prefilter=true,batch=true,h2c=titwisted61x2batch1.45 µs1.45 µs .. 1.45 µsper elem
peel, per differencetwisted.64x2/d=1350,m=2700,prefilter=true,batch=true,h2c=titwisted64x2batch2.00 µs2.00 µs .. 2.01 µsper elem
peel, per differenceweier.107/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier107batch1.83 µs1.83 µs .. 1.84 µsper elem
peel, per differenceweier-jacobian.107/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier107-jacobianbatch1.81 µs1.81 µs .. 1.82 µsper elem
peel, per differenceweier.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier127batch2.29 µs2.29 µs .. 2.30 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch2.15 µs2.14 µs .. 2.15 µsper elem
peel, per differenceweier.61x2/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier61x2batch1.64 µs1.64 µs .. 1.64 µsper elem
peel, per differenceweier-jacobian.61x2/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier61x2-jacobianbatch1.69 µs1.69 µs .. 1.69 µsper elem
peel, per differenceristretto255/d=1350,m=2700,prefilter=true,batch=trueristretto255batch6.84 µs6.82 µs .. 6.85 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=10xorper-element572 ns570 ns .. 574 nsper elem
rateless encode and decode, per differencexor-sha256.64/d=100xorper-element1.01 µs1.00 µs .. 1.01 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=1000xorper-element1.74 µs1.74 µs .. 1.74 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=10000xorper-element3.10 µs3.08 µs .. 3.13 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=100000xorper-element6.38 µs6.35 µs .. 6.42 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=20xorper-element673 ns673 ns .. 674 nsper elem
rateless encode and decode, per differencexor-sha256.64/d=40xorper-element785 ns784 ns .. 787 nsper elem
rateless encode and decode, per differencexor-sha256.64/d=50000xorper-element4.70 µs4.68 µs .. 4.72 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10xor-siphashper-element514 ns512 ns .. 516 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=10,map=mcg64xor-siphashper-element498 ns498 ns .. 499 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=100xor-siphashper-element925 ns918 ns .. 930 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=100,map=mcg64xor-siphashper-element913 ns913 ns .. 914 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=1000xor-siphashper-element1.66 µs1.65 µs .. 1.66 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=1000,map=mcg64xor-siphashper-element1.65 µs1.65 µs .. 1.66 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000xor-siphashper-element3.01 µs2.98 µs .. 3.04 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000,map=chacha8xor-siphashper-element3.78 µs3.75 µs .. 3.81 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000,map=mcg64xor-siphashper-element2.97 µs2.94 µs .. 2.99 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000xor-siphashper-element6.29 µs6.25 µs .. 6.34 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000,map=chacha8xor-siphashper-element12.8 µs12.8 µs .. 12.9 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000,map=mcg64xor-siphashper-element5.55 µs5.49 µs .. 5.60 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=20xor-siphashper-element604 ns602 ns .. 605 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=20,map=mcg64xor-siphashper-element592 ns591 ns .. 592 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=40xor-siphashper-element709 ns708 ns .. 711 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=40,map=mcg64xor-siphashper-element687 ns683 ns .. 690 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=50000xor-siphashper-element4.65 µs4.63 µs .. 4.66 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=50000,map=mcg64xor-siphashper-element4.52 µs4.50 µs .. 4.54 µsper elem
rateless encode and decode, per differencebinary.109/d=10,h2c=porningf2_109per-element2.12 µs2.11 µs .. 2.12 µsper elem
rateless encode and decode, per differencebinary.109/d=1000,h2c=porningf2_109per-element3.97 µs3.95 µs .. 3.99 µsper elem
rateless encode and decode, per differencebinary.109/d=100000,h2c=porningf2_109per-element9.42 µs9.37 µs .. 9.47 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=10,h2c=pornin-addendgf2_109-lambdaper-element2.09 µs2.09 µs .. 2.10 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=100,h2c=pornin-addendgf2_109-lambdaper-element2.98 µs2.97 µs .. 2.99 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=1000,h2c=pornin-addendgf2_109-lambdaper-element3.92 µs3.90 µs .. 3.93 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=10000,h2c=pornin-addendgf2_109-lambdaper-element5.41 µs5.37 µs .. 5.44 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=100000,h2c=pornin-addendgf2_109-lambdaper-element9.36 µs9.30 µs .. 9.41 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=20,h2c=pornin-addendgf2_109-lambdaper-element2.40 µs2.39 µs .. 2.41 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=40,h2c=pornin-addendgf2_109-lambdaper-element2.64 µs2.64 µs .. 2.65 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=50000,h2c=pornin-addendgf2_109-lambdaper-element7.48 µs7.44 µs .. 7.52 µsper elem
rateless encode and decode, per differencebinary-u.109/d=10,h2c=pornin-addendgf2_109-uper-element2.05 µs2.05 µs .. 2.06 µsper elem
rateless encode and decode, per differencebinary-u.109/d=100,h2c=pornin-addendgf2_109-uper-element2.91 µs2.90 µs .. 2.92 µsper elem
rateless encode and decode, per differencebinary-u.109/d=1000,h2c=pornin-addendgf2_109-uper-element3.85 µs3.84 µs .. 3.85 µsper elem
rateless encode and decode, per differencebinary-u.109/d=10000,h2c=pornin-addendgf2_109-uper-element5.35 µs5.32 µs .. 5.38 µsper elem
rateless encode and decode, per differencebinary-u.109/d=100000,h2c=pornin-addendgf2_109-uper-element8.96 µs8.88 µs .. 9.05 µsper elem
rateless encode and decode, per differencebinary-u.109/d=20,h2c=pornin-addendgf2_109-uper-element2.34 µs2.33 µs .. 2.34 µsper elem
rateless encode and decode, per differencebinary-u.109/d=40,h2c=pornin-addendgf2_109-uper-element2.56 µs2.55 µs .. 2.56 µsper elem
rateless encode and decode, per differencebinary-u.109/d=50000,h2c=pornin-addendgf2_109-uper-element7.33 µs7.29 µs .. 7.37 µsper elem
rateless encode and decode, per differencebinary-w.109/d=10,h2c=pornin-addendgf2_109-wper-element2.09 µs2.09 µs .. 2.10 µsper elem
rateless encode and decode, per differencebinary-w.109/d=100,h2c=pornin-addendgf2_109-wper-element2.98 µs2.97 µs .. 2.99 µsper elem
rateless encode and decode, per differencebinary-w.109/d=1000,h2c=pornin-addendgf2_109-wper-element3.92 µs3.91 µs .. 3.93 µsper elem
rateless encode and decode, per differencebinary-w.109/d=10000,h2c=pornin-addendgf2_109-wper-element5.41 µs5.38 µs .. 5.44 µsper elem
rateless encode and decode, per differencebinary-w.109/d=100000,h2c=pornin-addendgf2_109-wper-element9.36 µs9.32 µs .. 9.39 µsper elem
rateless encode and decode, per differencebinary-w.109/d=20,h2c=pornin-addendgf2_109-wper-element2.40 µs2.40 µs .. 2.41 µsper elem
rateless encode and decode, per differencebinary-w.109/d=40,h2c=pornin-addendgf2_109-wper-element2.64 µs2.63 µs .. 2.65 µsper elem
rateless encode and decode, per differencebinary-w.109/d=50000,h2c=pornin-addendgf2_109-wper-element7.48 µs7.45 µs .. 7.51 µsper elem
rateless encode and decode, per differencebinary.122/d=10,h2c=porningf2_122per-element1.70 µs1.70 µs .. 1.71 µsper elem
rateless encode and decode, per differencebinary.122/d=1000,h2c=porningf2_122per-element3.56 µs3.55 µs .. 3.57 µsper elem
rateless encode and decode, per differencebinary.122/d=100000,h2c=porningf2_122per-element9.61 µs9.59 µs .. 9.63 µsper elem
rateless encode and decode, per differencebinary.122-gls/d=10,h2c=porningf2_122-glsper-element1.68 µs1.67 µs .. 1.68 µsper elem
rateless encode and decode, per differencebinary.122-gls/d=1000,h2c=porningf2_122-glsper-element3.49 µs3.48 µs .. 3.51 µsper elem
rateless encode and decode, per differencebinary.122-gls/d=100000,h2c=porningf2_122-glsper-element9.09 µs9.07 µs .. 9.11 µsper elem
rateless encode and decode, per differencebinary-lambda.122-gls/d=10,h2c=pornin-addendgf2_122-gls-lambdaper-element1.63 µs1.63 µs .. 1.64 µsper elem
rateless encode and decode, per differencebinary-lambda.122-gls/d=1000,h2c=pornin-addendgf2_122-gls-lambdaper-element3.44 µs3.43 µs .. 3.44 µsper elem
rateless encode and decode, per differencebinary-lambda.122-gls/d=100000,h2c=pornin-addendgf2_122-gls-lambdaper-element8.99 µs8.96 µs .. 9.02 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=10,h2c=pornin-addendgf2_122-gls-uper-element1.59 µs1.58 µs .. 1.59 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=1000,h2c=pornin-addendgf2_122-gls-uper-element3.35 µs3.34 µs .. 3.37 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=100000,h2c=pornin-addendgf2_122-gls-uper-element8.69 µs8.62 µs .. 8.76 µsper elem
rateless encode and decode, per differencebinary-w.122-gls/d=10,h2c=pornin-addendgf2_122-gls-wper-element1.63 µs1.63 µs .. 1.64 µsper elem
rateless encode and decode, per differencebinary-w.122-gls/d=1000,h2c=pornin-addendgf2_122-gls-wper-element3.43 µs3.43 µs .. 3.44 µsper elem
rateless encode and decode, per differencebinary-w.122-gls/d=100000,h2c=pornin-addendgf2_122-gls-wper-element8.97 µs8.94 µs .. 9.00 µsper elem
rateless encode and decode, per differencebinary-lambda.122/d=10,h2c=pornin-addendgf2_122-lambdaper-element1.64 µs1.64 µs .. 1.65 µsper elem
rateless encode and decode, per differencebinary-lambda.122/d=1000,h2c=pornin-addendgf2_122-lambdaper-element3.44 µs3.43 µs .. 3.45 µsper elem
rateless encode and decode, per differencebinary-lambda.122/d=100000,h2c=pornin-addendgf2_122-lambdaper-element9.02 µs8.97 µs .. 9.08 µsper elem
rateless encode and decode, per differencebinary-u.122/d=10,h2c=pornin-addendgf2_122-uper-element1.59 µs1.58 µs .. 1.59 µsper elem
rateless encode and decode, per differencebinary-u.122/d=1000,h2c=pornin-addendgf2_122-uper-element3.35 µs3.35 µs .. 3.36 µsper elem
rateless encode and decode, per differencebinary-u.122/d=100000,h2c=pornin-addendgf2_122-uper-element8.72 µs8.68 µs .. 8.78 µsper elem
rateless encode and decode, per differencebinary-w.122/d=10,h2c=pornin-addendgf2_122-wper-element1.64 µs1.63 µs .. 1.64 µsper elem
rateless encode and decode, per differencebinary-w.122/d=1000,h2c=pornin-addendgf2_122-wper-element3.43 µs3.42 µs .. 3.44 µsper elem
rateless encode and decode, per differencebinary-w.122/d=100000,h2c=pornin-addendgf2_122-wper-element8.97 µs8.93 µs .. 9.02 µsper elem
rateless encode and decode, per differencebinary.127/d=10,h2c=porningf2_127per-element2.00 µs1.99 µs .. 2.01 µsper elem
rateless encode and decode, per differencebinary.127/d=10,h2c=pornin,map=mcg64gf2_127per-element2.01 µs2.00 µs .. 2.01 µsper elem
rateless encode and decode, per differencebinary.127/d=100,h2c=pornin,map=mcg64gf2_127per-element2.90 µs2.90 µs .. 2.90 µsper elem
rateless encode and decode, per differencebinary.127/d=1000,h2c=porningf2_127per-element3.89 µs3.87 µs .. 3.91 µsper elem
rateless encode and decode, per differencebinary.127/d=1000,h2c=pornin,map=mcg64gf2_127per-element3.86 µs3.85 µs .. 3.88 µsper elem
rateless encode and decode, per differencebinary.127/d=10000,h2c=pornin,map=chacha8gf2_127per-element6.30 µs6.27 µs .. 6.32 µsper elem
rateless encode and decode, per differencebinary.127/d=10000,h2c=pornin,map=mcg64gf2_127per-element5.41 µs5.38 µs .. 5.43 µsper elem
rateless encode and decode, per differencebinary.127/d=100000,h2c=porningf2_127per-element9.37 µs9.34 µs .. 9.41 µsper elem
rateless encode and decode, per differencebinary.127/d=100000,h2c=pornin,map=chacha8gf2_127per-element15.8 µs15.7 µs .. 15.8 µsper elem
rateless encode and decode, per differencebinary.127/d=100000,h2c=pornin,map=mcg64gf2_127per-element8.69 µs8.64 µs .. 8.75 µsper elem
rateless encode and decode, per differencebinary.127/d=20,h2c=pornin,map=mcg64gf2_127per-element2.30 µs2.29 µs .. 2.30 µsper elem
rateless encode and decode, per differencebinary.127/d=40,h2c=pornin,map=mcg64gf2_127per-element2.55 µs2.53 µs .. 2.57 µsper elem
rateless encode and decode, per differencebinary.127/d=50000,h2c=pornin,map=mcg64gf2_127per-element7.47 µs7.42 µs .. 7.51 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=10,h2c=pornin-addendgf2_127-lambdaper-element1.97 µs1.97 µs .. 1.98 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=1000,h2c=pornin-addendgf2_127-lambdaper-element3.90 µs3.89 µs .. 3.91 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=100000,h2c=pornin-addendgf2_127-lambdaper-element9.40 µs9.35 µs .. 9.46 µsper elem
rateless encode and decode, per differencebinary-u.127/d=10,h2c=pornin-addendgf2_127-uper-element1.95 µs1.95 µs .. 1.96 µsper elem
rateless encode and decode, per differencebinary-u.127/d=100,h2c=pornin-addendgf2_127-uper-element2.84 µs2.83 µs .. 2.85 µsper elem
rateless encode and decode, per differencebinary-u.127/d=1000,h2c=pornin-addendgf2_127-uper-element3.81 µs3.80 µs .. 3.82 µsper elem
rateless encode and decode, per differencebinary-u.127/d=10000,h2c=pornin-addendgf2_127-uper-element5.31 µs5.27 µs .. 5.34 µsper elem
rateless encode and decode, per differencebinary-u.127/d=100000,h2c=pornin-addendgf2_127-uper-element9.00 µs8.91 µs .. 9.08 µsper elem
rateless encode and decode, per differencebinary-u.127/d=20,h2c=pornin-addendgf2_127-uper-element2.24 µs2.23 µs .. 2.24 µsper elem
rateless encode and decode, per differencebinary-u.127/d=40,h2c=pornin-addendgf2_127-uper-element2.47 µs2.46 µs .. 2.48 µsper elem
rateless encode and decode, per differencebinary-u.127/d=50000,h2c=pornin-addendgf2_127-uper-element7.31 µs7.28 µs .. 7.35 µsper elem
rateless encode and decode, per differencebinary-w.127/d=10,h2c=pornin-addendgf2_127-wper-element1.97 µs1.97 µs .. 1.98 µsper elem
rateless encode and decode, per differencebinary-w.127/d=1000,h2c=pornin-addendgf2_127-wper-element3.90 µs3.89 µs .. 3.92 µsper elem
rateless encode and decode, per differencebinary-w.127/d=100000,h2c=pornin-addendgf2_127-wper-element9.38 µs9.33 µs .. 9.42 µsper elem
rateless encode and decode, per differenceedwards.107/d=1000,h2c=tiedwards107per-element7.08 µs7.06 µs .. 7.10 µsper elem
rateless encode and decode, per differenceedwards.127/d=1000,h2c=tiedwards127per-element8.34 µs8.29 µs .. 8.39 µsper elem
rateless encode and decode, per differenceedwards.61x2/d=1000,h2c=tiedwards61x2per-element5.46 µs5.45 µs .. 5.48 µsper elem
rateless encode and decode, per differencetwisted.goldilocks2/d=1000,h2c=titwisted-goldilocks2per-element9.02 µs8.98 µs .. 9.06 µsper elem
rateless encode and decode, per differencetwisted.128/d=1000,h2c=titwisted128per-element9.97 µs9.93 µs .. 10.0 µsper elem
rateless encode and decode, per differencetwisted.61x2/d=1000,h2c=titwisted61x2per-element4.70 µs4.69 µs .. 4.72 µsper elem
rateless encode and decode, per differencetwisted.64x2/d=1000,h2c=titwisted64x2per-element6.53 µs6.51 µs .. 6.56 µsper elem
rateless encode and decode, per differenceweier.107/d=1000,h2c=tiweier107per-element5.99 µs5.98 µs .. 6.01 µsper elem
rateless encode and decode, per differenceweier-jacobian.107/d=1000,h2c=tiweier107-jacobianper-element5.80 µs5.77 µs .. 5.83 µsper elem
rateless encode and decode, per differenceweier.127/d=1000,h2c=tiweier127per-element7.70 µs7.68 µs .. 7.73 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=1000,h2c=tiweier127-jacobianper-element7.12 µs7.08 µs .. 7.15 µsper elem
rateless encode and decode, per differenceweier.61x2/d=1000,h2c=tiweier61x2per-element5.32 µs5.26 µs .. 5.37 µsper elem
rateless encode and decode, per differenceweier-jacobian.61x2/d=1000,h2c=tiweier61x2-jacobianper-element5.52 µs5.50 µs .. 5.54 µsper elem
rateless encode and decode, per differenceristretto255/d=10ristretto255per-element14.1 µs14.0 µs .. 14.2 µsper elem
rateless encode and decode, per differenceristretto255/d=10,map=mcg64ristretto255per-element14.2 µs14.1 µs .. 14.4 µsper elem
rateless encode and decode, per differenceristretto255/d=100ristretto255per-element18.8 µs18.8 µs .. 18.9 µsper elem
rateless encode and decode, per differenceristretto255/d=100,map=mcg64ristretto255per-element18.6 µs18.5 µs .. 18.7 µsper elem
rateless encode and decode, per differenceristretto255/d=1000ristretto255per-element21.7 µs21.5 µs .. 21.8 µsper elem
rateless encode and decode, per differenceristretto255/d=1000,map=mcg64ristretto255per-element21.7 µs21.6 µs .. 21.7 µsper elem
rateless encode and decode, per differenceristretto255/d=10000ristretto255per-element25.2 µs25.1 µs .. 25.3 µsper elem
rateless encode and decode, per differenceristretto255/d=10000,map=chacha8ristretto255per-element26.3 µs26.3 µs .. 26.4 µsper elem
rateless encode and decode, per differenceristretto255/d=10000,map=mcg64ristretto255per-element25.0 µs24.8 µs .. 25.1 µsper elem
rateless encode and decode, per differenceristretto255/d=100000ristretto255per-element34.9 µs34.8 µs .. 35.0 µsper elem
rateless encode and decode, per differenceristretto255/d=100000,map=chacha8ristretto255per-element42.1 µs41.9 µs .. 42.3 µsper elem
rateless encode and decode, per differenceristretto255/d=100000,map=mcg64ristretto255per-element33.5 µs33.4 µs .. 33.6 µsper elem
rateless encode and decode, per differenceristretto255/d=20ristretto255per-element15.7 µs15.6 µs .. 15.9 µsper elem
rateless encode and decode, per differenceristretto255/d=20,map=mcg64ristretto255per-element15.8 µs15.7 µs .. 15.9 µsper elem
rateless encode and decode, per differenceristretto255/d=40ristretto255per-element17.3 µs17.3 µs .. 17.4 µsper elem
rateless encode and decode, per differenceristretto255/d=40,map=mcg64ristretto255per-element17.3 µs17.2 µs .. 17.3 µsper elem
rateless encode and decode, per differenceristretto255/d=50000ristretto255per-element31.1 µs31.0 µs .. 31.2 µsper elem
rateless encode and decode, per differenceristretto255/d=50000,map=mcg64ristretto255per-element30.2 µs30.1 µs .. 30.3 µsper elem
mapping, per indexchacha8/nextmappingper-element10.5 ns10.4 ns .. 10.5 nsper elem
mapping, per indexmcg64/nextmappingper-element5.68 ns5.66 ns .. 5.69 nsper elem
mapping, per indexsha256-ctr/nextmappingper-element8.47 ns8.45 ns .. 8.49 nsper elem
mapping, per indexxoshiro256pp/nextmappingper-element5.66 ns5.65 ns .. 5.67 nsper elem
mapping, per itemchacha8/item,m=12150mappingper-element289 ns288 ns .. 290 nsper elem
mapping, per itemchacha8/item,m=1350mappingper-element252 ns252 ns .. 253 nsper elem
mapping, per itemchacha8/item,m=150mappingper-element216 ns216 ns .. 217 nsper elem
mapping, per itemchacha8/item,m=20mappingper-element184 ns183 ns .. 184 nsper elem
mapping, per itemchacha8/item,m=5mappingper-element162 ns161 ns .. 162 nsper elem
mapping, per itemmcg64/item,m=12150mappingper-element43.5 ns43.3 ns .. 43.8 nsper elem
mapping, per itemmcg64/item,m=1350mappingper-element25.0 ns24.8 ns .. 25.1 nsper elem
mapping, per itemmcg64/item,m=150mappingper-element13.5 ns13.4 ns .. 13.6 nsper elem
mapping, per itemmcg64/item,m=20mappingper-element6.91 ns6.89 ns .. 6.93 nsper elem
mapping, per itemmcg64/item,m=5mappingper-element3.57 ns3.56 ns .. 3.58 nsper elem
mapping, per itemsha256-ctr/item,m=12150mappingper-element198 ns198 ns .. 199 nsper elem
mapping, per itemsha256-ctr/item,m=1350mappingper-element157 ns156 ns .. 158 nsper elem
mapping, per itemsha256-ctr/item,m=150mappingper-element119 ns119 ns .. 120 nsper elem
mapping, per itemsha256-ctr/item,m=20mappingper-element66.4 ns66.2 ns .. 66.6 nsper elem
mapping, per itemsha256-ctr/item,m=5mappingper-element34.9 ns34.8 ns .. 35.0 nsper elem
mapping, per itemxoshiro256pp/item,m=12150mappingper-element55.5 ns55.2 ns .. 55.7 nsper elem
mapping, per itemxoshiro256pp/item,m=1350mappingper-element34.2 ns34.0 ns .. 34.4 nsper elem
mapping, per itemxoshiro256pp/item,m=150mappingper-element19.8 ns19.8 ns .. 19.9 nsper elem
mapping, per itemxoshiro256pp/item,m=20mappingper-element10.0 ns9.96 ns .. 10.1 nsper elem
mapping, per itemxoshiro256pp/item,m=5mappingper-element4.85 ns4.82 ns .. 4.88 nsper elem
map digest of an IDprojection-fp127/digest of idmappingper-element9.61 ns9.59 ns .. 9.62 nsper elem
map digest of an IDprojection-fp130/digest of idmappingper-element16.5 ns16.3 ns .. 16.7 nsper elem
map digest of an IDprojection-gf2_127/digest of idmappingper-element5.11 ns5.10 ns .. 5.12 nsper elem
map digest of an IDsalted-sha256/digest of idmappingper-element33.0 ns32.9 ns .. 33.2 nsper elem
per-salt keysprojection-fp127/keysmappingper-element266 ns266 ns .. 267 nsper elem
per-salt keysprojection-fp130/keysmappingper-element321 ns320 ns .. 321 nsper elem
per-salt keysprojection-gf2_127/keysmappingper-element257 ns257 ns .. 258 nsper elem
per-salt keyssalted-sha256/keysmappingper-element74.7 ns74.4 ns .. 75.0 nsper elem
item IDsha256/idxorper-element33.1 ns33.0 ns .. 33.1 nsper elem
map digestsalted-sha256/digestmappingper-element34.6 ns33.8 ns .. 35.3 nsper elem

digest

Figure

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

11 benchmarks
operationbenchmarkfamilymodetime95% CIunit
digestxor-sha256xorper-element25.7 ns25.6 ns .. 25.9 nsper elem
digestgf2_109/batchgf2_109batch93.0 ns92.9 ns .. 93.1 nsper elem
digestgf2_122/batchgf2_122batch90.8 ns88.8 ns .. 93.0 nsper elem
digestgf2_122-gls/batchgf2_122-glsbatch90.3 ns90.3 ns .. 90.4 nsper elem
digestgf2_127/batchgf2_127batch88.5 ns88.5 ns .. 88.6 nsper elem
digestedwards107/batchedwards107batch785 ns784 ns .. 786 nsper elem
digestedwards127/batchedwards127batch1.08 µs1.08 µs .. 1.08 µsper elem
digestweier107/batchweier107batch775 ns775 ns .. 776 nsper elem
digestweier127/batchweier127batch1.05 µs1.04 µs .. 1.05 µsper elem
digestristretto255/streamingristretto255streaming4.81 µs4.81 µs .. 4.82 µsper elem
digestsecp256k1/try-and-increment + combine_keyssecp256k1batch4.59 µs4.59 µs .. 4.60 µsper elem

curve generation

Figure

Curve generation: a dot per seed for each family, a panel per stage, on log scales.Curve generation: a dot per seed for each family, a panel per stage, on log scales.

85 benchmarks
operationbenchmarkfamilymodetime95% CIunit
accept certificategf2_109/0gf2_109total55.2 µs54.7 µs .. 55.4 µsper iter
accept certificategf2_122/0gf2_122total55.2 µs54.8 µs .. 55.4 µsper iter
accept certificategf2_122-gls/0gf2_122-glstotal58.6 µs58.1 µs .. 58.9 µsper iter
accept certificategf2_127/0gf2_127total56.1 µs55.9 µs .. 56.2 µsper iter
accept certificateedwards107/0edwards107total57.6 µs57.2 µs .. 58.0 µsper iter
accept certificateedwards127/0edwards127total61.0 µs60.7 µs .. 61.2 µsper iter
accept certificateedwards61x2/0edwards61x2total61.2 µs60.7 µs .. 61.5 µsper iter
accept certificatetwisted-goldilocks2/0twisted-goldilocks2total59.9 µs59.4 µs .. 60.4 µsper iter
accept certificatetwisted128/0twisted128total63.9 µs63.6 µs .. 64.0 µsper iter
accept certificatetwisted61x2/0twisted61x2total60.3 µs59.9 µs .. 60.5 µsper iter
accept certificatetwisted64x2/0twisted64x2total64.3 µs63.7 µs .. 64.7 µsper iter
accept certificateweier107/0weier107total59.7 µs59.4 µs .. 59.8 µsper iter
accept certificateweier127/0weier127total67.6 µs67.2 µs .. 67.9 µsper iter
accept certificateweier61x2/0weier61x2total63.1 µs62.6 µs .. 63.7 µsper iter
verify certificategf2_109/198 rejections/0gf2_109total190 µs188 µs .. 192 µsper iter
verify certificategf2_122/4 rejections/0gf2_122total57.1 µs56.8 µs .. 57.5 µsper iter
verify certificategf2_122-gls/60 rejections/0gf2_122-glstotal114 µs113 µs .. 115 µsper iter
verify certificategf2_127/30 rejections/0gf2_127total75.3 µs74.9 µs .. 75.8 µsper iter
verify certificateedwards107/28 rejections/0edwards107total142 µs142 µs .. 143 µsper iter
verify certificateedwards127/56 rejections/0edwards127total256 µs254 µs .. 258 µsper iter
verify certificateedwards61x2/118 rejections/0edwards61x2total318 µs316 µs .. 320 µsper iter
verify certificatetwisted-goldilocks2/32 rejections/0twisted-goldilocks2total144 µs143 µs .. 144 µsper iter
verify certificatetwisted128/4 rejections/0twisted128total73.6 µs73.4 µs .. 73.9 µsper iter
verify certificatetwisted61x2/344 rejections/0twisted61x2total589 µs584 µs .. 593 µsper iter
verify certificatetwisted64x2/36 rejections/0twisted64x2total160 µs159 µs .. 161 µsper iter
verify certificateweier107/519 rejections/0weier107total384 µs382 µs .. 385 µsper iter
verify certificateweier127/125 rejections/0weier127total159 µs158 µs .. 160 µsper iter
verify certificateweier61x2/123 rejections/0weier61x2total146 µs145 µs .. 147 µsper iter
embedding-degree boundgf2_109/0gf2_109total30.3 µs30.2 µs .. 30.4 µsper iter
embedding-degree boundgf2_122/0gf2_122total30.3 µs30.1 µs .. 30.5 µsper iter
embedding-degree boundgf2_122-gls/0gf2_122-glstotal30.7 µs30.7 µs .. 30.8 µsper iter
embedding-degree boundgf2_127/0gf2_127total30.5 µs30.4 µs .. 30.6 µsper iter
embedding-degree boundedwards107/0edwards107total30.3 µs30.2 µs .. 30.4 µsper iter
embedding-degree boundedwards127/0edwards127total30.6 µs30.5 µs .. 30.7 µsper iter
embedding-degree boundedwards61x2/0edwards61x2total30.1 µs29.8 µs .. 30.5 µsper iter
embedding-degree boundtwisted-goldilocks2/0twisted-goldilocks2total30.1 µs30.0 µs .. 30.2 µsper iter
embedding-degree boundtwisted128/0twisted128total30.4 µs30.2 µs .. 30.6 µsper iter
embedding-degree boundtwisted61x2/0twisted61x2total29.6 µs29.5 µs .. 29.7 µsper iter
embedding-degree boundtwisted64x2/0twisted64x2total30.4 µs30.3 µs .. 30.4 µsper iter
embedding-degree boundweier107/0weier107total30.6 µs30.4 µs .. 30.7 µsper iter
embedding-degree boundweier127/0weier127total30.3 µs30.2 µs .. 30.4 µsper iter
embedding-degree boundweier61x2/0weier61x2total30.5 µs30.3 µs .. 30.7 µsper iter
find (Rust: AGM + sieve)gf2_127 agm+sieve/index 114/1gf2_127total23.6 ms23.5 ms .. 23.7 msper iter
find (Rust: AGM + sieve)gf2_127 agm+sieve/index 14/3gf2_127total2.38 ms2.37 ms .. 2.39 msper iter
find (Rust: AGM + sieve)gf2_127 agm+sieve/index 30/0gf2_127total4.71 ms4.68 ms .. 4.75 msper iter
find (Rust: AGM + sieve)gf2_127 agm+sieve/index 54/2gf2_127total11.7 ms11.6 ms .. 11.7 msper iter
certify (Rust: AGM + sieve + order witnesses)gf2_127 agm+sieve/index 114/1gf2_127total23.8 ms23.6 ms .. 23.9 msper iter
certify (Rust: AGM + sieve + order witnesses)gf2_127 agm+sieve/index 14/3gf2_127total2.45 ms2.44 ms .. 2.46 msper iter
certify (Rust: AGM + sieve + order witnesses)gf2_127 agm+sieve/index 30/0gf2_127total4.77 ms4.74 ms .. 4.81 msper iter
certify (Rust: AGM + sieve + order witnesses)gf2_127 agm+sieve/index 54/2gf2_127total11.7 ms11.7 ms .. 11.8 msper iter
point count (PARI)gf2_127gf2_127total2.10 ms2.08 ms .. 2.11 msper iter
point count (PARI)edwards127edwards127total53.8 ms53.7 ms .. 53.9 msper iter
point count (PARI)edwards61x2edwards61x2total40.3 ms40.1 ms .. 40.5 msper iter
point count (PARI)twisted-goldilocks2twisted-goldilocks2total49.3 ms49.1 ms .. 49.4 msper iter
point count (PARI)twisted61x2twisted61x2total44.7 ms44.6 ms .. 44.8 msper iter
point count (PARI)twisted64x2twisted64x2total51.3 ms51.2 ms .. 51.4 msper iter
point count (PARI)weier127weier127total62.0 ms61.8 ms .. 62.2 msper iter
point count (PARI)weier61x2weier61x2total39.5 ms39.3 ms .. 39.6 msper iter
point count (Rust AGM)ordergf2_127total446 µs445 µs .. 447 µsper iter
AGM stepstablesgf2_127total1.63 ms1.63 ms .. 1.64 msper iter
AGM stepstracegf2_127total425 µs424 µs .. 425 µsper iter
Z_q ring opmulgf2_127total2.25 µs2.24 µs .. 2.25 µsper iter
Z_q ring opsigmagf2_127total2.58 µs2.56 µs .. 2.61 µsper iter
Z_q ring opsigma_invgf2_127total2.60 µs2.58 µs .. 2.62 µsper iter
Z_q ring opsquaregf2_127total1.36 µs1.35 µs .. 1.36 µsper iter
sieve, one lgf2_127/11gf2_127total272 µs271 µs .. 273 µsper iter
sieve, one lgf2_127/13gf2_127total519 µs518 µs .. 520 µsper iter
sieve, one lgf2_127/3gf2_127total4.11 µs4.10 µs .. 4.12 µsper iter
sieve, one lgf2_127/5gf2_127total14.5 µs14.5 µs .. 14.5 µsper iter
sieve, one lgf2_127/7gf2_127total47.4 µs47.3 µs .. 47.6 µsper iter
sieve, one ledwards127/11edwards127total1.84 ms1.83 ms .. 1.84 msper iter
sieve, one ledwards127/13edwards127total3.58 ms3.57 ms .. 3.58 msper iter
sieve, one ledwards127/3edwards127total12.7 µs12.7 µs .. 12.7 µsper iter
sieve, one ledwards127/5edwards127total83.9 µs83.7 µs .. 84.1 µsper iter
sieve, one ledwards127/7edwards127total310 µs309 µs .. 310 µsper iter
sieve, one ledwards127/8edwards127total1.03 µs1.03 µs .. 1.03 µsper iter
sieve, one lweier127/11weier127total1.84 ms1.83 ms .. 1.84 msper iter
sieve, one lweier127/13weier127total3.57 ms3.56 ms .. 3.57 msper iter
sieve, one lweier127/2weier127total8.40 µs8.39 µs .. 8.42 µsper iter
sieve, one lweier127/3weier127total12.6 µs12.6 µs .. 12.6 µsper iter
sieve, one lweier127/5weier127total83.9 µs83.7 µs .. 84.0 µsper iter
sieve, one lweier127/7weier127total310 µs309 µs .. 310 µsper iter
sieve, per candidategf2_127/7gf2_127per-element38.7 µs38.6 µs .. 38.7 µsper elem
sieve, per candidateedwards127/13edwards127per-element1.26 ms1.26 ms .. 1.27 msper elem
sieve, per candidateweier127/13weier127per-element786 µs784 µs .. 787 µ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
xorone at a timesha256 (XOR baseline)24.2 nsxor-sha256/xor 32B, 1 accumulator0.38 ns25.3 ns26.2 ns27.6 ns29.3 ns30.9 ns
gf2_109one at a timegf2_109/pornin map x1560 nsbinary.109/mode=throughput12.8 ns598 ns628 ns678 ns735 ns791 ns
gf2_109batchedgf2_109/pornin map x1, batched63.7 nsbinary.109/mode=throughput12.8 ns101 ns132 ns182 ns238 ns295 ns
gf2_109-lambdaone at a timegf2_109-lambda/pornin map x1 to (x, λ)550 nsbinary-lambda.109/mode=throughput12.0 ns585 ns614 ns660 ns713 ns765 ns
gf2_109-lambdabatchedgf2_109-lambda/pornin map x1 to (x, λ), batched55.2 nsbinary-lambda.109/mode=throughput12.0 ns90.0 ns119 ns165 ns218 ns271 ns
gf2_109-uone at a timegf2_109-u/pornin map x1 to (u, v)533 nsbinary-u.109/mode=throughput9.76 ns561 ns584 ns622 ns665 ns708 ns
gf2_109-ubatchedgf2_109-u/pornin map x1 to (u, v), batched60.7 nsbinary-u.109/mode=throughput9.76 ns89.0 ns112 ns150 ns193 ns236 ns
gf2_109-wone at a timegf2_109-w/pornin map x1 to (x, λ)535 nsbinary-w.109/mode=throughput12.0 ns569 ns598 ns645 ns697 ns750 ns
gf2_109-wbatchedgf2_109-w/pornin map x1 to (x, λ), batched54.5 nsbinary-w.109/mode=throughput12.0 ns89.2 ns118 ns165 ns217 ns270 ns
gf2_122one at a timegf2_122/pornin map x1373 nsbinary.122/mode=throughput17.8 ns425 ns467 ns537 ns615 ns693 ns
gf2_122batchedgf2_122/pornin map x1, batched62.8 nsbinary.122/mode=throughput17.8 ns115 ns157 ns227 ns305 ns383 ns
gf2_122-glsone at a timegf2_122-gls/pornin map x1369 nsbinary.122-gls/mode=throughput16.8 ns417 ns457 ns523 ns596 ns670 ns
gf2_122-glsbatchedgf2_122-gls/pornin map x1, batched62.0 nsbinary.122-gls/mode=throughput16.8 ns111 ns151 ns216 ns290 ns363 ns
gf2_122-gls-lambdaone at a timegf2_122-gls-lambda/pornin map x1 to (x, λ)315 nsbinary-lambda.122-gls/mode=throughput16.6 ns363 ns403 ns467 ns540 ns612 ns
gf2_122-gls-lambdabatchedgf2_122-gls-lambda/pornin map x1 to (x, λ), batched55.4 nsbinary-lambda.122-gls/mode=throughput16.6 ns103 ns143 ns208 ns280 ns353 ns
gf2_122-gls-uone at a timegf2_122-gls-u/pornin map x1 to (u, v)319 nsbinary-u.122-gls/mode=throughput13.1 ns357 ns388 ns439 ns497 ns554 ns
gf2_122-gls-ubatchedgf2_122-gls-u/pornin map x1 to (u, v), batched55.7 nsbinary-u.122-gls/mode=throughput13.1 ns93.7 ns125 ns176 ns233 ns291 ns
gf2_122-gls-wone at a timegf2_122-gls-w/pornin map x1 to (x, λ)316 nsbinary-w.122-gls/mode=throughput16.6 ns364 ns403 ns468 ns540 ns613 ns
gf2_122-gls-wbatchedgf2_122-gls-w/pornin map x1 to (x, λ), batched55.4 nsbinary-w.122-gls/mode=throughput16.6 ns103 ns143 ns208 ns280 ns353 ns
gf2_122-lambdaone at a timegf2_122-lambda/pornin map x1 to (x, λ)326 nsbinary-lambda.122/mode=throughput16.6 ns374 ns414 ns479 ns551 ns624 ns
gf2_122-lambdabatchedgf2_122-lambda/pornin map x1 to (x, λ), batched53.9 nsbinary-lambda.122/mode=throughput16.6 ns102 ns142 ns206 ns279 ns351 ns
gf2_122-uone at a timegf2_122-u/pornin map x1 to (u, v)326 nsbinary-u.122/mode=throughput13.1 ns364 ns395 ns446 ns503 ns561 ns
gf2_122-ubatchedgf2_122-u/pornin map x1 to (u, v), batched57.1 nsbinary-u.122/mode=throughput13.1 ns95.0 ns126 ns177 ns234 ns292 ns
gf2_122-wone at a timegf2_122-w/pornin map x1 to (x, λ)326 nsbinary-w.122/mode=throughput16.6 ns374 ns414 ns479 ns551 ns624 ns
gf2_122-wbatchedgf2_122-w/pornin map x1 to (x, λ), batched54.0 nsbinary-w.122/mode=throughput16.6 ns102 ns142 ns206 ns279 ns352 ns
gf2_127one at a timegf2_127/pornin map x1485 nsbinary.127/mode=throughput14.1 ns526 ns560 ns615 ns676 ns738 ns
gf2_127batchedgf2_127/pornin map x1, batched61.5 nsbinary.127/mode=throughput14.1 ns102 ns136 ns191 ns252 ns314 ns
gf2_127-lambdaone at a timegf2_127-lambda/pornin map x1 to (x, λ)456 nsbinary-lambda.127/mode=throughput14.9 ns499 ns535 ns593 ns658 ns724 ns
gf2_127-lambdabatchedgf2_127-lambda/pornin map x1 to (x, λ), batched53.5 nsbinary-lambda.127/mode=throughput14.9 ns96.8 ns132 ns191 ns256 ns322 ns
gf2_127-uone at a timegf2_127-u/pornin map x1 to (u, v)461 nsbinary-u.127/mode=throughput10.7 ns491 ns517 ns559 ns605 ns652 ns
gf2_127-ubatchedgf2_127-u/pornin map x1 to (u, v), batched57.2 nsbinary-u.127/mode=throughput10.7 ns88.1 ns114 ns155 ns202 ns249 ns
gf2_127-wone at a timegf2_127-w/pornin map x1 to (x, λ)455 nsbinary-w.127/mode=throughput14.9 ns498 ns534 ns592 ns657 ns722 ns
gf2_127-wbatchedgf2_127-w/pornin map x1 to (x, λ), batched53.5 nsbinary-w.127/mode=throughput14.9 ns96.7 ns132 ns190 ns256 ns321 ns
edwards107one at a timeedwards.107/mode=indep806 nsedwards.107/mode=throughput15.5 ns851 ns888 ns948 ns1.02 µs1.08 µs
edwards107batchededwards.107/mode=batch,n=1024805 nsedwards.107/mode=throughput15.5 ns850 ns887 ns947 ns1.02 µs1.08 µs
edwards127one at a timeedwards.127/mode=indep1.07 µsedwards.127/mode=throughput20.1 ns1.13 µs1.17 µs1.25 µs1.34 µs1.43 µs
edwards127batchededwards.127/mode=batch,n=10241.07 µsedwards.127/mode=throughput20.1 ns1.13 µs1.18 µs1.25 µs1.34 µs1.43 µs
edwards61x2one at a timeedwards.61x2/mode=indep624 nsedwards.61x2/mode=throughput13.3 ns663 ns695 ns747 ns805 ns864 ns
edwards61x2batchededwards.61x2/mode=batch,n=1024620 nsedwards.61x2/mode=throughput13.3 ns659 ns691 ns743 ns801 ns860 ns
twisted-goldilocks2one at a timetwisted.goldilocks2/mode=indep1.73 µstwisted.goldilocks2/mode=throughput15.0 ns1.77 µs1.81 µs1.87 µs1.93 µs2.00 µs
twisted-goldilocks2batchedtwisted.goldilocks2/mode=batch,n=10241.75 µstwisted.goldilocks2/mode=throughput15.0 ns1.79 µs1.83 µs1.89 µs1.95 µs2.02 µs
twisted128one at a timetwisted.128/mode=indep1.92 µstwisted.128/mode=throughput23.9 ns1.99 µs2.05 µs2.14 µs2.25 µs2.35 µs
twisted128batchedtwisted.128/mode=batch,n=10241.92 µstwisted.128/mode=throughput23.9 ns1.99 µs2.05 µs2.14 µs2.25 µs2.35 µs
twisted61x2one at a timetwisted.61x2/mode=indep630 nstwisted.61x2/mode=throughput12.5 ns666 ns696 ns745 ns799 ns854 ns
twisted61x2batchedtwisted.61x2/mode=batch,n=1024632 nstwisted.61x2/mode=throughput12.5 ns668 ns698 ns747 ns801 ns856 ns
twisted64x2one at a timetwisted.64x2/mode=indep1.10 µstwisted.64x2/mode=throughput17.2 ns1.15 µs1.19 µs1.26 µs1.33 µs1.41 µs
twisted64x2batchedtwisted.64x2/mode=batch,n=10241.10 µstwisted.64x2/mode=throughput17.2 ns1.15 µs1.19 µs1.26 µs1.33 µs1.41 µs
weier107one at a timeweier.107/mode=indep746 nsweier.107/mode=throughput30.5 ns834 ns907 ns1.03 µs1.16 µs1.29 µs
weier107batchedweier.107/mode=batch,n=1024748 nsweier.107/mode=throughput30.5 ns837 ns909 ns1.03 µs1.16 µs1.30 µs
weier107-jacobianone at a timeweier-jacobian.107/mode=indep742 nsweier-jacobian.107/mode=throughput28.7 ns826 ns894 ns1.01 µs1.13 µs1.26 µs
weier107-jacobianbatchedweier-jacobian.107/mode=batch,n=1024745 nsweier-jacobian.107/mode=throughput28.7 ns828 ns897 ns1.01 µs1.13 µs1.26 µs
weier127one at a timeweier.127/mode=indep1.03 µsweier.127/mode=throughput45.4 ns1.16 µs1.27 µs1.44 µs1.64 µs1.84 µs
weier127batchedweier.127/mode=batch,n=10241.04 µsweier.127/mode=throughput45.4 ns1.17 µs1.28 µs1.45 µs1.65 µs1.85 µs
weier127-jacobianone at a timeweier-jacobian.127/mode=indep1.03 µsweier-jacobian.127/mode=throughput37.5 ns1.14 µs1.23 µs1.38 µs1.54 µs1.71 µs
weier127-jacobianbatchedweier-jacobian.127/mode=batch,n=10241.04 µsweier-jacobian.127/mode=throughput37.5 ns1.15 µs1.24 µs1.38 µs1.55 µs1.71 µs
weier61x2one at a timeweier.61x2/mode=indep637 nsweier.61x2/mode=throughput26.8 ns715 ns779 ns883 ns1.00 µs1.12 µs
weier61x2batchedweier.61x2/mode=batch,n=1024637 nsweier.61x2/mode=throughput26.8 ns714 ns778 ns883 ns1000 ns1.12 µs
weier61x2-jacobianone at a timeweier-jacobian.61x2/mode=indep638 nsweier-jacobian.61x2/mode=throughput31.6 ns730 ns806 ns929 ns1.07 µs1.21 µs
weier61x2-jacobianbatchedweier-jacobian.61x2/mode=batch,n=1024638 nsweier-jacobian.61x2/mode=throughput31.6 ns729 ns805 ns929 ns1.07 µs1.21 µs
ristretto255one at a timeristretto255/hash_from_bytes<Sha512>4.72 µsristretto255/+=, 1 accumulator63.8 ns4.90 µs5.05 µs5.30 µs5.58 µs5.86 µs

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

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

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

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

1623 benchmarks from run Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · 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 89 to 99% of each rebuilt estimate.

curvesecurityper cellper new itemper party and roundcurve selectiondominated by
rhoaddencodedecodehash + preparesums retained, sums rebuilt, , findverifymeasured methodavailable tools
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas; Pornin x1: hash to addend; output already an addend62.819.5 ns (1.48× the best)22.7 ns (1.81× the best)25.7 ns (1.23× the best)103 ns (1.11× the best)368 ns (1.33× the best)26.7 ms (1.48× the best)16.0 ms170 µsagm+sieveRust (AGM), PARIgf2_127-lambda, gf2_127-w
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators; Pornin x1: hash to addend; output already an addend62.817.6 ns (1.34× the best)17.5 ns (1.39× the best)24.0 ns (1.15× the best)92.7 ns (tied for the best, within noise)332 ns (1.20× the best)24.1 ms (1.33× the best)16.0 ms170 µsagm+sieveRust (AGM), PARInone
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine; Pornin x1: hash to addend; output already an addend62.817.7 ns (1.34× the best)17.0 ns (1.35× the best)22.6 ns (1.08× the best)92.8 ns (tied for the best, within noise, 1.00×)333 ns (1.20× the best)24.2 ms (1.34× the best)16.0 ms170 µsagm+sieveRust (AGM), PARInone
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes; Pornin x1: hash to addend; output already an addend62.813.2 ns (best)12.6 ns (best)27.5 ns (1.32× the best)98.0 ns (1.06× the best)277 ns (best)18.1 ms (best)16.0 ms170 µsagm+sieveRust (AGM), PARInone
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended; Pornin x1: hash to addend; output already an addend60.319.9 ns (1.51× the best)22.1 ns (1.76× the best)24.0 ns (1.15× the best)103 ns (1.11× the best)373 ns (1.35× the best)27.2 ms (1.51× the best)18.1 ms126 µsagmRust (AGM), PARIgf2_127-w
gf2_122-lambdaincompleteλ-projective; Pornin x1: hash to addend; output already an addend60.320.2 ns (1.53× the best)17.3 ns (1.37× the best)24.1 ns (1.15× the best)95.0 ns (1.02× the best)370 ns (1.33× the best)27.6 ms (1.53× the best)18.1 ms126 µsagmRust (AGM), PARIgf2_127-w
gf2_122-wincompleteλ-projective, w codec; Pornin x1: hash to addend; output already an addend60.320.5 ns (1.55× the best)21.2 ns (1.69× the best)21.6 ns (1.03× the best)95.2 ns (1.03× the best)374 ns (1.35× the best)28.0 ms (1.55× the best)18.1 ms126 µsagmRust (AGM), PARInone
gf2_122-uunscaled (X:S:Z), w codec; Pornin x1: hash to addend; output already an addend60.314.3 ns (1.08× the best)18.4 ns (1.47× the best)26.0 ns (1.24× the best)99.3 ns (1.07× the best)294 ns (1.06× the best)19.6 ms (1.08× the best)18.1 ms126 µsagmRust (AGM), PARInone
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended; Pornin x1: hash to addend; output already an addend59.819.3 ns (1.46× the best)21.1 ns (1.68× the best)22.7 ns (1.08× the best)101 ns (1.09× the best)363 ns (1.31× the best)26.4 ms (1.46× the best)5.75 ms152 µsagmRust (AGM), PARInone
gf2_122-gls-lambdaincompleteλ-projective; Pornin x1: hash to addend; output already an addend59.820.3 ns (1.53× the best)17.9 ns (1.42× the best)22.6 ns (1.08× the best)95.0 ns (1.03× the best)370 ns (1.33× the best)27.6 ms (1.53× the best)5.75 ms152 µsagmRust (AGM), PARInone
gf2_122-gls-wincompleteλ-projective, w codec; Pornin x1: hash to addend; output already an addend59.820.3 ns (1.54× the best)20.4 ns (1.62× the best)20.9 ns (best)94.6 ns (1.02× the best)370 ns (1.34× the best)27.7 ms (1.53× the best)5.75 ms152 µsagmRust (AGM), PARInone
gf2_122-gls-uunscaled (X:S:Z), w codec; Pornin x1: hash to addend; output already an addend59.813.7 ns (1.04× the best)18.0 ns (1.44× the best)24.7 ns (1.18× the best)97.6 ns (1.05× the best)284 ns (1.02× the best)18.8 ms (1.04× the best)5.75 ms152 µsagmRust (AGM), PARInone
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended; Pornin x1: hash to addend; output already an addend53.820.4 ns (1.54× the best)18.2 ns (1.45× the best)26.7 ns (1.28× the best)114 ns (1.23× the best)390 ns (1.41× the best)27.8 ms (1.54× the best)20.7 ms135 µsagm+factorRust (AGM), PARIgf2_109-lambda, gf2_122-gls-lambda, gf2_122-lambda, gf2_127-lambda, gf2_127-w
gf2_109-lambdaincompleteλ-projective; Pornin x1: hash to addend; output already an addend53.818.9 ns (1.43× the best)14.1 ns (1.12× the best)26.5 ns (1.27× the best)105 ns (1.13× the best)361 ns (1.30× the best)25.8 ms (1.43× the best)20.7 ms135 µsagm+factorRust (AGM), PARInone
gf2_109-wincompleteλ-projective, w codec; Pornin x1: hash to addend; output already an addend53.818.9 ns (1.43× the best)21.6 ns (1.72× the best)24.4 ns (1.17× the best)104 ns (1.12× the best)361 ns (1.30× the best)25.9 ms (1.43× the best)20.7 ms135 µsagm+factorRust (AGM), PARIgf2_127-lambda, gf2_127-w
gf2_109-uunscaled (X:S:Z), w codec; Pornin x1: hash to addend; output already an addend53.813.5 ns (1.02× the best)21.9 ns (1.74× the best)27.7 ns (1.33× the best)110 ns (1.18× the best)293 ns (1.06× the best)18.5 ms (1.02× the best)20.7 ms135 µsagm+factorRust (AGM), PARIgf2_127-u
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached62.327.5 ns (2.08× the best)31.9 ns (2.54× the best)541 ns (25.90× the best)1.28 µs (13.78× the best)1.65 µs (5.95× the best)39.4 ms (2.18× the best)1.08 s504 µspari+sievePARIgf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
weier127short Weierstrass, projective += affine63.358.7 ns (4.45× the best)16.7 ns (1.33× the best)539 ns (25.81× the best)1.17 µs (12.59× the best)1.96 µs (7.08× the best)81.6 ms (4.51× the best)1.27 s278 µspari+sievePARInone
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine63.348.1 ns (3.64× the best)23.6 ns (1.88× the best)542 ns (25.93× the best)1.16 µs (12.50× the best)1.81 µs (6.54× the best)67.2 ms (3.72× the best)1.27 s278 µspari+sievePARInone
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached52.327.6 ns (2.09× the best)35.1 ns (2.80× the best)426 ns (20.37× the best)954 ns (10.30× the best)1.33 µs (4.79× the best)39.0 ms (2.16× the best)Sagegf2_109, gf2_109-lambda, gf2_109-u, gf2_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
weier107short Weierstrass, projective += affine53.348.6 ns (3.68× the best)19.4 ns (1.54× the best)422 ns (20.19× the best)902 ns (9.73× the best)1.56 µs (5.63× the best)67.4 ms (3.73× the best)Sagegf2_109, gf2_109-lambda, gf2_122-gls-lambda, gf2_122-gls-u, gf2_122-lambda, gf2_122-u, gf2_127-lambda, gf2_127-u, gf2_127-w
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine53.344.1 ns (3.34× the best)25.5 ns (2.03× the best)421 ns (20.13× the best)894 ns (9.64× the best)1.49 µs (5.39× the best)61.4 ms (3.40× the best)Sagegf2_109, gf2_109-lambda, gf2_109-u, gf2_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
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached62.831.1 ns (2.35× the best)22.7 ns (1.81× the best)962 ns (46.04× the best)1.97 µs (21.28× the best)2.39 µs (8.64× the best)45.5 ms (2.52× the best)Sagegf2_127-lambda, gf2_127-u, gf2_127-w
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached59.825.8 ns (1.95× the best)35.0 ns (2.79× the best)441 ns (21.08× the best)741 ns (7.99× the best)1.09 µs (3.94× the best)36.4 ms (2.01× the best)577 ms257 µspari+sievePARIgf2_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
weier61x2short Weierstrass, signed-x codec, projective += affine60.850.6 ns (3.83× the best)15.3 ns (1.22× the best)448 ns (21.43× the best)698 ns (7.53× the best)1.38 µs (5.00× the best)70.0 ms (3.87× the best)639 ms188 µspari+sievePARIgf2_127-u
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine60.850.2 ns (3.80× the best)24.8 ns (1.97× the best)445 ns (21.28× the best)699 ns (7.54× the best)1.38 µs (4.98× the best)69.4 ms (3.84× the best)639 ms188 µspari+sievePARIgf2_127, gf2_127-lambda, gf2_127-u, gf2_127-w
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached59.824.9 ns (1.89× the best)14.9 ns (1.19× the best)450 ns (21.55× the best)719 ns (7.75× the best)1.06 µs (3.81× the best)35.2 ms (1.95× the best)1.28 s318 µspari+sievePARIgf2_127-u
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached62.833.3 ns (2.52× the best)22.6 ns (1.80× the best)647 ns (30.96× the best)1.01 µs (10.92× the best)1.46 µs (5.28× the best)47.1 ms (2.60× the best)2.20 s552 µspari+sievePARIgf2_127-lambda, gf2_127-u, gf2_127-w
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached62.828.7 ns (2.18× the best)22.9 ns (1.83× the best)1.92 µs (92.00× the best)2.25 µs (24.24× the best)2.64 µs (9.51× the best)43.9 ms (2.43× the best)2.02 s767 µspari+sievePARIgf2_127-lambda, gf2_127-u, gf2_127-w

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

Machine

Intel(R) Xeon(R) W-1390P @ 3.50GHz · x86-64-v3 · full · ef9e82d3
CPUIntel(R) Xeon(R) W-1390P @ 3.50GHz, 16 cores, 126 GiB
OS? (Linux 6.18.48, x86_64)
rustcrustc 1.98.1 (48a229cea 2026-09-01)
RUSTFLAGS-C target-cpu=x86-64-v3 -C target-feature=+pclmulqdq
field backend featuresavx2, pclmulqdq, sse4.1
commitef9e82d39fbf06c605e1740360370f0003dc4ca4
suitescompare compare107 compare109 compare122 compare_fp2 group riblt agm sieve curvegen
profilefull
criterion arguments–warm-up-time 3 –measurement-time 5 –sample-size 100 –nresamples 100000
run2026-10-08T18:42:23Z .. 2026-10-08T23:22:43Z

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

phaseseconds1-minute average, meanrunnable, meanrunnable, most
idle before251.320.000.0
compare6601.301.263.0
compare1072601.391.273.0
compare1092601.451.133.0
compare1224001.121.122.0
compare_fp25701.081.102.0
group37301.251.2220.0
group wide30551.251.1718.0
riblt mapping3451.151.073.0
riblt plan251.031.202.0
riblt66601.161.1316.0
agm851.161.062.0
sieve2401.091.5216.0
curvegen901.041.112.0
curvegen searches3651.081.153.0
idle after300.830.000.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
binary-u.127lead
binary-u.122-glslead
binary-u.109lead
binary-u.122lead
binary-lambda.127lead
binary-w.127lead
binary-lambda.109lead
binary-w.109lead
binary.122-glslead
binary.127lead
binary-lambda.122lead
binary-lambda.122-glslead
binary-w.122-glslead
binary.122lead
binary-w.122lead
binary.109lead
twisted.61x2contrast

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.109pornin-addendbuffergf2_127gf2_127
binary-lambda.122pornin-addendbuffergf2_127gf2_127
binary-lambda.122-glspornin-addendbuffergf2_127gf2_127
binary-lambda.127pornin-addendfullgf2_127gf2_127
binary-u.109pornin-addendfullgf2_127gf2_127
binary-u.122pornin-addendfullgf2_127gf2_127
binary-u.122-glspornin-addendfullgf2_127gf2_127
binary-u.127pornin-addendfullgf2_127gf2_127
binary-w.109pornin-addendbuffergf2_127gf2_127
binary-w.122pornin-addendbuffergf2_127gf2_127
binary-w.122-glspornin-addendbuffergf2_127gf2_127
binary-w.127pornin-addendfullgf2_127gf2_127
binary.109porninbuffergf2_127gf2_127
binary.122porninbuffergf2_127gf2_127
binary.122-glsporninbuffergf2_127gf2_127
binary.127porninbuffergf2_127gf2_127
edwards.107tispot
edwards.127tispot
edwards.61x2tispot
twisted.128tispot
twisted.61x2tispot
twisted.64x2tispot
twisted.goldilocks2tispot
weier-jacobian.107tispot
weier-jacobian.127tispot
weier-jacobian.61x2tispot
weier.107tispot
weier.127tispot
weier.61x2tispot

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). The references (xor, ristretto255) have no batched hash: they hash one item at a time, add the hash output as is, and are in the figure and the second grid. 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): 78.2 ns at , 101 ns at , 138 ns at , 175 ns at , 211 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 formulas113 ns (1.22× the best)6.36 ns (13.70× the best)19.5 ns (1.48× the best)254 ns (1.18× the best)323 ns (1.20× the best)437 ns (1.22× the best)560 ns (1.24× the best)681 ns (1.25× the best)
gf2_127compare suitePornin x1: hash to addend; output already an addend103 ns (1.11× the best)in the hash19.5 ns (1.48× the best)237 ns (1.11× the best)307 ns (1.14× the best)420 ns (1.18× the best)543 ns (1.20× the best)664 ns (1.22× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators114 ns (1.23× the best)8.18 ns (17.62× the best)17.6 ns (1.34× the best)252 ns (1.17× the best)316 ns (1.18× the best)422 ns (1.18× the best)537 ns (1.19× the best)650 ns (1.19× the best)
gf2_127-lambdaincompletecompare suitehashed straight to : no prepare111 ns (1.20× the best)in the hash17.6 ns (1.34× the best)241 ns (1.12× the best)305 ns (1.14× the best)411 ns (1.15× the best)526 ns (1.16× the best)639 ns (1.17× the best)
gf2_127-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend92.7 ns (tied for the best, within noise)in the hash17.6 ns (1.34× the best)222 ns (1.04× the best)287 ns (1.07× the best)393 ns (1.10× the best)507 ns (1.12× the best)620 ns (1.14× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine119 ns (1.29× the best)0.47 ns (1.01× the best)17.7 ns (1.34× the best)249 ns (1.16× the best)314 ns (1.17× the best)420 ns (1.18× the best)535 ns (1.18× the best)648 ns (1.19× the best)
gf2_127-wincompletecompare suitePornin x1: hash to addend; output already an addend92.8 ns (tied for the best, within noise, 1.00×)in the hash17.7 ns (1.34× the best)222 ns (1.04× the best)287 ns (1.07× the best)393 ns (1.10× the best)508 ns (1.12× the best)621 ns (1.14× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes125 ns (1.35× the best)0.47 ns (1.02× the best)13.2 ns (tied for the best, within noise)242 ns (1.13× the best)296 ns (1.10× the best)384 ns (1.08× the best)480 ns (1.06× the best)573 ns (1.05× the best)
gf2_127-ucompare suitePornin x1: hash to addend; output already an addend98.0 ns (1.06× the best)in the hash13.2 ns (tied for the best, within noise)214 ns (best)269 ns (best)357 ns (best)453 ns (best)546 ns (best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended114 ns (1.23× the best)5.01 ns (10.80× the best)19.9 ns (1.51× the best)255 ns (1.19× the best)325 ns (1.21× the best)440 ns (1.23× the best)565 ns (1.25× the best)687 ns (1.26× the best)
gf2_122compare suitePornin x1: hash to addend; output already an addend103 ns (1.11× the best)in the hash19.9 ns (1.51× the best)239 ns (1.11× the best)309 ns (1.15× the best)424 ns (1.19× the best)549 ns (1.21× the best)671 ns (1.23× the best)
gf2_122-lambdaincompleteλ-projective115 ns (1.25× the best)8.18 ns (17.61× the best)20.2 ns (1.53× the best)261 ns (1.21× the best)332 ns (1.23× the best)448 ns (1.25× the best)574 ns (1.27× the best)698 ns (1.28× the best)
gf2_122-lambdaincompletecompare suitehashed straight to : no prepare119 ns (1.29× the best)in the hash20.2 ns (1.53× the best)256 ns (1.19× the best)327 ns (1.22× the best)443 ns (1.24× the best)570 ns (1.26× the best)694 ns (1.27× the best)
gf2_122-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend95.0 ns (1.02× the best)in the hash20.2 ns (1.53× the best)232 ns (1.08× the best)303 ns (1.13× the best)419 ns (1.17× the best)545 ns (1.20× the best)669 ns (1.23× the best)
gf2_122-wincompleteλ-projective, w codec116 ns (1.25× the best)0.47 ns (tied for the best, within noise, 1.00×)20.5 ns (1.55× the best)254 ns (1.19× the best)326 ns (1.21× the best)443 ns (1.24× the best)570 ns (1.26× the best)696 ns (1.27× the best)
gf2_122-wincompletecompare suitePornin x1: hash to addend; output already an addend95.2 ns (1.03× the best)in the hash20.5 ns (1.55× the best)233 ns (1.09× the best)305 ns (1.13× the best)422 ns (1.18× the best)549 ns (1.21× the best)674 ns (1.24× the best)
gf2_122-uunscaled (X:S:Z), w codec127 ns (1.37× the best)0.49 ns (1.06× the best)14.3 ns (1.08× the best)247 ns (1.15× the best)304 ns (1.13× the best)397 ns (1.11× the best)497 ns (1.10× the best)595 ns (1.09× the best)
gf2_122-ucompare suitePornin x1: hash to addend; output already an addend99.3 ns (1.07× the best)in the hash14.3 ns (1.08× the best)219 ns (1.02× the best)276 ns (1.03× the best)369 ns (1.03× the best)469 ns (1.04× the best)567 ns (1.04× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended116 ns (1.25× the best)4.27 ns (9.20× the best)19.3 ns (1.46× the best)255 ns (1.19× the best)324 ns (1.20× the best)436 ns (1.22× the best)558 ns (1.23× the best)678 ns (1.24× the best)
gf2_122-glscompare suitePornin x1: hash to addend; output already an addend101 ns (1.09× the best)in the hash19.3 ns (1.46× the best)236 ns (1.10× the best)304 ns (1.13× the best)417 ns (1.17× the best)539 ns (1.19× the best)659 ns (1.21× the best)
gf2_122-gls-lambdaincompleteλ-projective116 ns (1.25× the best)8.11 ns (17.46× the best)20.3 ns (1.53× the best)261 ns (1.22× the best)332 ns (1.23× the best)448 ns (1.25× the best)574 ns (1.27× the best)698 ns (1.28× the best)
gf2_122-gls-lambdaincompletecompare suitehashed straight to : no prepare121 ns (1.30× the best)in the hash20.3 ns (1.53× the best)258 ns (1.20× the best)329 ns (1.22× the best)445 ns (1.25× the best)571 ns (1.26× the best)695 ns (1.27× the best)
gf2_122-gls-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend95.0 ns (1.03× the best)in the hash20.3 ns (1.53× the best)232 ns (1.08× the best)303 ns (1.13× the best)419 ns (1.17× the best)545 ns (1.21× the best)669 ns (1.23× the best)
gf2_122-gls-wincompleteλ-projective, w codec116 ns (1.25× the best)0.68 ns (1.47× the best)20.3 ns (1.54× the best)253 ns (1.18× the best)325 ns (1.21× the best)441 ns (1.23× the best)567 ns (1.25× the best)692 ns (1.27× the best)
gf2_122-gls-wincompletecompare suitePornin x1: hash to addend; output already an addend94.6 ns (1.02× the best)in the hash20.3 ns (1.54× the best)232 ns (1.08× the best)303 ns (1.13× the best)419 ns (1.17× the best)546 ns (1.21× the best)670 ns (1.23× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec121 ns (1.30× the best)0.68 ns (1.46× the best)13.7 ns (1.04× the best)240 ns (1.12× the best)295 ns (1.10× the best)386 ns (1.08× the best)483 ns (1.07× the best)579 ns (1.06× the best)
gf2_122-gls-ucompare suitePornin x1: hash to addend; output already an addend97.6 ns (1.05× the best)in the hash13.7 ns (1.04× the best)216 ns (1.01× the best)271 ns (1.01× the best)362 ns (1.01× the best)459 ns (1.02× the best)555 ns (1.02× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended126 ns (1.36× the best)4.25 ns (9.16× the best)20.4 ns (1.54× the best)268 ns (1.25× the best)339 ns (1.26× the best)455 ns (1.28× the best)582 ns (1.29× the best)707 ns (1.30× the best)
gf2_109compare suitePornin x1: hash to addend; output already an addend114 ns (1.23× the best)in the hash20.4 ns (1.54× the best)251 ns (1.17× the best)322 ns (1.20× the best)439 ns (1.23× the best)566 ns (1.25× the best)690 ns (1.27× the best)
gf2_109-lambdaincompleteλ-projective124 ns (1.34× the best)8.13 ns (17.51× the best)18.9 ns (1.43× the best)266 ns (1.24× the best)333 ns (1.24× the best)444 ns (1.24× the best)564 ns (1.25× the best)683 ns (1.25× the best)
gf2_109-lambdaincompletecompare suitehashed straight to : no prepare131 ns (1.41× the best)in the hash18.9 ns (1.43× the best)264 ns (1.23× the best)331 ns (1.23× the best)442 ns (1.24× the best)563 ns (1.24× the best)681 ns (1.25× the best)
gf2_109-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend105 ns (1.13× the best)in the hash18.9 ns (1.43× the best)238 ns (1.11× the best)305 ns (1.14× the best)416 ns (1.17× the best)536 ns (1.19× the best)655 ns (1.20× the best)
gf2_109-wincompleteλ-projective, w codec120 ns (1.29× the best)0.47 ns (tied for the best, within noise, 1.01×)18.9 ns (1.43× the best)254 ns (1.18× the best)321 ns (1.20× the best)432 ns (1.21× the best)553 ns (1.22× the best)671 ns (1.23× the best)
gf2_109-wincompletecompare suitePornin x1: hash to addend; output already an addend104 ns (1.12× the best)in the hash18.9 ns (1.43× the best)237 ns (1.11× the best)305 ns (1.14× the best)416 ns (1.16× the best)537 ns (1.19× the best)655 ns (1.20× the best)
gf2_109-uunscaled (X:S:Z), w codec125 ns (1.35× the best)0.46 ns (tied for the best, within noise)13.5 ns (1.02× the best)243 ns (1.13× the best)298 ns (1.11× the best)387 ns (1.08× the best)484 ns (1.07× the best)578 ns (1.06× the best)
gf2_109-ucompare suitePornin x1: hash to addend; output already an addend110 ns (1.18× the best)in the hash13.5 ns (1.02× the best)227 ns (1.06× the best)282 ns (1.05× the best)372 ns (1.04× the best)468 ns (1.03× the best)563 ns (1.03× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.24 µs (13.35× the best)39.9 ns (86.04× the best)27.5 ns (2.08× the best)1.44 µs (6.69× the best)1.52 µs (5.67× the best)1.67 µs (4.67× the best)1.83 µs (4.03× the best)1.98 µs (3.63× the best)
weier127short Weierstrass, projective += affine1.17 µs (12.58× the best)1.00 ns (2.15× the best)58.7 ns (4.45× the best)1.42 µs (6.60× the best)1.58 µs (5.87× the best)1.84 µs (5.16× the best)2.14 µs (4.73× the best)2.43 µs (4.46× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.16 µs (12.49× the best)0.99 ns (2.13× the best)48.1 ns (3.64× the best)1.38 µs (6.42× the best)1.51 µs (5.64× the best)1.74 µs (4.87× the best)1.99 µs (4.39× the best)2.23 µs (4.09× the best)
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached916 ns (9.89× the best)37.9 ns (81.74× the best)27.6 ns (2.09× the best)1.11 µs (5.19× the best)1.20 µs (4.47× the best)1.35 µs (3.77× the best)1.50 µs (3.32× the best)1.66 µs (3.04× the best)
weier107short Weierstrass, projective += affine901 ns (9.72× the best)0.63 ns (1.35× the best)48.6 ns (3.68× the best)1.12 µs (5.23× the best)1.26 µs (4.69× the best)1.49 µs (4.16× the best)1.74 µs (3.84× the best)1.98 µs (3.64× the best)
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine893 ns (9.63× the best)0.63 ns (1.35× the best)44.1 ns (3.34× the best)1.10 µs (5.13× the best)1.23 µs (4.57× the best)1.44 µs (4.02× the best)1.67 µs (3.69× the best)1.90 µs (3.48× the best)
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached1.96 µs (21.15× the best)12.7 ns (27.29× the best)31.1 ns (2.35× the best)2.14 µs (9.98× the best)2.24 µs (8.33× the best)2.40 µs (6.71× the best)2.57 µs (5.68× the best)2.74 µs (5.02× the best)
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached706 ns (7.62× the best)34.9 ns (75.23× the best)25.8 ns (1.95× the best)894 ns (4.17× the best)978 ns (3.64× the best)1.12 µs (3.12× the best)1.27 µs (2.80× the best)1.41 µs (2.59× the best)
weier61x2short Weierstrass, signed-x codec, projective += affine698 ns (7.53× the best)0.52 ns (1.13× the best)50.6 ns (3.83× the best)923 ns (4.30× the best)1.07 µs (3.97× the best)1.30 µs (3.64× the best)1.56 µs (3.45× the best)1.82 µs (3.33× the best)
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine698 ns (7.53× the best)0.52 ns (1.12× the best)50.2 ns (3.80× the best)922 ns (4.30× the best)1.06 µs (3.96× the best)1.30 µs (3.63× the best)1.55 µs (3.44× the best)1.81 µs (3.32× the best)
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached711 ns (7.67× the best)7.93 ns (17.07× the best)24.9 ns (1.89× the best)869 ns (4.05× the best)951 ns (3.54× the best)1.09 µs (3.04× the best)1.23 µs (2.72× the best)1.38 µs (2.52× the best)
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached1.00 µs (10.83× the best)8.79 ns (18.94× the best)33.3 ns (2.52× the best)1.19 µs (5.53× the best)1.29 µs (4.80× the best)1.46 µs (4.08× the best)1.64 µs (3.62× the best)1.82 µs (3.34× the best)
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached2.24 µs (24.14× the best)9.54 ns (20.55× the best)28.7 ns (2.18× the best)2.41 µs (11.23× the best)2.50 µs (9.30× the best)2.65 µs (7.42× the best)2.81 µs (6.21× the best)2.97 µs (5.45× 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. ristretto255 and the XOR baseline have no batched hash: they hash one item at a time and add the hash output as is. 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. ristretto255 and the XOR baseline have no batched hash: they hash one item at a time and add the hash output as is. 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): : : : :
baseline
xorcompare suitehash output added as is: no prepare53.4 nsin the hash0.45 ns133 ns157 ns195 ns235 ns272 ns
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas366 ns (1.50× the best)6.38 ns (14.85× the best)19.5 ns (1.48× the best)508 ns (1.39× the best)577 ns (1.37× the best)690 ns (1.36× the best)813 ns (1.35× the best)934 ns (1.34× the best)
gf2_127compare suitePornin x2: hash to addend; output already an addend452 ns (1.85× the best)in the hash19.5 ns (1.48× the best)587 ns (1.61× the best)656 ns (1.56× the best)770 ns (1.51× the best)893 ns (1.48× the best)1.01 µs (1.45× the best)
gf2_127compare suitePornin x1: hash to addend; output already an addend256 ns (1.05× the best)in the hash19.5 ns (1.48× the best)391 ns (1.07× the best)460 ns (1.10× the best)574 ns (1.13× the best)697 ns (1.15× the best)818 ns (1.17× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators394 ns (1.62× the best)129 ns (299.16× the best)17.6 ns (1.34× the best)652 ns (1.78× the best)717 ns (1.71× the best)823 ns (1.62× the best)938 ns (1.55× the best)1.05 µs (1.51× the best)
gf2_127-lambdaincompletecompare suitehashed straight to : no prepare369 ns (1.52× the best)in the hash17.6 ns (1.34× the best)499 ns (1.36× the best)563 ns (1.34× the best)669 ns (1.32× the best)784 ns (1.30× the best)897 ns (1.29× the best)
gf2_127-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend245 ns (tied for the best, within noise, 1.00×)in the hash17.6 ns (1.34× the best)374 ns (1.02× the best)439 ns (1.05× the best)545 ns (1.07× the best)660 ns (1.09× the best)772 ns (1.11× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine392 ns (1.61× the best)0.45 ns (tied for the best, within noise, 1.06×)17.7 ns (1.34× the best)522 ns (1.43× the best)587 ns (1.40× the best)693 ns (1.36× the best)808 ns (1.34× the best)921 ns (1.32× the best)
gf2_127-wincompletecompare suitePornin x1: hash to addend; output already an addend244 ns (tied for the best, within noise)in the hash17.7 ns (1.34× the best)373 ns (1.02× the best)438 ns (1.04× the best)544 ns (1.07× the best)659 ns (1.09× the best)772 ns (1.11× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes401 ns (1.65× the best)0.48 ns (1.13× the best)13.2 ns (tied for the best, within noise)518 ns (1.42× the best)573 ns (1.36× the best)661 ns (1.30× the best)756 ns (1.25× the best)850 ns (1.22× the best)
gf2_127-ucompare suitePornin x1: hash to addend; output already an addend249 ns (1.02× the best)in the hash13.2 ns (tied for the best, within noise)366 ns (best)420 ns (best)508 ns (best)604 ns (best)697 ns (best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended670 ns (2.75× the best)4.91 ns (11.42× the best)19.9 ns (1.51× the best)811 ns (2.22× the best)881 ns (2.10× the best)996 ns (1.96× the best)1.12 µs (1.86× the best)1.24 µs (1.78× the best)
gf2_122compare suitePornin x1: hash to addend; output already an addend392 ns (1.61× the best)in the hash19.9 ns (1.51× the best)528 ns (1.44× the best)598 ns (1.42× the best)713 ns (1.40× the best)837 ns (1.39× the best)960 ns (1.38× the best)
gf2_122-lambdaincompleteλ-projective679 ns (2.78× the best)251 ns (583.32× the best)20.2 ns (1.53× the best)1.07 µs (2.92× the best)1.14 µs (2.71× the best)1.25 µs (2.47× the best)1.38 µs (2.29× the best)1.50 µs (2.16× the best)
gf2_122-lambdaincompletecompare suitehashed straight to : no prepare672 ns (2.76× the best)in the hash20.2 ns (1.53× the best)809 ns (2.21× the best)880 ns (2.10× the best)996 ns (1.96× the best)1.12 µs (1.86× the best)1.25 µs (1.79× the best)
gf2_122-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend381 ns (1.56× the best)in the hash20.2 ns (1.53× the best)518 ns (1.42× the best)589 ns (1.40× the best)705 ns (1.39× the best)831 ns (1.38× the best)956 ns (1.37× the best)
gf2_122-wincompleteλ-projective, w codec654 ns (2.69× the best)0.44 ns (tied for the best, within noise, 1.02×)20.5 ns (1.55× the best)793 ns (2.17× the best)864 ns (2.06× the best)981 ns (1.93× the best)1.11 µs (1.84× the best)1.23 µs (1.77× the best)
gf2_122-wincompletecompare suitePornin x1: hash to addend; output already an addend381 ns (1.56× the best)in the hash20.5 ns (1.55× the best)519 ns (1.42× the best)590 ns (1.41× the best)707 ns (1.39× the best)835 ns (1.38× the best)960 ns (1.38× the best)
gf2_122-uunscaled (X:S:Z), w codec674 ns (2.77× the best)0.50 ns (1.15× the best)14.3 ns (1.08× the best)794 ns (2.17× the best)851 ns (2.03× the best)944 ns (1.86× the best)1.04 µs (1.73× the best)1.14 µs (1.64× the best)
gf2_122-ucompare suitePornin x1: hash to addend; output already an addend391 ns (1.60× the best)in the hash14.3 ns (1.08× the best)511 ns (1.40× the best)567 ns (1.35× the best)660 ns (1.30× the best)761 ns (1.26× the best)859 ns (1.23× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended697 ns (2.86× the best)4.22 ns (9.82× the best)19.3 ns (1.46× the best)835 ns (2.28× the best)904 ns (2.15× the best)1.02 µs (2.00× the best)1.14 µs (1.89× the best)1.26 µs (1.81× the best)
gf2_122-glscompare suitePornin x1: hash to addend; output already an addend394 ns (1.62× the best)in the hash19.3 ns (1.46× the best)529 ns (1.45× the best)597 ns (1.42× the best)710 ns (1.40× the best)832 ns (1.38× the best)952 ns (1.37× the best)
gf2_122-gls-lambdaincompleteλ-projective692 ns (2.84× the best)249 ns (579.08× the best)20.3 ns (1.53× the best)1.08 µs (2.95× the best)1.15 µs (2.74× the best)1.26 µs (2.49× the best)1.39 µs (2.30× the best)1.52 µs (2.17× the best)
gf2_122-gls-lambdaincompletecompare suitehashed straight to : no prepare679 ns (2.79× the best)in the hash20.3 ns (1.53× the best)816 ns (2.23× the best)887 ns (2.11× the best)1.00 µs (1.97× the best)1.13 µs (1.87× the best)1.25 µs (1.80× the best)
gf2_122-gls-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend385 ns (1.58× the best)in the hash20.3 ns (1.53× the best)522 ns (1.43× the best)593 ns (1.41× the best)709 ns (1.39× the best)835 ns (1.38× the best)959 ns (1.38× the best)
gf2_122-gls-wincompleteλ-projective, w codec659 ns (2.70× the best)0.43 ns (tied for the best, within noise)20.3 ns (1.54× the best)796 ns (2.18× the best)867 ns (2.07× the best)984 ns (1.94× the best)1.11 µs (1.84× the best)1.23 µs (1.77× the best)
gf2_122-gls-wincompletecompare suitePornin x1: hash to addend; output already an addend385 ns (1.58× the best)in the hash20.3 ns (1.54× the best)522 ns (1.43× the best)593 ns (1.41× the best)709 ns (1.40× the best)836 ns (1.38× the best)960 ns (1.38× the best)
gf2_122-gls-uunscaled (X:S:Z), w codec678 ns (2.78× the best)0.44 ns (tied for the best, within noise, 1.01×)13.7 ns (1.04× the best)796 ns (2.18× the best)852 ns (2.03× the best)942 ns (1.85× the best)1.04 µs (1.72× the best)1.14 µs (1.63× the best)
gf2_122-gls-ucompare suitePornin x1: hash to addend; output already an addend390 ns (1.60× the best)in the hash13.7 ns (1.04× the best)508 ns (1.39× the best)563 ns (1.34× the best)654 ns (1.29× the best)751 ns (1.24× the best)847 ns (1.22× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended1.16 µs (4.77× the best)4.23 ns (9.85× the best)20.4 ns (1.54× the best)1.31 µs (3.57× the best)1.38 µs (3.28× the best)1.49 µs (2.94× the best)1.62 µs (2.68× the best)1.74 µs (2.50× the best)
gf2_109compare suitePornin x1: hash to addend; output already an addend675 ns (2.77× the best)in the hash20.4 ns (1.54× the best)812 ns (2.22× the best)883 ns (2.10× the best)1000 ns (1.97× the best)1.13 µs (1.87× the best)1.25 µs (1.80× the best)
gf2_109-lambdaincompleteλ-projective1.16 µs (4.76× the best)503 ns (1170.41× the best)18.9 ns (1.43× the best)1.80 µs (4.91× the best)1.86 µs (4.44× the best)1.97 µs (3.89× the best)2.10 µs (3.47× the best)2.21 µs (3.18× the best)
gf2_109-lambdaincompletecompare suitehashed straight to : no prepare1.17 µs (4.78× the best)in the hash18.9 ns (1.43× the best)1.30 µs (3.55× the best)1.37 µs (3.26× the best)1.48 µs (2.91× the best)1.60 µs (2.65× the best)1.72 µs (2.46× the best)
gf2_109-lambdaincompletecompare suitePornin x1: hash to addend; output already an addend655 ns (2.69× the best)in the hash18.9 ns (1.43× the best)788 ns (2.16× the best)856 ns (2.04× the best)967 ns (1.90× the best)1.09 µs (1.80× the best)1.21 µs (1.73× the best)
gf2_109-wincompleteλ-projective, w codec1.14 µs (4.66× the best)0.44 ns (tied for the best, within noise, 1.02×)18.9 ns (1.43× the best)1.27 µs (3.47× the best)1.34 µs (3.19× the best)1.45 µs (2.85× the best)1.57 µs (2.60× the best)1.69 µs (2.42× the best)
gf2_109-wincompletecompare suitePornin x1: hash to addend; output already an addend652 ns (2.67× the best)in the hash18.9 ns (1.43× the best)785 ns (2.15× the best)853 ns (2.03× the best)964 ns (1.90× the best)1.08 µs (1.80× the best)1.20 µs (1.73× the best)
gf2_109-uunscaled (X:S:Z), w codec1.15 µs (4.73× the best)0.48 ns (1.12× the best)13.5 ns (1.02× the best)1.27 µs (3.48× the best)1.33 µs (3.16× the best)1.42 µs (2.79× the best)1.51 µs (2.51× the best)1.61 µs (2.31× the best)
gf2_109-ucompare suitePornin x1: hash to addend; output already an addend657 ns (2.70× the best)in the hash13.5 ns (1.02× the best)775 ns (2.12× the best)830 ns (1.98× the best)919 ns (1.81× the best)1.02 µs (1.68× the best)1.11 µs (1.59× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.22 µs (5.02× the best)663 ns (1543.72× the best)27.5 ns (2.08× the best)2.04 µs (5.59× the best)2.13 µs (5.08× the best)2.28 µs (4.48× the best)2.44 µs (4.03× the best)2.59 µs (3.72× the best)
edwards127compare suiteElligator 2 x1: hash + prepare1.51 µs (6.18× the best)663 ns (1543.72× the best)27.5 ns (2.08× the best)2.33 µs (6.37× the best)2.42 µs (5.76× the best)2.56 µs (5.04× the best)2.72 µs (4.50× the best)2.88 µs (4.13× the best)
weier127short Weierstrass, projective += affine1.16 µs (4.76× the best)0.81 ns (1.89× the best)58.7 ns (4.45× the best)1.41 µs (3.86× the best)1.57 µs (3.75× the best)1.84 µs (3.62× the best)2.13 µs (3.53× the best)2.43 µs (3.48× the best)
weier127compare suiteSSWU x1: hash + prepare1.29 µs (5.29× the best)0.81 ns (1.89× the best)58.7 ns (4.45× the best)1.54 µs (4.21× the best)1.70 µs (4.05× the best)1.97 µs (3.87× the best)2.26 µs (3.75× the best)2.56 µs (3.67× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.15 µs (4.74× the best)0.81 ns (1.88× the best)48.1 ns (3.64× the best)1.37 µs (3.76× the best)1.51 µs (3.60× the best)1.74 µs (3.41× the best)1.98 µs (3.29× the best)2.23 µs (3.20× the best)
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached919 ns (3.77× the best)632 ns (1471.60× the best)27.6 ns (2.09× the best)1.71 µs (4.68× the best)1.80 µs (4.28× the best)1.94 µs (3.82× the best)2.10 µs (3.48× the best)2.26 µs (3.24× the best)
edwards107compare suiteElligator 2 x1: hash + prepare1.28 µs (5.25× the best)632 ns (1471.60× the best)27.6 ns (2.09× the best)2.07 µs (5.66× the best)2.16 µs (5.14× the best)2.30 µs (4.53× the best)2.46 µs (4.08× the best)2.62 µs (3.76× the best)
weier107short Weierstrass, projective += affine892 ns (3.66× the best)0.82 ns (1.90× the best)48.6 ns (3.68× the best)1.11 µs (3.04× the best)1.25 µs (2.98× the best)1.48 µs (2.91× the best)1.73 µs (2.86× the best)1.98 µs (2.84× the best)
weier107compare suiteSSWU x1: hash + prepare1.26 µs (5.16× the best)0.82 ns (1.90× the best)48.6 ns (3.68× the best)1.48 µs (4.04× the best)1.62 µs (3.85× the best)1.84 µs (3.63× the best)2.09 µs (3.47× the best)2.34 µs (3.36× the best)
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine886 ns (3.63× the best)0.81 ns (1.88× the best)44.1 ns (3.34× the best)1.09 µs (2.99× the best)1.22 µs (2.91× the best)1.43 µs (2.81× the best)1.66 µs (2.75× the best)1.89 µs (2.71× the best)
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached1.97 µs (8.07× the best)12.5 ns (29.04× the best)31.1 ns (2.35× the best)2.15 µs (5.87× the best)2.24 µs (5.35× the best)2.40 µs (4.73× the best)2.58 µs (4.27× the best)2.75 µs (3.94× the best)
twisted128compare suiteElligator 2 x1: hash + prepare3.32 µs (13.64× the best)12.5 ns (29.04× the best)31.1 ns (2.35× the best)3.51 µs (9.59× the best)3.60 µs (8.58× the best)3.76 µs (7.40× the best)3.93 µs (6.52× the best)4.11 µs (5.89× the best)
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached707 ns (2.90× the best)236 ns (548.53× the best)25.8 ns (1.95× the best)1.10 µs (3.00× the best)1.18 µs (2.81× the best)1.32 µs (2.59× the best)1.47 µs (2.43× the best)1.62 µs (2.32× the best)
edwards61x2compare suiteElligator 2 x1: hash + prepare792 ns (3.25× the best)236 ns (548.53× the best)25.8 ns (1.95× the best)1.18 µs (3.23× the best)1.26 µs (3.01× the best)1.40 µs (2.76× the best)1.55 µs (2.57× the best)1.70 µs (2.44× the best)
weier61x2short Weierstrass, signed-x codec, projective += affine696 ns (2.85× the best)0.44 ns (tied for the best, within noise, 1.03×)50.6 ns (3.83× the best)921 ns (2.52× the best)1.06 µs (2.54× the best)1.30 µs (2.56× the best)1.56 µs (2.58× the best)1.82 µs (2.60× the best)
weier61x2compare suiteSSWU x1: hash + prepare812 ns (3.33× the best)0.44 ns (tied for the best, within noise, 1.03×)50.6 ns (3.83× the best)1.04 µs (2.84× the best)1.18 µs (2.81× the best)1.42 µs (2.78× the best)1.67 µs (2.77× the best)1.93 µs (2.77× the best)
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine702 ns (2.88× the best)0.44 ns (tied for the best, within noise, 1.02×)50.2 ns (3.80× the best)926 ns (2.53× the best)1.07 µs (2.55× the best)1.30 µs (2.56× the best)1.56 µs (2.58× the best)1.81 µs (2.60× the best)
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached706 ns (2.90× the best)8.07 ns (18.77× the best)24.9 ns (1.89× the best)865 ns (2.37× the best)947 ns (2.26× the best)1.08 µs (2.13× the best)1.23 µs (2.03× the best)1.37 µs (1.97× the best)
twisted61x2compare suiteElligator 2 x1: hash + prepare981 ns (4.03× the best)8.07 ns (18.77× the best)24.9 ns (1.89× the best)1.14 µs (3.12× the best)1.22 µs (2.91× the best)1.36 µs (2.67× the best)1.50 µs (2.49× the best)1.65 µs (2.36× the best)
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached1.00 µs (4.11× the best)8.75 ns (20.37× the best)33.3 ns (2.52× the best)1.19 µs (3.24× the best)1.29 µs (3.07× the best)1.45 µs (2.86× the best)1.64 µs (2.71× the best)1.82 µs (2.61× the best)
twisted64x2compare suiteElligator 2 x1: hash + prepare1.38 µs (5.67× the best)8.75 ns (20.37× the best)33.3 ns (2.52× the best)1.56 µs (4.28× the best)1.67 µs (3.97× the best)1.83 µs (3.61× the best)2.02 µs (3.34× the best)2.20 µs (3.15× the best)
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached2.21 µs (9.09× the best)9.45 ns (22.00× the best)28.7 ns (2.18× the best)2.39 µs (6.53× the best)2.48 µs (5.90× the best)2.63 µs (5.17× the best)2.79 µs (4.62× the best)2.95 µs (4.23× the best)
twisted-goldilocks2compare suiteElligator 2 x1: hash + prepare2.75 µs (11.30× the best)9.45 ns (22.00× the best)28.7 ns (2.18× the best)2.92 µs (8.00× the best)3.02 µs (7.18× the best)3.16 µs (6.23× the best)3.33 µs (5.51× the best)3.49 µs (5.01× the best)
references, 32 and 33 bytes
ristretto255compare suitehash output added as is: no prepare6.03 µs (24.75× the best)in the hash116 ns (8.76× the best)6.45 µs (17.63× the best)6.75 µs (16.07× the best)7.23 µs (14.23× the best)7.78 µs (12.89× the best)8.32 µs (11.94× 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.

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 formulas366 ns113 ns (best)3.2×2.26.38 ns6.36 ns (13.70× the best)1.0×0151 ns22.7 ns (1.81× the best)6.6×1.1164 ns25.7 ns (1.23× the best)6.4×1.2
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators394 ns114 ns (1.01× the best)3.5×2.4129 ns8.18 ns (17.62× the best)15.7×1140 ns17.5 ns (1.39× the best)8.0×1155 ns24.0 ns (1.15× the best)6.4×1.1
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine392 ns119 ns (1.06× the best)3.3×2.30.45 ns0.47 ns (1.01× the best)1.0×0139 ns17.0 ns (1.35× the best)8.2×1155 ns22.6 ns (1.08× the best)6.9×1.1
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes401 ns125 ns (1.11× the best)3.2×2.30.48 ns0.47 ns (1.02× the best)1.0×0137 ns12.6 ns (best)10.9×1.1162 ns27.5 ns (1.32× the best)5.9×1.1
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended670 ns114 ns (1.01× the best)5.9×2.44.91 ns5.01 ns (10.80× the best)1.0×0294 ns22.1 ns (1.76× the best)13.3×1.2313 ns24.0 ns (1.15× the best)13.0×1.2
gf2_122-lambdaincompleteλ-projective679 ns115 ns (1.02× the best)5.9×2.4251 ns8.18 ns (17.61× the best)30.7×1287 ns17.3 ns (1.37× the best)16.6×1.2314 ns24.1 ns (1.15× the best)13.0×1.2
gf2_122-wincompleteλ-projective, w codec654 ns116 ns (1.03× the best)5.6×2.30.44 ns0.47 ns (1.00× the best)0.9×0302 ns21.2 ns (1.69× the best)14.2×1.2307 ns21.6 ns (1.03× the best)14.2×1.2
gf2_122-uunscaled (X:S:Z), w codec674 ns127 ns (1.12× the best)5.3×2.40.50 ns0.49 ns (1.06× the best)1.0×0305 ns18.4 ns (1.47× the best)16.5×1.2317 ns26.0 ns (1.24× the best)12.2×1.3
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended697 ns116 ns (1.03× the best)6.0×2.54.22 ns4.27 ns (9.20× the best)1.0×0293 ns21.1 ns (1.68× the best)13.9×1.2313 ns22.7 ns (1.08× the best)13.8×1.2
gf2_122-gls-lambdaincompleteλ-projective692 ns116 ns (1.03× the best)6.0×2.5249 ns8.11 ns (17.46× the best)30.7×1297 ns17.9 ns (1.42× the best)16.6×1.2311 ns22.6 ns (1.08× the best)13.8×1.2
gf2_122-gls-wincompleteλ-projective, w codec659 ns116 ns (1.03× the best)5.7×2.30.43 ns0.68 ns (1.47× the best)0.6×0297 ns20.4 ns (1.62× the best)14.6×1.2305 ns20.9 ns (best)14.6×1.2
gf2_122-gls-uunscaled (X:S:Z), w codec678 ns121 ns (1.07× the best)5.6×2.40.44 ns0.68 ns (1.46× the best)0.6×0297 ns18.0 ns (1.44× the best)16.5×1.2313 ns24.7 ns (1.18× the best)12.6×1.2
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended1.16 µs126 ns (1.12× the best)9.2×2.14.23 ns4.25 ns (9.16× the best)1.0×0538 ns18.2 ns (1.45× the best)29.6×1.1554 ns26.7 ns (1.28× the best)20.7×1.1
gf2_109-lambdaincompleteλ-projective1.16 µs124 ns (1.10× the best)9.3×2.1503 ns8.13 ns (17.51× the best)61.9×1530 ns14.1 ns (1.12× the best)37.5×1.1549 ns26.5 ns (1.27× the best)20.8×1.1
gf2_109-wincompleteλ-projective, w codec1.14 µs120 ns (1.06× the best)9.5×2.10.44 ns0.47 ns (1.01× the best)0.9×0540 ns21.6 ns (1.72× the best)24.9×1.1555 ns24.4 ns (1.17× the best)22.8×1.1
gf2_109-uunscaled (X:S:Z), w codec1.15 µs125 ns (1.11× the best)9.2×2.10.48 ns0.46 ns (best)1.0×0546 ns21.9 ns (1.74× the best)24.9×1.1555 ns27.7 ns (1.33× the best)20.0×1.1
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.22 µs1.24 µs (10.98× the best)1.0×0663 ns39.9 ns (86.04× the best)16.6×1.1610 ns31.9 ns (2.54× the best)19.1×1540 ns541 ns (25.90× the best)1.0×0
weier127short Weierstrass, projective += affine1.16 µs1.17 µs (10.34× the best)1.0×00.81 ns1.00 ns (2.15× the best)0.8×0593 ns16.7 ns (1.33× the best)35.4×1541 ns539 ns (25.81× the best)1.0×0
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.15 µs1.16 µs (10.27× the best)1.0×00.81 ns0.99 ns (2.13× the best)0.8×0605 ns23.6 ns (1.88× the best)25.6×1543 ns542 ns (25.93× the best)1.0×0
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached919 ns916 ns (8.13× the best)1.0×0632 ns37.9 ns (81.74× the best)16.7×1.1600 ns35.1 ns (2.80× the best)17.1×1424 ns426 ns (20.37× the best)1.0×0
weier107short Weierstrass, projective += affine892 ns901 ns (8.00× the best)1.0×00.82 ns0.63 ns (1.35× the best)1.3×0582 ns19.4 ns (1.54× the best)30.0×1421 ns422 ns (20.19× the best)1.0×0
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine886 ns893 ns (7.92× the best)1.0×00.81 ns0.63 ns (1.35× the best)1.3×0580 ns25.5 ns (2.03× the best)22.7×1419 ns421 ns (20.13× the best)1.0×0
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached1.97 µs1.96 µs (17.39× the best)1.0×12.5 ns12.7 ns (27.29× the best)1.0×943 ns22.7 ns (1.81× the best)41.6×960 ns962 ns (46.04× the best)1.0×
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached707 ns706 ns (6.26× the best)1.0×0236 ns34.9 ns (75.23× the best)6.7×1.2203 ns35.0 ns (2.79× the best)5.8×1437 ns441 ns (21.08× the best)1.0×0
weier61x2short Weierstrass, signed-x codec, projective += affine696 ns698 ns (6.19× the best)1.0×00.44 ns0.52 ns (1.13× the best)0.8×0190 ns15.3 ns (1.22× the best)12.4×1441 ns448 ns (21.43× the best)1.0×0
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine702 ns698 ns (6.19× the best)1.0×00.44 ns0.52 ns (1.12× the best)0.8×0198 ns24.8 ns (1.97× the best)8.0×1440 ns445 ns (21.28× the best)1.0×0
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached706 ns711 ns (6.31× the best)1.0×08.07 ns7.93 ns (17.07× the best)1.0×0189 ns14.9 ns (1.19× the best)12.7×1448 ns450 ns (21.55× the best)1.0×0
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached1.00 µs1.00 µs (8.91× the best)1.0×08.75 ns8.79 ns (18.94× the best)1.0×0267 ns22.6 ns (1.80× the best)11.8×1.1650 ns647 ns (30.96× the best)1.0×0
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached2.21 µs2.24 µs (19.85× the best)1.0×-0.19.45 ns9.54 ns (20.55× the best)1.0×0316 ns22.9 ns (1.83× the best)13.8×11.91 µs1.92 µs (92.00× 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 formulas366 ns (best)200 ns (best)137 ns (tied for the best, within noise)113 ns (best)6.38 ns (14.85× the best)6.72 ns (6.28× the best)6.55 ns (8.70× the best)6.36 ns (13.70× the best)151 ns (1.10× the best)46.0 ns (1.20× the best)25.6 ns (1.57× the best)22.7 ns (1.81× the best)164 ns (1.06× the best)54.2 ns (tied for the best, within noise)29.6 ns (1.03× the best)25.7 ns (1.23× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators394 ns (1.08× the best)204 ns (1.02× the best)137 ns (tied for the best, within noise, 1.00×)114 ns (1.01× the best)129 ns (299.16× the best)32.8 ns (30.61× the best)12.7 ns (16.85× the best)8.18 ns (17.62× the best)140 ns (1.02× the best)42.0 ns (1.10× the best)21.8 ns (1.34× the best)17.5 ns (1.39× the best)155 ns (tied for the best, within noise, 1.00×)54.2 ns (tied for the best, within noise, 1.00×)29.7 ns (1.03× the best)24.0 ns (1.15× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine392 ns (1.07× the best)219 ns (1.09× the best)145 ns (1.06× the best)119 ns (1.06× the best)0.45 ns (tied for the best, within noise, 1.06×)1.10 ns (1.03× the best)0.79 ns (1.06× the best)0.47 ns (1.01× the best)139 ns (1.02× the best)42.1 ns (1.10× the best)21.8 ns (1.34× the best)17.0 ns (1.35× the best)155 ns (tied for the best, within noise)55.2 ns (1.02× the best)28.8 ns (best)22.6 ns (1.08× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes401 ns (1.10× the best)225 ns (1.13× the best)153 ns (1.11× the best)125 ns (1.11× the best)0.48 ns (1.13× the best)1.08 ns (1.01× the best)0.81 ns (1.07× the best)0.47 ns (1.02× the best)137 ns (best)38.2 ns (best)16.3 ns (best)12.6 ns (best)162 ns (1.04× the best)57.6 ns (1.06× the best)32.8 ns (1.14× the best)27.5 ns (1.32× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended670 ns (1.83× the best)293 ns (1.47× the best)155 ns (1.13× the best)114 ns (1.01× the best)4.91 ns (11.42× the best)5.62 ns (5.25× the best)5.44 ns (7.22× the best)5.01 ns (10.80× the best)294 ns (2.15× the best)66.6 ns (1.74× the best)28.9 ns (1.78× the best)22.1 ns (1.76× the best)313 ns (2.02× the best)73.5 ns (1.36× the best)32.4 ns (1.13× the best)24.0 ns (1.15× the best)
gf2_122-lambdaincompleteλ-projective679 ns (1.85× the best)294 ns (1.47× the best)156 ns (1.14× the best)115 ns (1.02× the best)251 ns (583.32× the best)53.6 ns (50.04× the best)15.2 ns (20.19× the best)8.18 ns (17.61× the best)287 ns (2.10× the best)61.7 ns (1.62× the best)24.1 ns (1.48× the best)17.3 ns (1.37× the best)314 ns (2.03× the best)73.1 ns (1.35× the best)32.2 ns (1.12× the best)24.1 ns (1.15× the best)
gf2_122-wincompleteλ-projective, w codec654 ns (1.79× the best)294 ns (1.47× the best)156 ns (1.14× the best)116 ns (1.03× the best)0.44 ns (tied for the best, within noise, 1.02×)1.09 ns (1.01× the best)0.75 ns (best)0.47 ns (tied for the best, within noise, 1.00×)302 ns (2.20× the best)64.3 ns (1.68× the best)27.0 ns (1.66× the best)21.2 ns (1.69× the best)307 ns (1.98× the best)70.9 ns (1.31× the best)29.8 ns (1.03× the best)21.6 ns (1.03× the best)
gf2_122-uunscaled (X:S:Z), w codec674 ns (1.84× the best)301 ns (1.51× the best)164 ns (1.20× the best)127 ns (1.12× the best)0.50 ns (1.15× the best)1.08 ns (1.01× the best)0.82 ns (1.08× the best)0.49 ns (1.06× the best)305 ns (2.23× the best)61.3 ns (1.61× the best)22.5 ns (1.38× the best)18.4 ns (1.47× the best)317 ns (2.05× the best)74.7 ns (1.38× the best)33.6 ns (1.17× the best)26.0 ns (1.24× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended697 ns (1.90× the best)308 ns (1.54× the best)161 ns (1.18× the best)116 ns (1.03× the best)4.22 ns (9.82× the best)4.83 ns (4.51× the best)4.54 ns (6.03× the best)4.27 ns (9.20× the best)293 ns (2.14× the best)65.6 ns (1.72× the best)27.9 ns (1.72× the best)21.1 ns (1.68× the best)313 ns (2.02× the best)71.5 ns (1.32× the best)31.0 ns (1.08× the best)22.7 ns (1.08× the best)
gf2_122-gls-lambdaincompleteλ-projective692 ns (1.89× the best)306 ns (1.53× the best)161 ns (1.18× the best)116 ns (1.03× the best)249 ns (579.08× the best)53.4 ns (49.89× the best)15.1 ns (20.10× the best)8.11 ns (17.46× the best)297 ns (2.17× the best)62.1 ns (1.62× the best)24.5 ns (1.51× the best)17.9 ns (1.42× the best)311 ns (2.01× the best)73.7 ns (1.36× the best)32.1 ns (1.11× the best)22.6 ns (1.08× the best)
gf2_122-gls-wincompleteλ-projective, w codec659 ns (1.80× the best)303 ns (1.52× the best)161 ns (1.17× the best)116 ns (1.03× the best)0.43 ns (tied for the best, within noise)1.08 ns (1.01× the best)0.83 ns (1.10× the best)0.68 ns (1.47× the best)297 ns (2.17× the best)64.9 ns (1.70× the best)27.2 ns (1.68× the best)20.4 ns (1.62× the best)305 ns (1.97× the best)70.1 ns (1.29× the best)29.1 ns (1.01× the best)20.9 ns (best)
gf2_122-gls-uunscaled (X:S:Z), w codec678 ns (1.85× the best)298 ns (1.49× the best)165 ns (1.21× the best)121 ns (1.07× the best)0.44 ns (tied for the best, within noise, 1.01×)1.07 ns (best)0.83 ns (1.10× the best)0.68 ns (1.46× the best)297 ns (2.17× the best)61.2 ns (1.60× the best)22.5 ns (1.38× the best)18.0 ns (1.44× the best)313 ns (2.02× the best)73.8 ns (1.36× the best)32.9 ns (1.14× the best)24.7 ns (1.18× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended1.16 µs (3.18× the best)431 ns (2.16× the best)195 ns (1.42× the best)126 ns (1.12× the best)4.23 ns (9.85× the best)4.88 ns (4.56× the best)4.65 ns (6.18× the best)4.25 ns (9.16× the best)538 ns (3.93× the best)94.4 ns (2.47× the best)28.6 ns (1.76× the best)18.2 ns (1.45× the best)554 ns (3.58× the best)108 ns (2.00× the best)38.7 ns (1.34× the best)26.7 ns (1.28× the best)
gf2_109-lambdaincompleteλ-projective1.16 µs (3.17× the best)431 ns (2.16× the best)195 ns (1.42× the best)124 ns (1.10× the best)503 ns (1170.41× the best)82.7 ns (77.22× the best)18.8 ns (24.92× the best)8.13 ns (17.51× the best)530 ns (3.87× the best)90.0 ns (2.36× the best)24.8 ns (1.53× the best)14.1 ns (1.12× the best)549 ns (3.55× the best)109 ns (2.00× the best)39.1 ns (1.36× the best)26.5 ns (1.27× the best)
gf2_109-wincompleteλ-projective, w codec1.14 µs (3.10× the best)413 ns (2.07× the best)183 ns (1.33× the best)120 ns (1.06× the best)0.44 ns (tied for the best, within noise, 1.02×)1.08 ns (1.01× the best)0.82 ns (1.08× the best)0.47 ns (tied for the best, within noise, 1.01×)540 ns (3.94× the best)96.0 ns (2.51× the best)32.5 ns (2.00× the best)21.6 ns (1.72× the best)555 ns (3.59× the best)105 ns (1.95× the best)36.8 ns (1.28× the best)24.4 ns (1.17× the best)
gf2_109-uunscaled (X:S:Z), w codec1.15 µs (3.15× the best)417 ns (2.09× the best)189 ns (1.38× the best)125 ns (1.11× the best)0.48 ns (1.12× the best)1.08 ns (1.01× the best)0.79 ns (1.05× the best)0.46 ns (tied for the best, within noise)546 ns (3.99× the best)97.1 ns (2.54× the best)31.7 ns (1.95× the best)21.9 ns (1.74× the best)555 ns (3.59× the best)109 ns (2.01× the best)40.3 ns (1.40× the best)27.7 ns (1.33× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.22 µs (3.34× the best)1.24 µs (10.98× the best)663 ns (1543.72× the best)39.9 ns (86.04× the best)610 ns (4.45× the best)31.9 ns (2.54× the best)540 ns (3.49× the best)541 ns (25.90× the best)
weier127short Weierstrass, projective += affine1.16 µs (3.17× the best)1.17 µs (10.34× the best)0.81 ns (1.89× the best)1.00 ns (2.15× the best)593 ns (4.33× the best)16.7 ns (1.33× the best)541 ns (3.50× the best)539 ns (25.81× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.15 µs (3.15× the best)1.16 µs (10.27× the best)0.81 ns (1.88× the best)0.99 ns (2.13× the best)605 ns (4.42× the best)23.6 ns (1.88× the best)543 ns (3.51× the best)542 ns (25.93× the best)
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached919 ns (2.51× the best)916 ns (8.13× the best)632 ns (1471.60× the best)37.9 ns (81.74× the best)600 ns (4.38× the best)35.1 ns (2.80× the best)424 ns (2.74× the best)426 ns (20.37× the best)
weier107short Weierstrass, projective += affine892 ns (2.44× the best)901 ns (8.00× the best)0.82 ns (1.90× the best)0.63 ns (1.35× the best)582 ns (4.25× the best)19.4 ns (1.54× the best)421 ns (2.72× the best)422 ns (20.19× the best)
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine886 ns (2.42× the best)893 ns (7.92× the best)0.81 ns (1.88× the best)0.63 ns (1.35× the best)580 ns (4.23× the best)25.5 ns (2.03× the best)419 ns (2.71× the best)421 ns (20.13× the best)
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached1.97 µs (5.37× the best)1.96 µs (17.39× the best)12.5 ns (29.04× the best)12.7 ns (27.29× the best)943 ns (6.89× the best)22.7 ns (1.81× the best)960 ns (6.21× the best)962 ns (46.04× the best)
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached707 ns (1.93× the best)706 ns (6.26× the best)236 ns (548.53× the best)34.9 ns (75.23× the best)203 ns (1.48× the best)35.0 ns (2.79× the best)437 ns (2.83× the best)441 ns (21.08× the best)
weier61x2short Weierstrass, signed-x codec, projective += affine696 ns (1.90× the best)698 ns (6.19× the best)0.44 ns (tied for the best, within noise, 1.03×)0.52 ns (1.13× the best)190 ns (1.39× the best)15.3 ns (1.22× the best)441 ns (2.85× the best)448 ns (21.43× the best)
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine702 ns (1.92× the best)698 ns (6.19× the best)0.44 ns (tied for the best, within noise, 1.02×)0.52 ns (1.12× the best)198 ns (1.45× the best)24.8 ns (1.97× the best)440 ns (2.84× the best)445 ns (21.28× the best)
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached706 ns (1.93× the best)703 ns (3.52× the best)703 ns (5.13× the best)711 ns (6.31× the best)8.07 ns (18.77× the best)8.59 ns (8.02× the best)8.39 ns (11.15× the best)7.93 ns (17.07× the best)189 ns (1.38× the best)49.3 ns (1.29× the best)21.1 ns (1.30× the best)14.9 ns (1.19× the best)448 ns (2.90× the best)448 ns (8.27× the best)447 ns (15.52× the best)450 ns (21.55× the best)
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached1.00 µs (2.74× the best)1.00 µs (8.91× the best)8.75 ns (20.37× the best)8.79 ns (18.94× the best)267 ns (1.95× the best)22.6 ns (1.80× the best)650 ns (4.20× the best)647 ns (30.96× the best)
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached2.21 µs (6.05× the best)2.24 µs (19.85× the best)9.45 ns (22.00× the best)9.54 ns (20.55× the best)316 ns (2.31× the best)22.9 ns (1.83× the best)1.91 µs (12.36× the best)1.92 µs (92.00× 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.109, pornin, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve74.4 µs74.4 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend113 ns63.8 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd20.4 ns20.4 ns
per cellencode18.2 ns18.2 ns
per celldecode26.7 ns26.7 ns
measuredinsertion per item, k = 13.57 cells513 ns418 ns

binary-lambda.109, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve74.4 µs74.4 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend105 ns55.7 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd18.9 ns18.9 ns
per cellencode14.1 ns14.1 ns
per celldecode26.5 ns26.5 ns
measuredinsertion per item, k = 13.57 cells488 ns395 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve74.4 µs74.4 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend110 ns60.6 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd13.5 ns13.5 ns
per cellencode21.9 ns21.9 ns
per celldecode27.7 ns27.7 ns
measuredinsertion per item, k = 13.57 cells422 ns331 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve74.4 µs74.4 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend105 ns56.3 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd18.9 ns18.9 ns
per cellencode21.6 ns21.6 ns
per celldecode24.4 ns24.4 ns
measuredinsertion per item, k = 13.57 cells490 ns397 ns

binary.122, pornin, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve70.1 µs70.1 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend103 ns53.4 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd19.9 ns19.9 ns
per cellencode22.1 ns22.1 ns
per celldecode24.0 ns24.0 ns
measuredinsertion per item, k = 13.57 cells537 ns435 ns

binary.122-gls, pornin, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve78.3 µs78.3 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend100 ns51.7 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd19.3 ns19.3 ns
per cellencode21.1 ns21.1 ns
per celldecode22.7 ns22.7 ns
measuredinsertion per item, k = 13.57 cells509 ns408 ns

binary-lambda.122-gls, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve78.3 µs78.3 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend95.2 ns46.1 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd20.3 ns20.3 ns
per cellencode17.9 ns17.9 ns
per celldecode22.6 ns22.6 ns
measuredinsertion per item, k = 13.57 cells501 ns400 ns

binary-u.122-gls, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve78.3 µs78.3 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend99.5 ns50.1 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd13.7 ns13.7 ns
per cellencode18.0 ns18.0 ns
per celldecode24.7 ns24.7 ns
measuredinsertion per item, k = 13.57 cells432 ns333 ns

binary-w.122-gls, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve78.3 µs78.3 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend95.1 ns46.4 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd20.3 ns20.3 ns
per cellencode20.4 ns20.4 ns
per celldecode20.9 ns20.9 ns
measuredinsertion per item, k = 13.57 cells498 ns402 ns

binary-lambda.122, pornin-addend, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve70.1 µs70.1 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend95.8 ns46.4 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd20.2 ns20.2 ns
per cellencode17.3 ns17.3 ns
per celldecode24.1 ns24.1 ns
measuredinsertion per item, k = 13.57 cells505 ns403 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve70.1 µs70.1 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend100 ns50.3 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd14.3 ns14.3 ns
per cellencode18.4 ns18.4 ns
per celldecode26.0 ns26.0 ns
measuredinsertion per item, k = 13.57 cells436 ns332 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve70.1 µs70.1 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend95.3 ns46.6 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd20.5 ns20.5 ns
per cellencode21.2 ns21.2 ns
per celldecode21.6 ns21.6 ns
measuredinsertion per item, k = 13.57 cells504 ns409 ns

binary.127, pornin, checksum projected in , mapping in

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve69.9 µs69.9 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend101 ns51.6 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd19.5 ns19.5 ns
per cellencode22.7 ns22.7 ns
per celldecode25.7 ns25.7 ns
measuredinsertion per item, k = 13.57 cells503 ns412 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve69.9 µs69.9 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend93.0 ns43.9 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd17.6 ns17.6 ns
per cellencode17.5 ns17.5 ns
per celldecode24.0 ns24.0 ns
measuredinsertion per item, k = 13.57 cells474 ns379 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve69.9 µs69.9 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend98.7 ns49.2 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd13.2 ns13.2 ns
per cellencode12.6 ns12.6 ns
per celldecode27.5 ns27.5 ns
measuredinsertion per item, k = 13.57 cells414 ns320 ns

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

lifetimetermsalted SHA-256projection
per itemID, the item’s SHA-25650.2 ns50.2 ns
per saltaccept the curve69.9 µs69.9 µs
per saltchecksum keys127 ns375 ns
per saltmapping keys127 ns375 ns
per salt and itemhash to the addend93.0 ns45.8 ns
per salt and itemmapping seed51.4 ns9.67 ns
per salt and itemmapping walk below m = 1350124 ns124 ns
per celladd17.7 ns17.7 ns
per cellencode17.0 ns17.0 ns
per celldecode22.6 ns22.6 ns
measuredinsertion per item, k = 13.57 cells476 ns380 ns

Curve selection

Curve selection as this run timed it, once per seed (16 seeds): find searches a seed’s candidates for an acceptable curve; prove searches them again and certifies each rejection and the acceptance; verify checks that certificate. The figure shows each family’s method that finds fastest, a bar at the seeds’ mean in a box from the fastest seed to the slowest, and how the prover’s time divides among the search’s phases; the table lists every method (Parameter selection and verification). Accepting a curve (69.9 µs to 91.2 µs, curvegen/verify_accept) includes the embedding-degree bound, a baby-step giant-step search for with , which alone takes 42.1 µs to 44.4 µs (curvegen/embedding), 49% to 62% of it; rejected candidates do not reach it.

Curve selection per family on log time axes: the mean time to find a curve (dark) and to find and certify one (light), with a box from the fastest to the slowest seed; the mean time to verify the certificate; and, as shares of the mean proving time, the time spent deriving candidates, in quick rejection, sieving, point counting, factoring, rejection witnesses and acceptance.Curve selection per family on log time axes: the mean time to find a curve (dark) and to find and certify one (light), with a box from the fastest to the slowest seed; the mean time to verify the certificate; and, as shares of the mean proving time, the time spent deriving candidates, in quick rejection, sieving, point counting, factoring, rejection witnesses and acceptance.

familymethodshownseedscandidatespoint counts (prove)findproveverifycounting, of prove
edwards127pari+sieveyes16202.916.41.08 s1.49 s504 µs88%
edwards61x2pari+sieveyes16122.710.7577 ms813 ms257 µs89%
gf2_109agm1650.150.120.8 ms21.3 ms157 µs97%
gf2_109agm+factoryes1650.150.120.7 ms30.8 ms135 µs68%
gf2_109pari1650.150.1101 ms109 ms141 µs91%
gf2_122agmyes1639.539.518.1 ms17.7 ms126 µs96%
gf2_122pari1639.539.5115 ms116 ms130 µs99%
gf2_122-glsagmyes1647.247.25.75 ms6.31 ms152 µs87%
gf2_122-glspari1647.247.2136 ms137 ms150 µs99%
gf2_127agm+sieveyes1683.625.116.0 ms15.7 ms170 µs75%
gf2_127pari1683.683.6295 ms335 ms135 µs88%
twisted-goldilocks2pari+sieveyes16306.928.42.02 s2.78 s767 µs89%
twisted61x2pari+sieveyes16247.922.41.28 s1.71 s318 µs89%
twisted64x2pari+sieveyes16347.128.22.20 s2.92 s552 µs88%
weier127pari+sieveyes16179.019.61.27 s1.76 s278 µs88%
weier61x2pari+sieveyes1697.511.1639 ms859 ms188 µs88%

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 bytes53.4 ns0.45 ns0.26 ns
GF(2^127), 16 bytes
gf2_127(X:S:Z:T) extended accumulators, Pornin's formulas256 ns (best)103 ns (1.01× the best)6.38 ns (14.85× the best)6.36 ns (13.70× the best)19.5 ns (1.48× the best)19.9 ns (1.36× the best)18.6 ns (1.42× the best)0.56 ns (1.01× the best)1.02 ns (2.53× the best)3.97 ns (1.01× the best)4.25 ns (1.43× the best)151 ns (1.10× the best)22.7 ns (1.81× the best)164 ns (1.06× the best)25.7 ns (1.23× the best)
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators394 ns (1.54× the best)114 ns (1.13× the best)245 ns (tied for the best, within noise, 1.00×)92.7 ns (tied for the best, within noise)129 ns (299.16× the best)8.18 ns (17.62× the best)17.6 ns (1.34× the best)24.4 ns (1.67× the best)17.6 ns (1.35× the best)0.56 ns (tied for the best, within noise, 1.01×)0.82 ns (2.05× the best)3.95 ns (tied for the best, within noise)4.05 ns (1.36× the best)140 ns (1.02× the best)17.5 ns (1.39× the best)155 ns (tied for the best, within noise, 1.00×)24.0 ns (1.15× the best)
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine392 ns (1.53× the best)119 ns (1.18× the best)244 ns (tied for the best, within noise)92.8 ns (tied for the best, within noise, 1.00×)0.45 ns (tied for the best, within noise, 1.06×)0.47 ns (1.01× the best)17.7 ns (1.34× the best)24.4 ns (1.67× the best)17.7 ns (1.35× the best)0.56 ns (tied for the best, within noise, 1.01×)0.82 ns (2.03× the best)4.04 ns (1.02× the best)4.05 ns (1.36× the best)139 ns (1.02× the best)17.0 ns (1.35× the best)155 ns (tied for the best, within noise)22.6 ns (1.08× the best)
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes401 ns (1.57× the best)125 ns (1.23× the best)249 ns (1.02× the best)98.0 ns (1.06× the best)0.48 ns (1.13× the best)0.47 ns (1.02× the best)13.2 ns (best)14.6 ns (best)13.1 ns (best)0.56 ns (tied for the best, within noise, 1.01×)0.83 ns (2.07× the best)6.31 ns (1.60× the best)6.44 ns (2.17× the best)137 ns (best)12.6 ns (best)162 ns (1.04× the best)27.5 ns (1.32× the best)
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended392 ns (1.53× the best)103 ns (1.01× the best)4.91 ns (11.42× the best)5.01 ns (10.80× the best)19.9 ns (1.51× the best)21.3 ns (1.46× the best)20.1 ns (1.54× the best)0.56 ns (tied for the best, within noise)0.87 ns (2.17× the best)4.07 ns (1.03× the best)4.05 ns (1.36× the best)294 ns (2.15× the best)22.1 ns (1.76× the best)313 ns (2.02× the best)24.0 ns (1.15× the best)
gf2_122-lambdaincompleteλ-projective679 ns (2.65× the best)115 ns (1.14× the best)381 ns (1.56× the best)95.0 ns (1.02× the best)251 ns (583.32× the best)8.18 ns (17.61× the best)20.2 ns (1.53× the best)28.0 ns (1.92× the best)20.5 ns (1.57× the best)0.56 ns (1.01× the best)0.81 ns (2.02× the best)4.21 ns (1.07× the best)4.23 ns (1.42× the best)287 ns (2.10× the best)17.3 ns (1.37× the best)314 ns (2.03× the best)24.1 ns (1.15× the best)
gf2_122-wincompleteλ-projective, w codec654 ns (2.56× the best)116 ns (1.15× the best)381 ns (1.56× the best)95.2 ns (1.03× the best)0.44 ns (tied for the best, within noise, 1.02×)0.47 ns (tied for the best, within noise, 1.00×)20.5 ns (1.55× the best)27.9 ns (1.91× the best)20.5 ns (1.57× the best)0.58 ns (1.04× the best)0.84 ns (2.09× the best)4.23 ns (1.07× the best)4.41 ns (1.49× the best)302 ns (2.20× the best)21.2 ns (1.69× the best)307 ns (1.98× the best)21.6 ns (1.03× the best)
gf2_122-uunscaled (X:S:Z), w codec674 ns (2.63× the best)127 ns (1.25× the best)391 ns (1.60× the best)99.3 ns (1.07× the best)0.50 ns (1.15× the best)0.49 ns (1.06× the best)14.3 ns (1.08× the best)16.7 ns (1.15× the best)13.9 ns (1.06× the best)0.58 ns (1.03× the best)0.85 ns (2.10× the best)5.59 ns (1.42× the best)5.97 ns (2.01× the best)305 ns (2.23× the best)18.4 ns (1.47× the best)317 ns (2.05× the best)26.0 ns (1.24× the best)
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended394 ns (1.54× the best)101 ns (best)4.22 ns (9.82× the best)4.27 ns (9.20× the best)19.3 ns (1.46× the best)20.6 ns (1.41× the best)19.5 ns (1.49× the best)1.17 ns (2.10× the best)0.87 ns (2.17× the best)4.06 ns (1.03× the best)4.08 ns (1.37× the best)293 ns (2.14× the best)21.1 ns (1.68× the best)313 ns (2.02× the best)22.7 ns (1.08× the best)
gf2_122-gls-lambdaincompleteλ-projective692 ns (2.70× the best)116 ns (1.14× the best)385 ns (1.58× the best)95.0 ns (1.03× the best)249 ns (579.08× the best)8.11 ns (17.46× the best)20.3 ns (1.53× the best)28.0 ns (1.92× the best)20.4 ns (1.56× the best)0.57 ns (1.03× the best)0.80 ns (2.00× the best)4.20 ns (1.06× the best)4.37 ns (1.47× the best)297 ns (2.17× the best)17.9 ns (1.42× the best)311 ns (2.01× the best)22.6 ns (1.08× the best)
gf2_122-gls-wincompleteλ-projective, w codec659 ns (2.57× the best)116 ns (1.14× the best)385 ns (1.58× the best)94.6 ns (1.02× the best)0.43 ns (tied for the best, within noise)0.68 ns (1.47× the best)20.3 ns (1.54× the best)28.1 ns (1.93× the best)20.5 ns (1.56× the best)0.56 ns (tied for the best, within noise, 1.01×)0.81 ns (2.01× the best)4.23 ns (1.07× the best)4.26 ns (1.43× the best)297 ns (2.17× the best)20.4 ns (1.62× the best)305 ns (1.97× the best)20.9 ns (best)
gf2_122-gls-uunscaled (X:S:Z), w codec678 ns (2.65× the best)121 ns (1.19× the best)390 ns (1.60× the best)97.6 ns (1.05× the best)0.44 ns (tied for the best, within noise, 1.01×)0.68 ns (1.46× the best)13.7 ns (1.04× the best)16.2 ns (1.11× the best)14.0 ns (1.07× the best)0.56 ns (tied for the best, within noise, 1.01×)0.80 ns (2.00× the best)5.60 ns (1.42× the best)5.64 ns (1.90× the best)297 ns (2.17× the best)18.0 ns (1.44× the best)313 ns (2.02× the best)24.7 ns (1.18× the best)
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended675 ns (2.63× the best)114 ns (1.12× the best)4.23 ns (9.85× the best)4.25 ns (9.16× the best)20.4 ns (1.54× the best)22.2 ns (1.52× the best)20.7 ns (1.58× the best)0.56 ns (tied for the best, within noise, 1.01×)0.94 ns (2.34× the best)4.05 ns (1.03× the best)4.07 ns (1.37× the best)538 ns (3.93× the best)18.2 ns (1.45× the best)554 ns (3.58× the best)26.7 ns (1.28× the best)
gf2_109-lambdaincompleteλ-projective1.16 µs (4.53× the best)124 ns (1.23× the best)655 ns (2.69× the best)105 ns (1.13× the best)503 ns (1170.41× the best)8.13 ns (17.51× the best)18.9 ns (1.43× the best)28.2 ns (1.94× the best)19.1 ns (1.46× the best)0.56 ns (tied for the best, within noise, 1.00×)0.80 ns (1.99× the best)3.96 ns (tied for the best, within noise, 1.00×)3.94 ns (1.33× the best)530 ns (3.87× the best)14.1 ns (1.12× the best)549 ns (3.55× the best)26.5 ns (1.27× the best)
gf2_109-wincompleteλ-projective, w codec1.14 µs (4.44× the best)120 ns (1.18× the best)652 ns (2.67× the best)104 ns (1.12× the best)0.44 ns (tied for the best, within noise, 1.02×)0.47 ns (tied for the best, within noise, 1.01×)18.9 ns (1.43× the best)28.3 ns (1.94× the best)19.2 ns (1.46× the best)0.57 ns (1.01× the best)0.80 ns (1.99× the best)4.16 ns (1.05× the best)4.13 ns (1.39× the best)540 ns (3.94× the best)21.6 ns (1.72× the best)555 ns (3.59× the best)24.4 ns (1.17× the best)
gf2_109-uunscaled (X:S:Z), w codec1.15 µs (4.51× the best)125 ns (1.23× the best)657 ns (2.70× the best)110 ns (1.18× the best)0.48 ns (1.12× the best)0.46 ns (tied for the best, within noise)13.5 ns (1.02× the best)15.7 ns (1.08× the best)13.6 ns (1.04× the best)0.56 ns (tied for the best, within noise, 1.01×)0.80 ns (1.99× the best)5.84 ns (1.48× the best)5.82 ns (1.96× the best)546 ns (3.99× the best)21.9 ns (1.74× the best)555 ns (3.59× the best)27.7 ns (1.33× the best)
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached1.22 µs (4.78× the best)1.24 µs (12.21× the best)663 ns (1543.72× the best)39.9 ns (86.04× the best)27.5 ns (2.08× the best)35.8 ns (2.46× the best)1.98 ns (3.55× the best)1.30 ns (3.24× the best)3.16 ns (1.06× the best)610 ns (4.45× the best)31.9 ns (2.54× the best)540 ns (3.49× the best)541 ns (25.90× the best)
weier127short Weierstrass, projective += affine1.16 µs (4.53× the best)1.17 µs (11.50× the best)0.81 ns (1.89× the best)1.00 ns (2.15× the best)58.7 ns (4.45× the best)63.9 ns (4.38× the best)1.10 ns (1.97× the best)0.40 ns (tied for the best, within noise, 1.01×)3.53 ns (1.19× the best)593 ns (4.33× the best)16.7 ns (1.33× the best)541 ns (3.50× the best)539 ns (25.81× the best)
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine1.15 µs (4.51× the best)1.16 µs (11.42× the best)0.81 ns (1.88× the best)0.99 ns (2.13× the best)48.1 ns (3.64× the best)56.6 ns (3.89× the best)1.10 ns (1.97× the best)0.40 ns (1.01× the best)6.60 ns (2.22× the best)605 ns (4.42× the best)23.6 ns (1.88× the best)543 ns (3.51× the best)542 ns (25.93× the best)
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached919 ns (3.59× the best)916 ns (9.04× the best)632 ns (1471.60× the best)37.9 ns (81.74× the best)27.6 ns (2.09× the best)32.6 ns (2.24× the best)1.40 ns (2.51× the best)1.18 ns (2.94× the best)4.93 ns (1.66× the best)600 ns (4.38× the best)35.1 ns (2.80× the best)424 ns (2.74× the best)426 ns (20.37× the best)
weier107short Weierstrass, projective += affine892 ns (3.48× the best)901 ns (8.89× the best)0.82 ns (1.90× the best)0.63 ns (1.35× the best)48.6 ns (3.68× the best)53.9 ns (3.70× the best)0.82 ns (1.47× the best)0.91 ns (2.25× the best)5.81 ns (1.96× the best)582 ns (4.25× the best)19.4 ns (1.54× the best)421 ns (2.72× the best)422 ns (20.19× the best)
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine886 ns (3.46× the best)893 ns (8.81× the best)0.81 ns (1.88× the best)0.63 ns (1.35× the best)44.1 ns (3.34× the best)50.9 ns (3.49× the best)0.82 ns (1.48× the best)0.90 ns (2.24× the best)9.23 ns (3.11× the best)580 ns (4.23× the best)25.5 ns (2.03× the best)419 ns (2.71× the best)421 ns (20.13× the best)
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached1.97 µs (7.68× the best)1.96 µs (19.34× the best)12.5 ns (29.04× the best)12.7 ns (27.29× the best)31.1 ns (2.35× the best)36.3 ns (2.49× the best)1.15 ns (2.06× the best)0.50 ns (1.25× the best)9.45 ns (3.18× the best)943 ns (6.89× the best)22.7 ns (1.81× the best)960 ns (6.21× the best)962 ns (46.04× the best)
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached707 ns (2.76× the best)706 ns (6.97× the best)236 ns (548.53× the best)34.9 ns (75.23× the best)25.8 ns (1.95× the best)29.6 ns (2.03× the best)0.78 ns (1.39× the best)0.54 ns (1.34× the best)2.97 ns (best)203 ns (1.48× the best)35.0 ns (2.79× the best)437 ns (2.83× the best)441 ns (21.08× the best)
weier61x2short Weierstrass, signed-x codec, projective += affine696 ns (2.72× the best)698 ns (6.89× the best)0.44 ns (tied for the best, within noise, 1.03×)0.52 ns (1.13× the best)50.6 ns (3.83× the best)57.1 ns (3.92× the best)0.57 ns (1.02× the best)0.41 ns (1.01× the best)3.33 ns (1.12× the best)190 ns (1.39× the best)15.3 ns (1.22× the best)441 ns (2.85× the best)448 ns (21.43× the best)
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine702 ns (2.74× the best)698 ns (6.89× the best)0.44 ns (tied for the best, within noise, 1.02×)0.52 ns (1.12× the best)50.2 ns (3.80× the best)57.2 ns (3.92× the best)0.57 ns (1.02× the best)0.40 ns (tied for the best, within noise)7.98 ns (2.69× the best)198 ns (1.45× the best)24.8 ns (1.97× the best)440 ns (2.84× the best)445 ns (21.28× the best)
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached706 ns (2.76× the best)711 ns (7.01× the best)8.07 ns (18.77× the best)7.93 ns (17.07× the best)24.9 ns (1.89× the best)28.4 ns (1.95× the best)25.2 ns (1.92× the best)0.73 ns (1.32× the best)0.50 ns (1.24× the best)8.55 ns (2.17× the best)8.85 ns (2.98× the best)189 ns (1.38× the best)14.9 ns (1.19× the best)448 ns (2.90× the best)450 ns (21.55× the best)
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached1.00 µs (3.91× the best)1.00 µs (9.90× the best)8.75 ns (20.37× the best)8.79 ns (18.94× the best)33.3 ns (2.52× the best)37.9 ns (2.60× the best)0.73 ns (1.32× the best)0.50 ns (1.25× the best)7.68 ns (2.59× the best)267 ns (1.95× the best)22.6 ns (1.80× the best)650 ns (4.20× the best)647 ns (30.96× the best)
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached2.21 µs (8.65× the best)2.24 µs (22.07× the best)9.45 ns (22.00× the best)9.54 ns (20.55× the best)28.7 ns (2.18× the best)29.4 ns (2.02× the best)1.32 ns (2.36× the best)0.60 ns (1.48× the best)9.42 ns (3.17× the best)316 ns (2.31× the best)22.9 ns (1.83× the best)1.91 µs (12.36× the best)1.92 µs (92.00× the best)
references, 32 and 33 bytes
ristretto255curve25519-dalek6.03 µs (23.55× the best)116 ns (8.76× the best)117 ns (8.05× the best)113 ns (8.62× the best)6.47 ns (11.61× the best)
secp256k1libsecp256k16.16 µs (24.04× the best)24.7 ns (44.31× 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)1.43 ns (1.04× the best)3.50 ns (1.07× the best)0.65 ns (best)2.18 ns (best)xor1.70 ns (best)5.16 ns (1.34× the best)123 ns (best)5.41 ns (1.03× the best)
gf2_122GF(2^61)[u]/(u^2 + u + 1)1.38 ns (1.01× the best)4.56 ns (1.40× the best)1.17 ns (1.80× the best)4.33 ns (1.99× the best)xor3.98 ns (2.34× the best)3.86 ns (best)238 ns (1.93× the best)5.23 ns (best)
gf2_109F_2[z]/(z^109 + z^5 + z^4 + z^2 + 1)1.37 ns (best)5.13 ns (1.57× the best)0.81 ns (1.24× the best)3.88 ns (1.78× the best)xor6.93 ns (4.09× the best)4.02 ns (1.04× the best)491 ns (3.99× the best)5.36 ns (1.03× the best)
prime
fp127p = 2^127 − 12.69 ns (1.96× the best)4.31 ns (1.32× the best)2.30 ns (3.52× the best)4.26 ns (1.96× the best)1.00 ns (1.67× the best)523 ns (308.39× the best)592 ns (2.01× the best)577 ns (4.68× the best)10.2 ns (1.95× the best)0.38 ns (1.06× the best)0.70 ns (tied for the best, within noise)
fp107p = 2^107 − 12.55 ns (1.86× the best)3.97 ns (1.22× the best)2.13 ns (3.27× the best)3.60 ns (1.65× the best)0.62 ns (1.04× the best)422 ns (248.72× the best)597 ns (2.03× the best)571 ns (4.63× the best)10.1 ns (1.92× the best)0.82 ns (2.27× the best)0.73 ns (1.05× the best)
fp128p = 2^128 − 275, for twisted1283.82 ns (2.79× the best)6.73 ns (2.06× the best)3.64 ns (5.58× the best)6.54 ns (3.00× the best)0.72 ns (1.19× the best)891 ns (524.78× the best)937 ns (3.18× the best)918 ns (7.45× the best)0.36 ns (tied for the best, within noise)0.70 ns (tied for the best, within noise, 1.00×)
quadratic extensions of prime fields
fp61x2GF(p^2) = F_p[i]/(i^2 + 1), p = 2^61 − 12.54 ns (1.85× the best)5.37 ns (1.65× the best)2.38 ns (3.64× the best)5.90 ns (2.71× the best)0.61 ns (1.02× the best)298 ns (175.83× the best)295 ns (best)176 ns (1.43× the best)8.60 ns (1.64× the best)0.50 ns (1.38× the best)0.99 ns (1.42× the best)
fp64x2GF(p^2) = F_p[i]/(i^2 − 2), p = 2^64 − 593.82 ns (2.79× the best)4.99 ns (1.53× the best)3.70 ns (5.67× the best)4.76 ns (2.19× the best)0.60 ns (best)431 ns (254.15× the best)431 ns (1.46× the best)241 ns (1.96× the best)13.6 ns (2.59× the best)0.37 ns (tied for the best, within noise, 1.01×)0.70 ns (tied for the best, within noise)
goldilocks2GF(p^2) = F_p[i]/(i^2 − 7), p = 2^64 − 2^32 + 12.67 ns (1.94× the best)3.26 ns (best)2.59 ns (3.96× the best)3.59 ns (1.65× the best)0.69 ns (1.15× the best)996 ns (586.74× the best)950 ns (3.23× the best)304 ns (2.47× the best)8.96 ns (1.71× the best)0.69 ns (1.92× the best)0.70 ns (tied for the best, within noise)

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)1.43 ns1.42 ns .. 1.43 ns
field mul, throughputgf2_109field/gf2_109/mul throughput (8 chains)1.37 ns1.37 ns .. 1.38 ns
field mul, throughputgf2_122field/gf2_122/mul throughput (8 chains)1.38 ns1.38 ns .. 1.38 ns
field mul, throughputfp127field/fp127/mul throughput (8 chains)2.69 ns2.68 ns .. 2.70 ns
field mul, throughputfp107field/fp107 schoolbook/mul throughput (8 chains)2.55 ns2.55 ns .. 2.56 ns
field mul, throughputfp128field/fp128/mul throughput (8 chains)3.82 ns3.82 ns .. 3.83 ns
field mul, throughputfp61x2field/fp61x2/mul throughput (8 chains)2.54 ns2.54 ns .. 2.55 ns
field mul, throughputfp64x2field/fp64x2/mul throughput (8 chains)3.82 ns3.82 ns .. 3.83 ns
field mul, throughputgoldilocks2field/goldilocks2/mul throughput (8 chains)2.67 ns2.66 ns .. 2.68 ns
field mul, latencygf2_127field/gf2_127/mul latency (dependent chain)3.50 ns3.49 ns .. 3.51 ns
field mul, latencygf2_109field/gf2_109/mul latency (dependent chain)5.13 ns5.10 ns .. 5.16 ns
field mul, latencygf2_122field/gf2_122/mul latency (dependent chain)4.56 ns4.54 ns .. 4.57 ns
field mul, latencyfp127field/fp127/mul latency (dependent chain)4.31 ns4.29 ns .. 4.32 ns
field mul, latencyfp107field/fp107/mul latency (dependent chain)3.97 ns3.96 ns .. 3.98 ns
field mul, latencyfp128field/fp128/mul latency (dependent chain)6.73 ns6.71 ns .. 6.74 ns
field mul, latencyfp61x2field/fp61x2/mul latency (dependent chain)5.37 ns5.36 ns .. 5.39 ns
field mul, latencyfp64x2field/fp64x2/mul latency (dependent chain)4.99 ns4.99 ns .. 5.01 ns
field mul, latencygoldilocks2field/goldilocks2/mul latency (dependent chain)3.26 ns3.25 ns .. 3.27 ns
field square, throughputgf2_127field/gf2_127/square throughput (8 chains)0.65 ns0.65 ns .. 0.65 ns
field square, throughputgf2_109field/gf2_109/square throughput (8 chains)0.81 ns0.81 ns .. 0.81 ns
field square, throughputgf2_122field/gf2_122/square throughput (8 chains)1.17 ns1.17 ns .. 1.18 ns
field square, throughputfp127field/fp127/square throughput (8 chains)2.30 ns2.29 ns .. 2.31 ns
field square, throughputfp107field/fp107/square throughput (8 chains)2.13 ns2.13 ns .. 2.14 ns
field square, throughputfp128field/fp128/square throughput (8 chains)3.64 ns3.63 ns .. 3.65 ns
field square, throughputfp61x2field/fp61x2/square throughput (8 chains)2.38 ns2.37 ns .. 2.38 ns
field square, throughputfp64x2field/fp64x2/square throughput (8 chains)3.70 ns3.69 ns .. 3.71 ns
field square, throughputgoldilocks2field/goldilocks2/square throughput (8 chains)2.59 ns2.58 ns .. 2.60 ns
field square, latencygf2_127field/gf2_127/square latency (dependent chain)2.18 ns2.17 ns .. 2.19 ns
field square, latencygf2_109field/gf2_109/square latency (dependent chain)3.88 ns3.87 ns .. 3.89 ns
field square, latencygf2_122field/gf2_122/square latency (dependent chain)4.33 ns4.32 ns .. 4.34 ns
field square, latencyfp127field/fp127/square latency (dependent chain)4.26 ns4.25 ns .. 4.27 ns
field square, latencyfp107field/fp107/square latency (dependent chain)3.60 ns3.59 ns .. 3.60 ns
field square, latencyfp128field/fp128/square latency (dependent chain)6.54 ns6.52 ns .. 6.56 ns
field square, latencyfp61x2field/fp61x2/square latency (dependent chain)5.90 ns5.88 ns .. 5.92 ns
field square, latencyfp64x2field/fp64x2/square latency (dependent chain)4.76 ns4.75 ns .. 4.77 ns
field square, latencygoldilocks2field/goldilocks2/square latency (dependent chain)3.59 ns3.58 ns .. 3.60 ns
field addfp127field/fp127/add1.00 ns0.99 ns .. 1.01 ns
field addfp107field/fp107/add0.62 ns0.62 ns .. 0.63 ns
field addfp128field/fp128/add0.72 ns0.71 ns .. 0.72 ns
field addfp61x2field/fp61x2/add0.61 ns0.61 ns .. 0.61 ns
field addfp64x2field/fp64x2/add0.60 ns0.60 ns .. 0.60 ns
field addgoldilocks2field/goldilocks2/add0.69 ns0.69 ns .. 0.70 ns
field sqrtgf2_127field/gf2_127/sqrt1.70 ns1.69 ns .. 1.70 ns
field sqrtgf2_109field/gf2_109/sqrt6.93 ns6.92 ns .. 6.95 ns
field sqrtgf2_122field/gf2_122/sqrt3.98 ns3.97 ns .. 3.98 ns
field sqrtfp127field/fp127/sqrt (x^(2^125))523 ns523 ns .. 524 ns
field sqrtfp107field/fp107/sqrt (x^(2^105))422 ns420 ns .. 425 ns
field sqrtfp128field/fp128/sqrt891 ns888 ns .. 893 ns
field sqrtfp61x2field/fp61x2/sqrt298 ns298 ns .. 299 ns
field sqrtfp64x2field/fp64x2/sqrt431 ns430 ns .. 432 ns
field sqrtgoldilocks2field/goldilocks2/sqrt996 ns993 ns .. 998 ns
field sqrt ratiofp127field/fp127/sqrt_ratio592 ns590 ns .. 593 ns
field sqrt ratiofp107field/fp107/sqrt_ratio597 ns593 ns .. 601 ns
field sqrt ratiofp128field/fp128/sqrt_ratio937 ns936 ns .. 939 ns
field sqrt ratiofp61x2field/fp61x2/sqrt_ratio295 ns294 ns .. 295 ns
field sqrt ratiofp64x2field/fp64x2/sqrt_ratio431 ns430 ns .. 432 ns
field sqrt ratiogoldilocks2field/goldilocks2/sqrt_ratio950 ns948 ns .. 952 ns
field halftracegf2_127field/gf2_127/halftrace (byte tables)5.16 ns5.12 ns .. 5.23 ns
field halftracegf2_109field/gf2_109/halftrace (byte tables)4.02 ns4.01 ns .. 4.03 ns
field halftracegf2_122field/gf2_122/qsolve (z^2 + z = c, 2 base halftraces)3.86 ns3.84 ns .. 3.88 ns
field invert, one at a timegf2_127field/gf2_127/invert123 ns123 ns .. 124 ns
field invert, one at a timegf2_109field/gf2_109/invert491 ns490 ns .. 493 ns
field invert, one at a timegf2_122field/gf2_122/invert238 ns238 ns .. 239 ns
field invert, one at a timefp127field/fp127/invert577 ns576 ns .. 578 ns
field invert, one at a timefp107field/fp107/invert571 ns566 ns .. 576 ns
field invert, one at a timefp128field/fp128/invert918 ns916 ns .. 922 ns
field invert, one at a timefp61x2field/fp61x2/invert176 ns176 ns .. 176 ns
field invert, one at a timefp64x2field/fp64x2/invert241 ns241 ns .. 242 ns
field invert, one at a timegoldilocks2field/goldilocks2/invert304 ns303 ns .. 305 ns
field invert, batchedgf2_127field/gf2_127/batch invert (product tree)5.41 ns5.36 ns .. 5.45 ns
field invert, batchedgf2_109field/gf2_109/batch invert (product tree)5.36 ns5.34 ns .. 5.38 ns
field invert, batchedgf2_122field/gf2_122/batch invert (product tree)5.23 ns5.21 ns .. 5.25 ns
field invert, batchedfp127field/fp127/batch invert (product tree)10.2 ns10.1 ns .. 10.3 ns
field invert, batchedfp107field/fp107/batch invert (product tree)10.1 ns10.0 ns .. 10.1 ns
field invert, batchedfp61x2field/fp61x2/batch invert (product tree)8.60 ns8.58 ns .. 8.62 ns
field invert, batchedfp64x2field/fp64x2/batch invert (product tree)13.6 ns13.5 ns .. 13.6 ns
field invert, batchedgoldilocks2field/goldilocks2/batch invert (product tree)8.96 ns8.93 ns .. 9.00 ns
field packfp127field/fp127/pack0.38 ns0.38 ns .. 0.39 ns
field packfp107field/fp107/pack0.82 ns0.82 ns .. 0.83 ns
field packfp128field/fp128/pack0.36 ns0.36 ns .. 0.37 ns
field packfp61x2field/fp61x2/pack0.50 ns0.50 ns .. 0.50 ns
field packfp64x2field/fp64x2/pack0.37 ns0.36 ns .. 0.37 ns
field packgoldilocks2field/goldilocks2/pack0.69 ns0.69 ns .. 0.70 ns
field unpackfp127field/fp127/unpack0.70 ns0.70 ns .. 0.70 ns
field unpackfp107field/fp107/unpack0.73 ns0.73 ns .. 0.73 ns
field unpackfp128field/fp128/unpack0.70 ns0.70 ns .. 0.70 ns
field unpackfp61x2field/fp61x2/unpack0.99 ns0.99 ns .. 1.00 ns
field unpackfp64x2field/fp64x2/unpack0.70 ns0.70 ns .. 0.70 ns
field unpackgoldilocks2field/goldilocks2/unpack0.70 ns0.70 ns .. 0.70 ns
point add, throughputxoradd/xor-sha256/xor 32B, 8 accumulators0.45 ns0.43 ns .. 0.46 ns
point add, throughputgf2_127group.add/binary.127/mode=throughput19.5 ns19.5 ns .. 19.6 ns
point add, throughputgf2_127-lambdagroup.add/binary-lambda.127/mode=throughput17.6 ns17.6 ns .. 17.7 ns
point add, throughputgf2_127-wgroup.add/binary-w.127/mode=throughput17.7 ns17.6 ns .. 17.7 ns
point add, throughputgf2_127-ugroup.add/binary-u.127/mode=throughput13.2 ns13.2 ns .. 13.2 ns
point add, throughputgf2_109group.add/binary.109/mode=throughput20.4 ns20.3 ns .. 20.4 ns
point add, throughputgf2_109-lambdagroup.add/binary-lambda.109/mode=throughput18.9 ns18.9 ns .. 18.9 ns
point add, throughputgf2_109-wgroup.add/binary-w.109/mode=throughput18.9 ns18.9 ns .. 19.0 ns
point add, throughputgf2_109-ugroup.add/binary-u.109/mode=throughput13.5 ns13.5 ns .. 13.5 ns
point add, throughputgf2_122group.add/binary.122/mode=throughput19.9 ns19.9 ns .. 20.0 ns
point add, throughputgf2_122-lambdagroup.add/binary-lambda.122/mode=throughput20.2 ns20.2 ns .. 20.3 ns
point add, throughputgf2_122-wgroup.add/binary-w.122/mode=throughput20.5 ns20.4 ns .. 20.6 ns
point add, throughputgf2_122-ugroup.add/binary-u.122/mode=throughput14.3 ns14.3 ns .. 14.4 ns
point add, throughputgf2_122-glsgroup.add/binary.122-gls/mode=throughput19.3 ns19.2 ns .. 19.4 ns
point add, throughputgf2_122-gls-lambdagroup.add/binary-lambda.122-gls/mode=throughput20.3 ns20.2 ns .. 20.3 ns
point add, throughputgf2_122-gls-wgroup.add/binary-w.122-gls/mode=throughput20.3 ns20.2 ns .. 20.4 ns
point add, throughputgf2_122-gls-ugroup.add/binary-u.122-gls/mode=throughput13.7 ns13.7 ns .. 13.8 ns
point add, throughputedwards127group.add/edwards.127/mode=throughput27.5 ns27.4 ns .. 27.6 ns
point add, throughputedwards107group.add/edwards.107/mode=throughput27.6 ns27.5 ns .. 27.7 ns
point add, throughputtwisted128group.add/twisted.128/mode=throughput31.1 ns31.0 ns .. 31.2 ns
point add, throughputweier127group.add/weier.127/mode=throughput58.7 ns58.5 ns .. 58.9 ns
point add, throughputweier127-jacobiangroup.add/weier-jacobian.127/mode=throughput48.1 ns48.0 ns .. 48.2 ns
point add, throughputweier107group.add/weier.107/mode=throughput48.6 ns48.4 ns .. 48.8 ns
point add, throughputweier107-jacobiangroup.add/weier-jacobian.107/mode=throughput44.1 ns44.0 ns .. 44.3 ns
point add, throughputedwards61x2group.add/edwards.61x2/mode=throughput25.8 ns25.7 ns .. 25.9 ns
point add, throughputweier61x2group.add/weier.61x2/mode=throughput50.6 ns50.4 ns .. 50.7 ns
point add, throughputweier61x2-jacobiangroup.add/weier-jacobian.61x2/mode=throughput50.2 ns50.1 ns .. 50.3 ns
point add, throughputtwisted61x2group.add/twisted.61x2/mode=throughput24.9 ns24.8 ns .. 25.0 ns
point add, throughputtwisted64x2group.add/twisted.64x2/mode=throughput33.3 ns33.2 ns .. 33.4 ns
point add, throughputtwisted-goldilocks2group.add/twisted.goldilocks2/mode=throughput28.7 ns28.7 ns .. 28.8 ns
point add, throughputristretto255add/ristretto255/+=, 8 accumulators116 ns115 ns .. 116 ns
point add, latencyxoradd/xor-sha256/xor 32B, 1 accumulator0.26 ns0.25 ns .. 0.26 ns
point add, latencygf2_127group.add/binary.127/mode=latency19.9 ns19.8 ns .. 20.0 ns
point add, latencygf2_127-lambdagroup.add/binary-lambda.127/mode=latency24.4 ns24.3 ns .. 24.5 ns
point add, latencygf2_127-wgroup.add/binary-w.127/mode=latency24.4 ns24.3 ns .. 24.4 ns
point add, latencygf2_127-ugroup.add/binary-u.127/mode=latency14.6 ns14.5 ns .. 14.6 ns
point add, latencygf2_109group.add/binary.109/mode=latency22.2 ns22.1 ns .. 22.2 ns
point add, latencygf2_109-lambdagroup.add/binary-lambda.109/mode=latency28.2 ns28.2 ns .. 28.3 ns
point add, latencygf2_109-wgroup.add/binary-w.109/mode=latency28.3 ns28.2 ns .. 28.4 ns
point add, latencygf2_109-ugroup.add/binary-u.109/mode=latency15.7 ns15.7 ns .. 15.7 ns
point add, latencygf2_122group.add/binary.122/mode=latency21.3 ns21.2 ns .. 21.3 ns
point add, latencygf2_122-lambdagroup.add/binary-lambda.122/mode=latency28.0 ns27.9 ns .. 28.1 ns
point add, latencygf2_122-wgroup.add/binary-w.122/mode=latency27.9 ns27.8 ns .. 28.0 ns
point add, latencygf2_122-ugroup.add/binary-u.122/mode=latency16.7 ns16.6 ns .. 16.8 ns
point add, latencygf2_122-glsgroup.add/binary.122-gls/mode=latency20.6 ns20.5 ns .. 20.6 ns
point add, latencygf2_122-gls-lambdagroup.add/binary-lambda.122-gls/mode=latency28.0 ns27.9 ns .. 28.1 ns
point add, latencygf2_122-gls-wgroup.add/binary-w.122-gls/mode=latency28.1 ns28.0 ns .. 28.1 ns
point add, latencygf2_122-gls-ugroup.add/binary-u.122-gls/mode=latency16.2 ns16.1 ns .. 16.3 ns
point add, latencyedwards127group.add/edwards.127/mode=latency35.8 ns35.7 ns .. 35.9 ns
point add, latencyedwards107group.add/edwards.107/mode=latency32.6 ns32.5 ns .. 32.7 ns
point add, latencytwisted128group.add/twisted.128/mode=latency36.3 ns36.2 ns .. 36.4 ns
point add, latencyweier127group.add/weier.127/mode=latency63.9 ns63.7 ns .. 64.0 ns
point add, latencyweier127-jacobiangroup.add/weier-jacobian.127/mode=latency56.6 ns56.4 ns .. 56.9 ns
point add, latencyweier107group.add/weier.107/mode=latency53.9 ns53.4 ns .. 54.2 ns
point add, latencyweier107-jacobiangroup.add/weier-jacobian.107/mode=latency50.9 ns50.8 ns .. 51.1 ns
point add, latencyedwards61x2group.add/edwards.61x2/mode=latency29.6 ns29.5 ns .. 29.7 ns
point add, latencyweier61x2group.add/weier.61x2/mode=latency57.1 ns57.0 ns .. 57.2 ns
point add, latencyweier61x2-jacobiangroup.add/weier-jacobian.61x2/mode=latency57.2 ns57.0 ns .. 57.3 ns
point add, latencytwisted61x2group.add/twisted.61x2/mode=latency28.4 ns28.3 ns .. 28.5 ns
point add, latencytwisted64x2group.add/twisted.64x2/mode=latency37.9 ns37.7 ns .. 38.0 ns
point add, latencytwisted-goldilocks2group.add/twisted.goldilocks2/mode=latency29.4 ns29.3 ns .. 29.4 ns
point add, latencyristretto255add/ristretto255/+=, 1 accumulator117 ns117 ns .. 118 ns
point subtractgf2_127group.sub/binary.127/mode=throughput18.6 ns18.6 ns .. 18.7 ns
point subtractgf2_127-lambdagroup.sub/binary-lambda.127/mode=throughput17.6 ns17.6 ns .. 17.7 ns
point subtractgf2_127-wgroup.sub/binary-w.127/mode=throughput17.7 ns17.6 ns .. 17.7 ns
point subtractgf2_127-ugroup.sub/binary-u.127/mode=throughput13.1 ns13.1 ns .. 13.1 ns
point subtractgf2_109group.sub/binary.109/mode=throughput20.7 ns20.6 ns .. 20.7 ns
point subtractgf2_109-lambdagroup.sub/binary-lambda.109/mode=throughput19.1 ns19.0 ns .. 19.2 ns
point subtractgf2_109-wgroup.sub/binary-w.109/mode=throughput19.2 ns19.1 ns .. 19.2 ns
point subtractgf2_109-ugroup.sub/binary-u.109/mode=throughput13.6 ns13.6 ns .. 13.7 ns
point subtractgf2_122group.sub/binary.122/mode=throughput20.1 ns20.1 ns .. 20.2 ns
point subtractgf2_122-lambdagroup.sub/binary-lambda.122/mode=throughput20.5 ns20.4 ns .. 20.6 ns
point subtractgf2_122-wgroup.sub/binary-w.122/mode=throughput20.5 ns20.5 ns .. 20.6 ns
point subtractgf2_122-ugroup.sub/binary-u.122/mode=throughput13.9 ns13.9 ns .. 13.9 ns
point subtractgf2_122-glsgroup.sub/binary.122-gls/mode=throughput19.5 ns19.5 ns .. 19.6 ns
point subtractgf2_122-gls-lambdagroup.sub/binary-lambda.122-gls/mode=throughput20.4 ns20.4 ns .. 20.5 ns
point subtractgf2_122-gls-wgroup.sub/binary-w.122-gls/mode=throughput20.5 ns20.5 ns .. 20.5 ns
point subtractgf2_122-gls-ugroup.sub/binary-u.122-gls/mode=throughput14.0 ns13.9 ns .. 14.0 ns
point subtracttwisted61x2group.sub/twisted.61x2/mode=throughput25.2 ns25.2 ns .. 25.2 ns
point subtractristretto255add/ristretto255/-=, 8 accumulators113 ns112 ns .. 113 ns
point negategf2_127negate/gf2_127/affine (y += x)0.56 ns0.56 ns .. 0.57 ns
point negategf2_127-lambdagroup.neg/binary-lambda.1270.56 ns0.56 ns .. 0.56 ns
point negategf2_127-wgroup.neg/binary-w.1270.56 ns0.56 ns .. 0.56 ns
point negategf2_127-ugroup.neg/binary-u.1270.56 ns0.56 ns .. 0.56 ns
point negategf2_109negate/gf2_109/affine (y += x)0.56 ns0.56 ns .. 0.56 ns
point negategf2_109-lambdagroup.neg/binary-lambda.1090.56 ns0.56 ns .. 0.56 ns
point negategf2_109-wgroup.neg/binary-w.1090.57 ns0.56 ns .. 0.57 ns
point negategf2_109-ugroup.neg/binary-u.1090.56 ns0.56 ns .. 0.57 ns
point negategf2_122negate/gf2_122/affine (y += x)0.56 ns0.55 ns .. 0.56 ns
point negategf2_122-lambdagroup.neg/binary-lambda.1220.56 ns0.56 ns .. 0.57 ns
point negategf2_122-wgroup.neg/binary-w.1220.58 ns0.57 ns .. 0.58 ns
point negategf2_122-ugroup.neg/binary-u.1220.58 ns0.57 ns .. 0.58 ns
point negategf2_122-glsgroup.neg/binary.122-gls1.17 ns1.16 ns .. 1.17 ns
point negategf2_122-gls-lambdagroup.neg/binary-lambda.122-gls0.57 ns0.57 ns .. 0.58 ns
point negategf2_122-gls-wgroup.neg/binary-w.122-gls0.56 ns0.56 ns .. 0.56 ns
point negategf2_122-gls-ugroup.neg/binary-u.122-gls0.56 ns0.56 ns .. 0.56 ns
point negateedwards127group.neg/edwards.1271.98 ns1.97 ns .. 1.98 ns
point negateedwards107group.neg/edwards.1071.40 ns1.39 ns .. 1.40 ns
point negatetwisted128group.neg/twisted.1281.15 ns1.14 ns .. 1.15 ns
point negateweier127group.neg/weier.1271.10 ns1.09 ns .. 1.10 ns
point negateweier127-jacobiangroup.neg/weier-jacobian.1271.10 ns1.10 ns .. 1.10 ns
point negateweier107group.neg/weier.1070.82 ns0.82 ns .. 0.82 ns
point negateweier107-jacobiangroup.neg/weier-jacobian.1070.82 ns0.82 ns .. 0.83 ns
point negateedwards61x2group.neg/edwards.61x20.78 ns0.77 ns .. 0.78 ns
point negateweier61x2group.neg/weier.61x20.57 ns0.57 ns .. 0.57 ns
point negateweier61x2-jacobiangroup.neg/weier-jacobian.61x20.57 ns0.57 ns .. 0.57 ns
point negatetwisted61x2group.neg/twisted.61x20.73 ns0.71 ns .. 0.76 ns
point negatetwisted64x2group.neg/twisted.64x20.73 ns0.71 ns .. 0.76 ns
point negatetwisted-goldilocks2group.neg/twisted.goldilocks21.32 ns1.31 ns .. 1.32 ns
point negateristretto255negate/ristretto255/-P6.47 ns6.38 ns .. 6.56 ns
point negatesecp256k1negate/secp256k1/PublicKey::negate24.7 ns24.5 ns .. 24.8 ns
point prepare, one at a timegf2_127group.prepare/binary.127/mode=indep6.38 ns6.33 ns .. 6.42 ns
point prepare, one at a timegf2_127-lambdagroup.prepare/binary-lambda.127/mode=indep129 ns128 ns .. 129 ns
point prepare, one at a timegf2_127-wgroup.prepare/binary-w.127/mode=indep0.45 ns0.44 ns .. 0.47 ns
point prepare, one at a timegf2_127-ugroup.prepare/binary-u.127/mode=indep0.48 ns0.46 ns .. 0.51 ns
point prepare, one at a timegf2_109group.prepare/binary.109/mode=indep4.23 ns4.22 ns .. 4.24 ns
point prepare, one at a timegf2_109-lambdagroup.prepare/binary-lambda.109/mode=indep503 ns502 ns .. 504 ns
point prepare, one at a timegf2_109-wgroup.prepare/binary-w.109/mode=indep0.44 ns0.42 ns .. 0.46 ns
point prepare, one at a timegf2_109-ugroup.prepare/binary-u.109/mode=indep0.48 ns0.45 ns .. 0.51 ns
point prepare, one at a timegf2_122group.prepare/binary.122/mode=indep4.91 ns4.90 ns .. 4.92 ns
point prepare, one at a timegf2_122-lambdagroup.prepare/binary-lambda.122/mode=indep251 ns250 ns .. 251 ns
point prepare, one at a timegf2_122-wgroup.prepare/binary-w.122/mode=indep0.44 ns0.42 ns .. 0.46 ns
point prepare, one at a timegf2_122-ugroup.prepare/binary-u.122/mode=indep0.50 ns0.47 ns .. 0.52 ns
point prepare, one at a timegf2_122-glsgroup.prepare/binary.122-gls/mode=indep4.22 ns4.20 ns .. 4.25 ns
point prepare, one at a timegf2_122-gls-lambdagroup.prepare/binary-lambda.122-gls/mode=indep249 ns248 ns .. 250 ns
point prepare, one at a timegf2_122-gls-wgroup.prepare/binary-w.122-gls/mode=indep0.43 ns0.42 ns .. 0.45 ns
point prepare, one at a timegf2_122-gls-ugroup.prepare/binary-u.122-gls/mode=indep0.44 ns0.42 ns .. 0.45 ns
point prepare, one at a timeedwards127group.prepare/edwards.127/mode=indep663 ns662 ns .. 664 ns
point prepare, one at a timeedwards107group.prepare/edwards.107/mode=indep632 ns630 ns .. 634 ns
point prepare, one at a timetwisted128group.prepare/twisted.128/mode=indep12.5 ns12.4 ns .. 12.5 ns
point prepare, one at a timeweier127group.prepare/weier.127/mode=indep0.81 ns0.81 ns .. 0.82 ns
point prepare, one at a timeweier127-jacobiangroup.prepare/weier-jacobian.127/mode=indep0.81 ns0.81 ns .. 0.81 ns
point prepare, one at a timeweier107group.prepare/weier.107/mode=indep0.82 ns0.81 ns .. 0.82 ns
point prepare, one at a timeweier107-jacobiangroup.prepare/weier-jacobian.107/mode=indep0.81 ns0.80 ns .. 0.81 ns
point prepare, one at a timeedwards61x2group.prepare/edwards.61x2/mode=indep236 ns235 ns .. 236 ns
point prepare, one at a timeweier61x2group.prepare/weier.61x2/mode=indep0.44 ns0.43 ns .. 0.46 ns
point prepare, one at a timeweier61x2-jacobiangroup.prepare/weier-jacobian.61x2/mode=indep0.44 ns0.42 ns .. 0.46 ns
point prepare, one at a timetwisted61x2group.prepare/twisted.61x2/mode=indep8.07 ns8.02 ns .. 8.11 ns
point prepare, one at a timetwisted64x2group.prepare/twisted.64x2/mode=indep8.75 ns8.71 ns .. 8.79 ns
point prepare, one at a timetwisted-goldilocks2group.prepare/twisted.goldilocks2/mode=indep9.45 ns9.41 ns .. 9.50 ns
point prepare, batchedgf2_127group.prepare/binary.127/mode=batch,n=10246.36 ns6.31 ns .. 6.42 ns
point prepare, batchedgf2_127-lambdagroup.prepare/binary-lambda.127/mode=batch,n=10248.18 ns8.16 ns .. 8.20 ns
point prepare, batchedgf2_127-wgroup.prepare/binary-w.127/mode=batch,n=10240.47 ns0.47 ns .. 0.47 ns
point prepare, batchedgf2_127-ugroup.prepare/binary-u.127/mode=batch,n=10240.47 ns0.47 ns .. 0.47 ns
point prepare, batchedgf2_109group.prepare/binary.109/mode=batch,n=10244.25 ns4.24 ns .. 4.27 ns
point prepare, batchedgf2_109-lambdagroup.prepare/binary-lambda.109/mode=batch,n=10248.13 ns8.10 ns .. 8.16 ns
point prepare, batchedgf2_109-wgroup.prepare/binary-w.109/mode=batch,n=10240.47 ns0.46 ns .. 0.47 ns
point prepare, batchedgf2_109-ugroup.prepare/binary-u.109/mode=batch,n=10240.46 ns0.46 ns .. 0.47 ns
point prepare, batchedgf2_122group.prepare/binary.122/mode=batch,n=10245.01 ns5.00 ns .. 5.03 ns
point prepare, batchedgf2_122-lambdagroup.prepare/binary-lambda.122/mode=batch,n=10248.18 ns8.16 ns .. 8.19 ns
point prepare, batchedgf2_122-wgroup.prepare/binary-w.122/mode=batch,n=10240.47 ns0.46 ns .. 0.47 ns
point prepare, batchedgf2_122-ugroup.prepare/binary-u.122/mode=batch,n=10240.49 ns0.49 ns .. 0.50 ns
point prepare, batchedgf2_122-glsgroup.prepare/binary.122-gls/mode=batch,n=10244.27 ns4.26 ns .. 4.29 ns
point prepare, batchedgf2_122-gls-lambdagroup.prepare/binary-lambda.122-gls/mode=batch,n=10248.11 ns8.08 ns .. 8.14 ns
point prepare, batchedgf2_122-gls-wgroup.prepare/binary-w.122-gls/mode=batch,n=10240.68 ns0.68 ns .. 0.68 ns
point prepare, batchedgf2_122-gls-ugroup.prepare/binary-u.122-gls/mode=batch,n=10240.68 ns0.68 ns .. 0.68 ns
point prepare, batchededwards127group.prepare/edwards.127/mode=batch,n=102439.9 ns39.9 ns .. 40.0 ns
point prepare, batchededwards107group.prepare/edwards.107/mode=batch,n=102437.9 ns37.8 ns .. 38.1 ns
point prepare, batchedtwisted128group.prepare/twisted.128/mode=batch,n=102412.7 ns12.6 ns .. 12.7 ns
point prepare, batchedweier127group.prepare/weier.127/mode=batch,n=10241.00 ns0.99 ns .. 1.00 ns
point prepare, batchedweier127-jacobiangroup.prepare/weier-jacobian.127/mode=batch,n=10240.99 ns0.98 ns .. 0.99 ns
point prepare, batchedweier107group.prepare/weier.107/mode=batch,n=10240.63 ns0.62 ns .. 0.63 ns
point prepare, batchedweier107-jacobiangroup.prepare/weier-jacobian.107/mode=batch,n=10240.63 ns0.62 ns .. 0.63 ns
point prepare, batchededwards61x2group.prepare/edwards.61x2/mode=batch,n=102434.9 ns34.8 ns .. 35.1 ns
point prepare, batchedweier61x2group.prepare/weier.61x2/mode=batch,n=10240.52 ns0.52 ns .. 0.53 ns
point prepare, batchedweier61x2-jacobiangroup.prepare/weier-jacobian.61x2/mode=batch,n=10240.52 ns0.52 ns .. 0.52 ns
point prepare, batchedtwisted61x2group.prepare/twisted.61x2/mode=batch,n=10247.93 ns7.89 ns .. 7.96 ns
point prepare, batchedtwisted64x2group.prepare/twisted.64x2/mode=batch,n=10248.79 ns8.76 ns .. 8.82 ns
point prepare, batchedtwisted-goldilocks2group.prepare/twisted.goldilocks2/mode=batch,n=10249.54 ns9.49 ns .. 9.59 ns
is identitygf2_127group.is_identity/binary.1271.02 ns1.01 ns .. 1.02 ns
is identitygf2_127-lambdagroup.is_identity/binary-lambda.1270.82 ns0.82 ns .. 0.83 ns
is identitygf2_127-wgroup.is_identity/binary-w.1270.82 ns0.81 ns .. 0.82 ns
is identitygf2_127-ugroup.is_identity/binary-u.1270.83 ns0.83 ns .. 0.84 ns
is identitygf2_109group.is_identity/binary.1090.94 ns0.94 ns .. 0.94 ns
is identitygf2_109-lambdagroup.is_identity/binary-lambda.1090.80 ns0.80 ns .. 0.80 ns
is identitygf2_109-wgroup.is_identity/binary-w.1090.80 ns0.80 ns .. 0.80 ns
is identitygf2_109-ugroup.is_identity/binary-u.1090.80 ns0.80 ns .. 0.80 ns
is identitygf2_122group.is_identity/binary.1220.87 ns0.87 ns .. 0.88 ns
is identitygf2_122-lambdagroup.is_identity/binary-lambda.1220.81 ns0.81 ns .. 0.81 ns
is identitygf2_122-wgroup.is_identity/binary-w.1220.84 ns0.83 ns .. 0.85 ns
is identitygf2_122-ugroup.is_identity/binary-u.1220.85 ns0.84 ns .. 0.85 ns
is identitygf2_122-glsgroup.is_identity/binary.122-gls0.87 ns0.87 ns .. 0.88 ns
is identitygf2_122-gls-lambdagroup.is_identity/binary-lambda.122-gls0.80 ns0.80 ns .. 0.81 ns
is identitygf2_122-gls-wgroup.is_identity/binary-w.122-gls0.81 ns0.81 ns .. 0.81 ns
is identitygf2_122-gls-ugroup.is_identity/binary-u.122-gls0.80 ns0.80 ns .. 0.80 ns
is identityedwards127group.is_identity/edwards.1271.30 ns1.30 ns .. 1.31 ns
is identityedwards107group.is_identity/edwards.1071.18 ns1.18 ns .. 1.19 ns
is identitytwisted128group.is_identity/twisted.1280.50 ns0.50 ns .. 0.50 ns
is identityweier127group.is_identity/weier.1270.40 ns0.40 ns .. 0.41 ns
is identityweier127-jacobiangroup.is_identity/weier-jacobian.1270.40 ns0.40 ns .. 0.41 ns
is identityweier107group.is_identity/weier.1070.91 ns0.90 ns .. 0.91 ns
is identityweier107-jacobiangroup.is_identity/weier-jacobian.1070.90 ns0.90 ns .. 0.90 ns
is identityedwards61x2group.is_identity/edwards.61x20.54 ns0.53 ns .. 0.55 ns
is identityweier61x2group.is_identity/weier.61x20.41 ns0.40 ns .. 0.41 ns
is identityweier61x2-jacobiangroup.is_identity/weier-jacobian.61x20.40 ns0.40 ns .. 0.40 ns
is identitytwisted61x2group.is_identity/twisted.61x20.50 ns0.50 ns .. 0.50 ns
is identitytwisted64x2group.is_identity/twisted.64x20.50 ns0.50 ns .. 0.51 ns
is identitytwisted-goldilocks2group.is_identity/twisted.goldilocks20.60 ns0.59 ns .. 0.60 ns
equals addend, matchgf2_127group.equals/binary.127/mode=match3.97 ns3.96 ns .. 3.98 ns
equals addend, matchgf2_127-lambdagroup.equals/binary-lambda.127/mode=match3.95 ns3.94 ns .. 3.96 ns
equals addend, matchgf2_127-wgroup.equals/binary-w.127/mode=match4.04 ns4.03 ns .. 4.04 ns
equals addend, matchgf2_127-ugroup.equals/binary-u.127/mode=match6.31 ns6.29 ns .. 6.33 ns
equals addend, matchgf2_109group.equals/binary.109/mode=match4.05 ns4.04 ns .. 4.06 ns
equals addend, matchgf2_109-lambdagroup.equals/binary-lambda.109/mode=match3.96 ns3.94 ns .. 3.97 ns
equals addend, matchgf2_109-wgroup.equals/binary-w.109/mode=match4.16 ns4.15 ns .. 4.18 ns
equals addend, matchgf2_109-ugroup.equals/binary-u.109/mode=match5.84 ns5.83 ns .. 5.86 ns
equals addend, matchgf2_122group.equals/binary.122/mode=match4.07 ns4.05 ns .. 4.08 ns
equals addend, matchgf2_122-lambdagroup.equals/binary-lambda.122/mode=match4.21 ns4.20 ns .. 4.23 ns
equals addend, matchgf2_122-wgroup.equals/binary-w.122/mode=match4.23 ns4.22 ns .. 4.24 ns
equals addend, matchgf2_122-ugroup.equals/binary-u.122/mode=match5.59 ns5.58 ns .. 5.60 ns
equals addend, matchgf2_122-glsgroup.equals/binary.122-gls/mode=match4.06 ns4.05 ns .. 4.07 ns
equals addend, matchgf2_122-gls-lambdagroup.equals/binary-lambda.122-gls/mode=match4.20 ns4.19 ns .. 4.21 ns
equals addend, matchgf2_122-gls-wgroup.equals/binary-w.122-gls/mode=match4.23 ns4.22 ns .. 4.25 ns
equals addend, matchgf2_122-gls-ugroup.equals/binary-u.122-gls/mode=match5.60 ns5.58 ns .. 5.61 ns
equals addend, matchtwisted61x2group.equals/twisted.61x2/mode=match8.55 ns8.54 ns .. 8.57 ns
equals addend, mismatchgf2_127group.equals/binary.127/mode=mismatch4.25 ns4.21 ns .. 4.30 ns
equals addend, mismatchgf2_127-lambdagroup.equals/binary-lambda.127/mode=mismatch4.05 ns4.04 ns .. 4.06 ns
equals addend, mismatchgf2_127-wgroup.equals/binary-w.127/mode=mismatch4.05 ns4.04 ns .. 4.06 ns
equals addend, mismatchgf2_127-ugroup.equals/binary-u.127/mode=mismatch6.44 ns6.41 ns .. 6.46 ns
equals addend, mismatchgf2_109group.equals/binary.109/mode=mismatch4.07 ns4.06 ns .. 4.08 ns
equals addend, mismatchgf2_109-lambdagroup.equals/binary-lambda.109/mode=mismatch3.94 ns3.93 ns .. 3.95 ns
equals addend, mismatchgf2_109-wgroup.equals/binary-w.109/mode=mismatch4.13 ns4.12 ns .. 4.14 ns
equals addend, mismatchgf2_109-ugroup.equals/binary-u.109/mode=mismatch5.82 ns5.81 ns .. 5.83 ns
equals addend, mismatchgf2_122group.equals/binary.122/mode=mismatch4.05 ns4.04 ns .. 4.06 ns
equals addend, mismatchgf2_122-lambdagroup.equals/binary-lambda.122/mode=mismatch4.23 ns4.22 ns .. 4.24 ns
equals addend, mismatchgf2_122-wgroup.equals/binary-w.122/mode=mismatch4.41 ns4.38 ns .. 4.45 ns
equals addend, mismatchgf2_122-ugroup.equals/binary-u.122/mode=mismatch5.97 ns5.92 ns .. 6.03 ns
equals addend, mismatchgf2_122-glsgroup.equals/binary.122-gls/mode=mismatch4.08 ns4.06 ns .. 4.10 ns
equals addend, mismatchgf2_122-gls-lambdagroup.equals/binary-lambda.122-gls/mode=mismatch4.37 ns4.35 ns .. 4.39 ns
equals addend, mismatchgf2_122-gls-wgroup.equals/binary-w.122-gls/mode=mismatch4.26 ns4.24 ns .. 4.28 ns
equals addend, mismatchgf2_122-gls-ugroup.equals/binary-u.122-gls/mode=mismatch5.64 ns5.62 ns .. 5.65 ns
equals addend, mismatchedwards127group.equals/edwards.127/mode=mismatch3.16 ns3.15 ns .. 3.17 ns
equals addend, mismatchedwards107group.equals/edwards.107/mode=mismatch4.93 ns4.91 ns .. 4.95 ns
equals addend, mismatchtwisted128group.equals/twisted.128/mode=mismatch9.45 ns9.43 ns .. 9.47 ns
equals addend, mismatchweier127group.equals/weier.127/mode=mismatch3.53 ns3.52 ns .. 3.54 ns
equals addend, mismatchweier127-jacobiangroup.equals/weier-jacobian.127/mode=mismatch6.60 ns6.58 ns .. 6.62 ns
equals addend, mismatchweier107group.equals/weier.107/mode=mismatch5.81 ns5.80 ns .. 5.83 ns
equals addend, mismatchweier107-jacobiangroup.equals/weier-jacobian.107/mode=mismatch9.23 ns9.20 ns .. 9.26 ns
equals addend, mismatchedwards61x2group.equals/edwards.61x2/mode=mismatch2.97 ns2.96 ns .. 2.98 ns
equals addend, mismatchweier61x2group.equals/weier.61x2/mode=mismatch3.33 ns3.32 ns .. 3.34 ns
equals addend, mismatchweier61x2-jacobiangroup.equals/weier-jacobian.61x2/mode=mismatch7.98 ns7.93 ns .. 8.03 ns
equals addend, mismatchtwisted61x2group.equals/twisted.61x2/mode=mismatch8.85 ns8.79 ns .. 8.91 ns
equals addend, mismatchtwisted64x2group.equals/twisted.64x2/mode=mismatch7.68 ns7.65 ns .. 7.71 ns
equals addend, mismatchtwisted-goldilocks2group.equals/twisted.goldilocks2/mode=mismatch9.42 ns9.36 ns .. 9.50 ns
encode, one at a timegf2_127group.encode/binary.127/mode=indep151 ns149 ns .. 152 ns
encode, one at a timegf2_127-lambdagroup.encode/binary-lambda.127/mode=indep140 ns140 ns .. 141 ns
encode, one at a timegf2_127-wgroup.encode/binary-w.127/mode=indep139 ns139 ns .. 140 ns
encode, one at a timegf2_127-ugroup.encode/binary-u.127/mode=indep137 ns137 ns .. 137 ns
encode, one at a timegf2_109group.encode/binary.109/mode=indep538 ns537 ns .. 540 ns
encode, one at a timegf2_109-lambdagroup.encode/binary-lambda.109/mode=indep530 ns529 ns .. 532 ns
encode, one at a timegf2_109-wgroup.encode/binary-w.109/mode=indep540 ns539 ns .. 541 ns
encode, one at a timegf2_109-ugroup.encode/binary-u.109/mode=indep546 ns545 ns .. 548 ns
encode, one at a timegf2_122group.encode/binary.122/mode=indep294 ns294 ns .. 295 ns
encode, one at a timegf2_122-lambdagroup.encode/binary-lambda.122/mode=indep287 ns286 ns .. 288 ns
encode, one at a timegf2_122-wgroup.encode/binary-w.122/mode=indep302 ns300 ns .. 303 ns
encode, one at a timegf2_122-ugroup.encode/binary-u.122/mode=indep305 ns304 ns .. 306 ns
encode, one at a timegf2_122-glsgroup.encode/binary.122-gls/mode=indep293 ns293 ns .. 294 ns
encode, one at a timegf2_122-gls-lambdagroup.encode/binary-lambda.122-gls/mode=indep297 ns296 ns .. 297 ns
encode, one at a timegf2_122-gls-wgroup.encode/binary-w.122-gls/mode=indep297 ns296 ns .. 297 ns
encode, one at a timegf2_122-gls-ugroup.encode/binary-u.122-gls/mode=indep297 ns296 ns .. 299 ns
encode, one at a timeedwards127group.encode/edwards.127/mode=indep610 ns608 ns .. 611 ns
encode, one at a timeedwards107group.encode/edwards.107/mode=indep600 ns599 ns .. 601 ns
encode, one at a timetwisted128group.encode/twisted.128/mode=indep943 ns942 ns .. 946 ns
encode, one at a timeweier127group.encode/weier.127/mode=indep593 ns591 ns .. 594 ns
encode, one at a timeweier127-jacobiangroup.encode/weier-jacobian.127/mode=indep605 ns602 ns .. 609 ns
encode, one at a timeweier107group.encode/weier.107/mode=indep582 ns579 ns .. 584 ns
encode, one at a timeweier107-jacobiangroup.encode/weier-jacobian.107/mode=indep580 ns578 ns .. 581 ns
encode, one at a timeedwards61x2group.encode/edwards.61x2/mode=indep203 ns202 ns .. 203 ns
encode, one at a timeweier61x2group.encode/weier.61x2/mode=indep190 ns190 ns .. 191 ns
encode, one at a timeweier61x2-jacobiangroup.encode/weier-jacobian.61x2/mode=indep198 ns198 ns .. 199 ns
encode, one at a timetwisted61x2group.encode/twisted.61x2/mode=indep189 ns189 ns .. 190 ns
encode, one at a timetwisted64x2group.encode/twisted.64x2/mode=indep267 ns266 ns .. 268 ns
encode, one at a timetwisted-goldilocks2group.encode/twisted.goldilocks2/mode=indep316 ns316 ns .. 316 ns
encode, batchedgf2_127group.encode/binary.127/mode=batch,n=102422.7 ns22.5 ns .. 23.0 ns
encode, batchedgf2_127-lambdagroup.encode/binary-lambda.127/mode=batch,n=102417.5 ns17.4 ns .. 17.5 ns
encode, batchedgf2_127-wgroup.encode/binary-w.127/mode=batch,n=102417.0 ns17.0 ns .. 17.1 ns
encode, batchedgf2_127-ugroup.encode/binary-u.127/mode=batch,n=102412.6 ns12.5 ns .. 12.6 ns
encode, batchedgf2_109group.encode/binary.109/mode=batch,n=102418.2 ns18.1 ns .. 18.3 ns
encode, batchedgf2_109-lambdagroup.encode/binary-lambda.109/mode=batch,n=102414.1 ns14.1 ns .. 14.2 ns
encode, batchedgf2_109-wgroup.encode/binary-w.109/mode=batch,n=102421.6 ns21.6 ns .. 21.7 ns
encode, batchedgf2_109-ugroup.encode/binary-u.109/mode=batch,n=102421.9 ns21.9 ns .. 22.0 ns
encode, batchedgf2_122group.encode/binary.122/mode=batch,n=102422.1 ns22.0 ns .. 22.1 ns
encode, batchedgf2_122-lambdagroup.encode/binary-lambda.122/mode=batch,n=102417.3 ns17.2 ns .. 17.3 ns
encode, batchedgf2_122-wgroup.encode/binary-w.122/mode=batch,n=102421.2 ns21.0 ns .. 21.4 ns
encode, batchedgf2_122-ugroup.encode/binary-u.122/mode=batch,n=102418.4 ns18.3 ns .. 18.5 ns
encode, batchedgf2_122-glsgroup.encode/binary.122-gls/mode=batch,n=102421.1 ns21.0 ns .. 21.2 ns
encode, batchedgf2_122-gls-lambdagroup.encode/binary-lambda.122-gls/mode=batch,n=102417.9 ns17.8 ns .. 17.9 ns
encode, batchedgf2_122-gls-wgroup.encode/binary-w.122-gls/mode=batch,n=102420.4 ns20.3 ns .. 20.5 ns
encode, batchedgf2_122-gls-ugroup.encode/binary-u.122-gls/mode=batch,n=102418.0 ns18.0 ns .. 18.1 ns
encode, batchededwards127group.encode/edwards.127/mode=batch,n=102431.9 ns31.8 ns .. 32.0 ns
encode, batchededwards107group.encode/edwards.107/mode=batch,n=102435.1 ns35.0 ns .. 35.4 ns
encode, batchedtwisted128group.encode/twisted.128/mode=batch,n=102422.7 ns22.7 ns .. 22.8 ns
encode, batchedweier127group.encode/weier.127/mode=batch,n=102416.7 ns16.7 ns .. 16.8 ns
encode, batchedweier127-jacobiangroup.encode/weier-jacobian.127/mode=batch,n=102423.6 ns23.5 ns .. 23.7 ns
encode, batchedweier107group.encode/weier.107/mode=batch,n=102419.4 ns19.3 ns .. 19.5 ns
encode, batchedweier107-jacobiangroup.encode/weier-jacobian.107/mode=batch,n=102425.5 ns25.4 ns .. 25.6 ns
encode, batchededwards61x2group.encode/edwards.61x2/mode=batch,n=102435.0 ns34.9 ns .. 35.1 ns
encode, batchedweier61x2group.encode/weier.61x2/mode=batch,n=102415.3 ns15.2 ns .. 15.3 ns
encode, batchedweier61x2-jacobiangroup.encode/weier-jacobian.61x2/mode=batch,n=102424.8 ns24.7 ns .. 24.9 ns
encode, batchedtwisted61x2group.encode/twisted.61x2/mode=batch,n=102414.9 ns14.9 ns .. 15.0 ns
encode, batchedtwisted64x2group.encode/twisted.64x2/mode=batch,n=102422.6 ns22.5 ns .. 22.7 ns
encode, batchedtwisted-goldilocks2group.encode/twisted.goldilocks2/mode=batch,n=102422.9 ns22.9 ns .. 23.0 ns
decode, one at a timegf2_127group.decode/binary.127/mode=indep164 ns163 ns .. 164 ns
decode, one at a timegf2_127-lambdagroup.decode/binary-lambda.127/mode=indep155 ns154 ns .. 155 ns
decode, one at a timegf2_127-wgroup.decode/binary-w.127/mode=indep155 ns154 ns .. 155 ns
decode, one at a timegf2_127-ugroup.decode/binary-u.127/mode=indep162 ns161 ns .. 162 ns
decode, one at a timegf2_109group.decode/binary.109/mode=indep554 ns553 ns .. 556 ns
decode, one at a timegf2_109-lambdagroup.decode/binary-lambda.109/mode=indep549 ns548 ns .. 551 ns
decode, one at a timegf2_109-wgroup.decode/binary-w.109/mode=indep555 ns553 ns .. 556 ns
decode, one at a timegf2_109-ugroup.decode/binary-u.109/mode=indep555 ns555 ns .. 556 ns
decode, one at a timegf2_122group.decode/binary.122/mode=indep313 ns312 ns .. 313 ns
decode, one at a timegf2_122-lambdagroup.decode/binary-lambda.122/mode=indep314 ns313 ns .. 314 ns
decode, one at a timegf2_122-wgroup.decode/binary-w.122/mode=indep307 ns306 ns .. 308 ns
decode, one at a timegf2_122-ugroup.decode/binary-u.122/mode=indep317 ns315 ns .. 319 ns
decode, one at a timegf2_122-glsgroup.decode/binary.122-gls/mode=indep313 ns312 ns .. 313 ns
decode, one at a timegf2_122-gls-lambdagroup.decode/binary-lambda.122-gls/mode=indep311 ns310 ns .. 312 ns
decode, one at a timegf2_122-gls-wgroup.decode/binary-w.122-gls/mode=indep305 ns304 ns .. 306 ns
decode, one at a timegf2_122-gls-ugroup.decode/binary-u.122-gls/mode=indep313 ns311 ns .. 314 ns
decode, one at a timeedwards127group.decode/edwards.127/mode=indep540 ns539 ns .. 541 ns
decode, one at a timeedwards107group.decode/edwards.107/mode=indep424 ns423 ns .. 426 ns
decode, one at a timetwisted128group.decode/twisted.128/mode=indep960 ns959 ns .. 962 ns
decode, one at a timeweier127group.decode/weier.127/mode=indep541 ns540 ns .. 543 ns
decode, one at a timeweier127-jacobiangroup.decode/weier-jacobian.127/mode=indep543 ns541 ns .. 545 ns
decode, one at a timeweier107group.decode/weier.107/mode=indep421 ns420 ns .. 422 ns
decode, one at a timeweier107-jacobiangroup.decode/weier-jacobian.107/mode=indep419 ns418 ns .. 421 ns
decode, one at a timeedwards61x2group.decode/edwards.61x2/mode=indep437 ns436 ns .. 439 ns
decode, one at a timeweier61x2group.decode/weier.61x2/mode=indep441 ns440 ns .. 442 ns
decode, one at a timeweier61x2-jacobiangroup.decode/weier-jacobian.61x2/mode=indep440 ns439 ns .. 441 ns
decode, one at a timetwisted61x2group.decode/twisted.61x2/mode=indep448 ns447 ns .. 449 ns
decode, one at a timetwisted64x2group.decode/twisted.64x2/mode=indep650 ns648 ns .. 652 ns
decode, one at a timetwisted-goldilocks2group.decode/twisted.goldilocks2/mode=indep1.91 µs1.91 µs .. 1.91 µs
decode, batchedgf2_127group.decode/binary.127/mode=batch,n=102425.7 ns25.6 ns .. 25.7 ns
decode, batchedgf2_127-lambdagroup.decode/binary-lambda.127/mode=batch,n=102424.0 ns24.0 ns .. 24.1 ns
decode, batchedgf2_127-wgroup.decode/binary-w.127/mode=batch,n=102422.6 ns22.5 ns .. 22.6 ns
decode, batchedgf2_127-ugroup.decode/binary-u.127/mode=batch,n=102427.5 ns27.5 ns .. 27.6 ns
decode, batchedgf2_109group.decode/binary.109/mode=batch,n=102426.7 ns26.6 ns .. 26.8 ns
decode, batchedgf2_109-lambdagroup.decode/binary-lambda.109/mode=batch,n=102426.5 ns26.4 ns .. 26.5 ns
decode, batchedgf2_109-wgroup.decode/binary-w.109/mode=batch,n=102424.4 ns24.3 ns .. 24.4 ns
decode, batchedgf2_109-ugroup.decode/binary-u.109/mode=batch,n=102427.7 ns27.7 ns .. 27.8 ns
decode, batchedgf2_122group.decode/binary.122/mode=batch,n=102424.0 ns23.9 ns .. 24.1 ns
decode, batchedgf2_122-lambdagroup.decode/binary-lambda.122/mode=batch,n=102424.1 ns24.0 ns .. 24.1 ns
decode, batchedgf2_122-wgroup.decode/binary-w.122/mode=batch,n=102421.6 ns21.5 ns .. 21.7 ns
decode, batchedgf2_122-ugroup.decode/binary-u.122/mode=batch,n=102426.0 ns25.8 ns .. 26.2 ns
decode, batchedgf2_122-glsgroup.decode/binary.122-gls/mode=batch,n=102422.7 ns22.6 ns .. 22.7 ns
decode, batchedgf2_122-gls-lambdagroup.decode/binary-lambda.122-gls/mode=batch,n=102422.6 ns22.6 ns .. 22.7 ns
decode, batchedgf2_122-gls-wgroup.decode/binary-w.122-gls/mode=batch,n=102420.9 ns20.8 ns .. 21.0 ns
decode, batchedgf2_122-gls-ugroup.decode/binary-u.122-gls/mode=batch,n=102424.7 ns24.6 ns .. 24.8 ns
decode, batchededwards127group.decode/edwards.127/mode=batch,n=1024541 ns540 ns .. 543 ns
decode, batchededwards107group.decode/edwards.107/mode=batch,n=1024426 ns424 ns .. 427 ns
decode, batchedtwisted128group.decode/twisted.128/mode=batch,n=1024962 ns960 ns .. 965 ns
decode, batchedweier127group.decode/weier.127/mode=batch,n=1024539 ns538 ns .. 541 ns
decode, batchedweier127-jacobiangroup.decode/weier-jacobian.127/mode=batch,n=1024542 ns541 ns .. 543 ns
decode, batchedweier107group.decode/weier.107/mode=batch,n=1024422 ns421 ns .. 423 ns
decode, batchedweier107-jacobiangroup.decode/weier-jacobian.107/mode=batch,n=1024421 ns420 ns .. 422 ns
decode, batchededwards61x2group.decode/edwards.61x2/mode=batch,n=1024441 ns439 ns .. 442 ns
decode, batchedweier61x2group.decode/weier.61x2/mode=batch,n=1024448 ns447 ns .. 449 ns
decode, batchedweier61x2-jacobiangroup.decode/weier-jacobian.61x2/mode=batch,n=1024445 ns444 ns .. 446 ns
decode, batchedtwisted61x2group.decode/twisted.61x2/mode=batch,n=1024450 ns449 ns .. 451 ns
decode, batchedtwisted64x2group.decode/twisted.64x2/mode=batch,n=1024647 ns646 ns .. 649 ns
decode, batchedtwisted-goldilocks2group.decode/twisted.goldilocks2/mode=batch,n=10241.92 µs1.92 µs .. 1.93 µs
hash to curve, one at a timexorhash_to_curve/sha256 (XOR baseline)53.4 ns52.9 ns .. 53.9 ns
hash to curve, one at a timegf2_127hash_to_curve/gf2_127/pornin map x1256 ns254 ns .. 258 ns
hash to curve, one at a timegf2_127-lambdah2c/binary-lambda.127/mode=indep394 ns392 ns .. 396 ns
hash to curve, one at a timegf2_127-wh2c/binary-w.127/mode=indep392 ns391 ns .. 393 ns
hash to curve, one at a timegf2_127-uh2c/binary-u.127/mode=indep401 ns400 ns .. 403 ns
hash to curve, one at a timegf2_109hash_to_curve/gf2_109/pornin map x1675 ns673 ns .. 677 ns
hash to curve, one at a timegf2_109-lambdah2c/binary-lambda.109/mode=indep1.16 µs1.16 µs .. 1.16 µs
hash to curve, one at a timegf2_109-wh2c/binary-w.109/mode=indep1.14 µs1.13 µs .. 1.14 µs
hash to curve, one at a timegf2_109-uh2c/binary-u.109/mode=indep1.15 µs1.15 µs .. 1.16 µs
hash to curve, one at a timegf2_122hash_to_curve/gf2_122/pornin map x1392 ns391 ns .. 393 ns
hash to curve, one at a timegf2_122-lambdah2c/binary-lambda.122/mode=indep679 ns677 ns .. 680 ns
hash to curve, one at a timegf2_122-wh2c/binary-w.122/mode=indep654 ns653 ns .. 656 ns
hash to curve, one at a timegf2_122-uh2c/binary-u.122/mode=indep674 ns672 ns .. 676 ns
hash to curve, one at a timegf2_122-glshash_to_curve/gf2_122-gls/pornin map x1394 ns393 ns .. 395 ns
hash to curve, one at a timegf2_122-gls-lambdah2c/binary-lambda.122-gls/mode=indep692 ns688 ns .. 696 ns
hash to curve, one at a timegf2_122-gls-wh2c/binary-w.122-gls/mode=indep659 ns658 ns .. 660 ns
hash to curve, one at a timegf2_122-gls-uh2c/binary-u.122-gls/mode=indep678 ns676 ns .. 680 ns
hash to curve, one at a timeedwards127h2c/edwards.127/mode=indep1.22 µs1.22 µs .. 1.23 µs
hash to curve, one at a timeedwards107h2c/edwards.107/mode=indep919 ns916 ns .. 922 ns
hash to curve, one at a timetwisted128h2c/twisted.128/mode=indep1.97 µs1.96 µs .. 1.97 µs
hash to curve, one at a timeweier127h2c/weier.127/mode=indep1.16 µs1.16 µs .. 1.16 µs
hash to curve, one at a timeweier127-jacobianh2c/weier-jacobian.127/mode=indep1.15 µs1.15 µs .. 1.16 µs
hash to curve, one at a timeweier107h2c/weier.107/mode=indep892 ns890 ns .. 895 ns
hash to curve, one at a timeweier107-jacobianh2c/weier-jacobian.107/mode=indep886 ns884 ns .. 888 ns
hash to curve, one at a timeedwards61x2h2c/edwards.61x2/mode=indep707 ns705 ns .. 708 ns
hash to curve, one at a timeweier61x2h2c/weier.61x2/mode=indep696 ns694 ns .. 697 ns
hash to curve, one at a timeweier61x2-jacobianh2c/weier-jacobian.61x2/mode=indep702 ns700 ns .. 704 ns
hash to curve, one at a timetwisted61x2h2c/twisted.61x2/mode=indep706 ns704 ns .. 708 ns
hash to curve, one at a timetwisted64x2h2c/twisted.64x2/mode=indep1.00 µs999 ns .. 1.01 µs
hash to curve, one at a timetwisted-goldilocks2h2c/twisted.goldilocks2/mode=indep2.21 µs2.21 µs .. 2.22 µs
hash to curve, one at a timeristretto255hash_to_curve/ristretto255/hash_from_bytes<Sha512>6.03 µs6.02 µs .. 6.05 µs
hash to curve, one at a timesecp256k1hash_to_curve/secp256k1/ellswift decode6.16 µs6.14 µs .. 6.18 µs
hash to curve, batchedgf2_127hash_to_curve/gf2_127/pornin map x1, batched103 ns102 ns .. 103 ns
hash to curve, batchedgf2_127-lambdah2c/binary-lambda.127/mode=batch,n=1024114 ns114 ns .. 115 ns
hash to curve, batchedgf2_127-wh2c/binary-w.127/mode=batch,n=1024119 ns119 ns .. 120 ns
hash to curve, batchedgf2_127-uh2c/binary-u.127/mode=batch,n=1024125 ns124 ns .. 125 ns
hash to curve, batchedgf2_109hash_to_curve/gf2_109/pornin map x1, batched114 ns113 ns .. 114 ns
hash to curve, batchedgf2_109-lambdah2c/binary-lambda.109/mode=batch,n=1024124 ns124 ns .. 125 ns
hash to curve, batchedgf2_109-wh2c/binary-w.109/mode=batch,n=1024120 ns119 ns .. 121 ns
hash to curve, batchedgf2_109-uh2c/binary-u.109/mode=batch,n=1024125 ns125 ns .. 125 ns
hash to curve, batchedgf2_122hash_to_curve/gf2_122/pornin map x1, batched103 ns102 ns .. 103 ns
hash to curve, batchedgf2_122-lambdah2c/binary-lambda.122/mode=batch,n=1024115 ns115 ns .. 116 ns
hash to curve, batchedgf2_122-wh2c/binary-w.122/mode=batch,n=1024116 ns116 ns .. 117 ns
hash to curve, batchedgf2_122-uh2c/binary-u.122/mode=batch,n=1024127 ns125 ns .. 128 ns
hash to curve, batchedgf2_122-glshash_to_curve/gf2_122-gls/pornin map x1, batched101 ns101 ns .. 102 ns
hash to curve, batchedgf2_122-gls-lambdah2c/binary-lambda.122-gls/mode=batch,n=1024116 ns115 ns .. 116 ns
hash to curve, batchedgf2_122-gls-wh2c/binary-w.122-gls/mode=batch,n=1024116 ns115 ns .. 116 ns
hash to curve, batchedgf2_122-gls-uh2c/binary-u.122-gls/mode=batch,n=1024121 ns120 ns .. 121 ns
hash to curve, batchededwards127h2c/edwards.127/mode=batch,n=10241.24 µs1.23 µs .. 1.24 µs
hash to curve, batchededwards107h2c/edwards.107/mode=batch,n=1024916 ns914 ns .. 919 ns
hash to curve, batchedtwisted128h2c/twisted.128/mode=batch,n=10241.96 µs1.96 µs .. 1.96 µs
hash to curve, batchedweier127h2c/weier.127/mode=batch,n=10241.17 µs1.16 µs .. 1.17 µs
hash to curve, batchedweier127-jacobianh2c/weier-jacobian.127/mode=batch,n=10241.16 µs1.16 µs .. 1.16 µs
hash to curve, batchedweier107h2c/weier.107/mode=batch,n=1024901 ns899 ns .. 904 ns
hash to curve, batchedweier107-jacobianh2c/weier-jacobian.107/mode=batch,n=1024893 ns891 ns .. 895 ns
hash to curve, batchededwards61x2h2c/edwards.61x2/mode=batch,n=1024706 ns704 ns .. 708 ns
hash to curve, batchedweier61x2h2c/weier.61x2/mode=batch,n=1024698 ns696 ns .. 700 ns
hash to curve, batchedweier61x2-jacobianh2c/weier-jacobian.61x2/mode=batch,n=1024698 ns696 ns .. 700 ns
hash to curve, batchedtwisted61x2h2c/twisted.61x2/mode=batch,n=1024711 ns708 ns .. 713 ns
hash to curve, batchedtwisted64x2h2c/twisted.64x2/mode=batch,n=10241.00 µs1.00 µs .. 1.01 µs
hash to curve, batchedtwisted-goldilocks2h2c/twisted.goldilocks2/mode=batch,n=10242.24 µs2.23 µs .. 2.24 µs
hash to addend, one at a timegf2_127-lambdahash_to_curve/gf2_127-lambda/pornin map x1 to (x, λ)245 ns244 ns .. 246 ns
hash to addend, one at a timegf2_127-whash_to_curve/gf2_127-w/pornin map x1 to (x, λ)244 ns243 ns .. 245 ns
hash to addend, one at a timegf2_127-uhash_to_curve/gf2_127-u/pornin map x1 to (u, v)249 ns248 ns .. 250 ns
hash to addend, one at a timegf2_109-lambdahash_to_curve/gf2_109-lambda/pornin map x1 to (x, λ)655 ns653 ns .. 657 ns
hash to addend, one at a timegf2_109-whash_to_curve/gf2_109-w/pornin map x1 to (x, λ)652 ns650 ns .. 653 ns
hash to addend, one at a timegf2_109-uhash_to_curve/gf2_109-u/pornin map x1 to (u, v)657 ns656 ns .. 659 ns
hash to addend, one at a timegf2_122-lambdahash_to_curve/gf2_122-lambda/pornin map x1 to (x, λ)381 ns380 ns .. 382 ns
hash to addend, one at a timegf2_122-whash_to_curve/gf2_122-w/pornin map x1 to (x, λ)381 ns380 ns .. 382 ns
hash to addend, one at a timegf2_122-uhash_to_curve/gf2_122-u/pornin map x1 to (u, v)391 ns390 ns .. 392 ns
hash to addend, one at a timegf2_122-gls-lambdahash_to_curve/gf2_122-gls-lambda/pornin map x1 to (x, λ)385 ns384 ns .. 386 ns
hash to addend, one at a timegf2_122-gls-whash_to_curve/gf2_122-gls-w/pornin map x1 to (x, λ)385 ns384 ns .. 386 ns
hash to addend, one at a timegf2_122-gls-uhash_to_curve/gf2_122-gls-u/pornin map x1 to (u, v)390 ns389 ns .. 390 ns
hash to addend, batchedgf2_127-lambdahash_to_curve/gf2_127-lambda/pornin map x1 to (x, λ), batched92.7 ns92.4 ns .. 93.0 ns
hash to addend, batchedgf2_127-whash_to_curve/gf2_127-w/pornin map x1 to (x, λ), batched92.8 ns92.4 ns .. 93.2 ns
hash to addend, batchedgf2_127-uhash_to_curve/gf2_127-u/pornin map x1 to (u, v), batched98.0 ns97.4 ns .. 98.6 ns
hash to addend, batchedgf2_109-lambdahash_to_curve/gf2_109-lambda/pornin map x1 to (x, λ), batched105 ns104 ns .. 105 ns
hash to addend, batchedgf2_109-whash_to_curve/gf2_109-w/pornin map x1 to (x, λ), batched104 ns104 ns .. 104 ns
hash to addend, batchedgf2_109-uhash_to_curve/gf2_109-u/pornin map x1 to (u, v), batched110 ns109 ns .. 110 ns
hash to addend, batchedgf2_122-lambdahash_to_curve/gf2_122-lambda/pornin map x1 to (x, λ), batched95.0 ns94.7 ns .. 95.2 ns
hash to addend, batchedgf2_122-whash_to_curve/gf2_122-w/pornin map x1 to (x, λ), batched95.2 ns95.0 ns .. 95.5 ns
hash to addend, batchedgf2_122-uhash_to_curve/gf2_122-u/pornin map x1 to (u, v), batched99.3 ns99.0 ns .. 99.5 ns
hash to addend, batchedgf2_122-gls-lambdahash_to_curve/gf2_122-gls-lambda/pornin map x1 to (x, λ), batched95.0 ns94.7 ns .. 95.4 ns
hash to addend, batchedgf2_122-gls-whash_to_curve/gf2_122-gls-w/pornin map x1 to (x, λ), batched94.6 ns94.4 ns .. 94.9 ns
hash to addend, batchedgf2_122-gls-uhash_to_curve/gf2_122-gls-u/pornin map x1 to (u, v), batched97.6 ns97.4 ns .. 97.8 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 bytes12511
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 formulas4431212441136
gf2_127-lambdaincompleteλ-projective (X:L:Z) accumulators4421112448523
gf2_127-wincompleteλ-projective, w codec: hashes and decodes to λ-affine4421112448523
gf2_127-uunscaled (X:S:Z), w codec, direct addend hashes4421112448523
GF(2^122) = GF(2^61)[u], dense constant, 16 bytes
gf2_122(X:S:Z:T) extended443121244636
gf2_122-lambdaincompleteλ-projective442111244636
gf2_122-wincompleteλ-projective, w codec442111244636
gf2_122-uunscaled (X:S:Z), w codec4421112448523
GF(2^122), constant in GF(2^61) (GLS-shaped), 16 bytes
gf2_122-gls(X:S:Z:T) extended443111244636
gf2_122-gls-lambdaincompleteλ-projective442111244636
gf2_122-gls-wincompleteλ-projective, w codec442111244636
gf2_122-gls-uunscaled (X:S:Z), w codec4421112448523
GF(2^109), 14 bytes
gf2_109(X:S:Z:T) extended443121244636
gf2_109-lambdaincompleteλ-projective442111244636
gf2_109-wincompleteλ-projective, w codec442111244636
gf2_109-uunscaled (X:S:Z), w codec4421112448523
F_p, p = 2^127 − 1, 16 bytes
edwards127a = 1 Edwards, extended += cached32321122111
weier127short Weierstrass, projective += affine22221122111
weier127-jacobianincompleteshort Weierstrass, Jacobian += affine22211122111
F_p, p = 2^107 − 1, 14 bytes
edwards107a = 1 Edwards, extended += cached32321122111
weier107short Weierstrass, projective += affine22221122111
weier107-jacobianincompleteshort Weierstrass, Jacobian += affine22211122111
F_p, p = 2^128 − 275, 16 bytes
twisted128a = −1 twisted Edwards modulo 2-torsion, extended += cached22211122111
F_{p²}, p = 2^61 − 1, 16 bytes
edwards61x2a = 1 Edwards, signed-x codec, extended += cached22211122111
weier61x2short Weierstrass, signed-x codec, projective += affine22211122111
weier61x2-jacobianincompleteshort Weierstrass, signed-x codec, Jacobian += affine22211122111
twisted61x2a = −1 Edwards modulo 2-torsion, extended += cached442111244111
F_{p²}, p = 2^64 − 59, 16 bytes
twisted64x2a = −1 Edwards modulo 2-torsion, extended += cached22211122111
F_{p²}, p = 2^64 − 2^32 + 1, 16 bytes
twisted-goldilocks2a = −1 Edwards modulo 2-torsion, extended += cached22211122111
references, 32 and 33 bytes
ristretto255curve25519-dalek12111011
secp256k1libsecp256k121

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

116 benchmarks
operationbenchmarkfamilymodetime95% CIunit
batch invertgf2_109/batch invert (product tree)gf2_109batch5.36 ns5.34 ns .. 5.38 nsper elem
batch invertgf2_122/batch invert (product tree)gf2_122batch5.23 ns5.21 ns .. 5.25 nsper elem
batch invertgf2_127/batch invert (product tree)gf2_127batch5.41 ns5.36 ns .. 5.45 nsper elem
batch invertfp107/batch invert (product tree)fp107batch10.1 ns10.0 ns .. 10.1 nsper elem
batch invertfp127/batch invert (product tree)fp127batch10.2 ns10.1 ns .. 10.3 nsper elem
batch invertfp61x2/batch invert (product tree)fp61x2batch8.60 ns8.58 ns .. 8.62 nsper elem
batch invertfp64x2/batch invert (product tree)fp64x2batch13.6 ns13.5 ns .. 13.6 nsper elem
batch invertgoldilocks2/batch invert (product tree)goldilocks2batch8.96 ns8.93 ns .. 9.00 nsper elem
halftracegf2_109/halftracegf2_109per-element43.9 ns43.7 ns .. 44.0 nsper elem
halftracegf2_109/halftrace (byte tables)gf2_109per-element4.02 ns4.01 ns .. 4.03 nsper elem
halftracegf2_122/qsolve (z^2 + z = c, 2 base halftraces)gf2_122per-element3.86 ns3.84 ns .. 3.88 nsper elem
halftracegf2_127/halftracegf2_127per-element22.3 ns22.3 ns .. 22.4 nsper elem
halftracegf2_127/halftrace (byte tables)gf2_127per-element5.16 ns5.12 ns .. 5.23 nsper elem
halftracegf2_127/halftrace (nibble tables)gf2_127per-element24.7 ns24.7 ns .. 24.8 nsper elem
mul_u2gf2_122/mul_u2 (by a^2 = 1 + a) latency (dependent chain)gf2_122latency0.14 ns0.14 ns .. 0.14 nsper elem
mul_u2gf2_122/mul_u2 (by a^2 = 1 + a) throughput (8 chains)gf2_122throughput0.21 ns0.21 ns .. 0.21 nsper elem
packfp107/packfp107per-element0.82 ns0.82 ns .. 0.83 nsper elem
packfp127/packfp127per-element0.38 ns0.38 ns .. 0.39 nsper elem
packfp128/packfp128per-element0.36 ns0.36 ns .. 0.37 nsper elem
packfp61x2/packfp61x2per-element0.50 ns0.50 ns .. 0.50 nsper elem
packfp64x2/packfp64x2per-element0.37 ns0.36 ns .. 0.37 nsper elem
packgoldilocks2/packgoldilocks2per-element0.69 ns0.69 ns .. 0.70 nsper elem
tracegf2_109/tracegf2_109per-element0.60 ns0.60 ns .. 0.60 nsper elem
tracegf2_122/tracegf2_122per-element0.40 ns0.40 ns .. 0.40 nsper elem
tracegf2_127/tracegf2_127per-element0.50 ns0.50 ns .. 0.50 nsper elem
negfp107/negfp107per-element0.59 ns0.59 ns .. 0.59 nsper elem
negfp127/negfp127per-element0.89 ns0.89 ns .. 0.90 nsper elem
negfp128/negfp128per-element0.59 ns0.59 ns .. 0.60 nsper elem
negfp61x2/negfp61x2per-element0.41 ns0.40 ns .. 0.41 nsper elem
negfp64x2/negfp64x2per-element0.41 ns0.40 ns .. 0.41 nsper elem
neggoldilocks2/neggoldilocks2per-element0.60 ns0.60 ns .. 0.61 nsper elem
addfp107/addfp107per-element0.62 ns0.62 ns .. 0.63 nsper elem
addfp127/addfp127per-element1.00 ns0.99 ns .. 1.01 nsper elem
addfp128/addfp128per-element0.72 ns0.71 ns .. 0.72 nsper elem
addfp61x2/addfp61x2per-element0.61 ns0.61 ns .. 0.61 nsper elem
addfp64x2/addfp64x2per-element0.60 ns0.60 ns .. 0.60 nsper elem
addgoldilocks2/addgoldilocks2per-element0.69 ns0.69 ns .. 0.70 nsper elem
unpackfp107/unpackfp107per-element0.73 ns0.73 ns .. 0.73 nsper elem
unpackfp127/unpackfp127per-element0.70 ns0.70 ns .. 0.70 nsper elem
unpackfp128/unpackfp128per-element0.70 ns0.70 ns .. 0.70 nsper elem
unpackfp61x2/unpackfp61x2per-element0.99 ns0.99 ns .. 1.00 nsper elem
unpackfp64x2/unpackfp64x2per-element0.70 ns0.70 ns .. 0.70 nsper elem
unpackgoldilocks2/unpackgoldilocks2per-element0.70 ns0.70 ns .. 0.70 nsper elem
subfp128/subfp128per-element0.79 ns0.79 ns .. 0.79 nsper elem
subfp61x2/subfp61x2per-element0.80 ns0.80 ns .. 0.80 nsper elem
subfp64x2/subfp64x2per-element0.59 ns0.59 ns .. 0.60 nsper elem
subgoldilocks2/subgoldilocks2per-element0.70 ns0.69 ns .. 0.70 nsper elem
normalizegf2_109/normalize (to_u128)gf2_109per-element0.79 ns0.79 ns .. 0.80 nsper elem
normalizegf2_122/normalize (to_u128)gf2_122per-element1.38 ns1.38 ns .. 1.39 nsper elem
normalizegf2_127/normalize (to_u128)gf2_127per-element0.50 ns0.50 ns .. 0.50 nsper elem
mul_basegf2_122/mul_base (by a GF(2^61) constant) latency (dependent chain)gf2_122latency3.72 ns3.71 ns .. 3.73 nsper elem
mul_basegf2_122/mul_base (by a GF(2^61) constant) throughput (8 chains)gf2_122throughput1.17 ns1.17 ns .. 1.17 nsper elem
squaregf2_109/square latency (dependent chain)gf2_109latency3.88 ns3.87 ns .. 3.89 nsper elem
squaregf2_109/square throughput (8 chains)gf2_109throughput0.81 ns0.81 ns .. 0.81 nsper elem
squaregf2_122/square latency (dependent chain)gf2_122latency4.33 ns4.32 ns .. 4.34 nsper elem
squaregf2_122/square throughput (8 chains)gf2_122throughput1.17 ns1.17 ns .. 1.18 nsper elem
squaregf2_127/square latency (dependent chain)gf2_127latency2.18 ns2.17 ns .. 2.19 nsper elem
squaregf2_127/square throughput (8 chains)gf2_127throughput0.65 ns0.65 ns .. 0.65 nsper elem
squarefp107/square latency (dependent chain)fp107latency3.60 ns3.59 ns .. 3.60 nsper elem
squarefp107/square throughput (8 chains)fp107throughput2.13 ns2.13 ns .. 2.14 nsper elem
squarefp127/square latency (dependent chain)fp127latency4.26 ns4.25 ns .. 4.27 nsper elem
squarefp127/square throughput (8 chains)fp127throughput2.30 ns2.29 ns .. 2.31 nsper elem
squarefp128/square latency (dependent chain)fp128latency6.54 ns6.52 ns .. 6.56 nsper elem
squarefp128/square throughput (8 chains)fp128throughput3.64 ns3.63 ns .. 3.65 nsper elem
squarefp61x2/square latency (dependent chain)fp61x2latency5.90 ns5.88 ns .. 5.92 nsper elem
squarefp61x2/square throughput (8 chains)fp61x2throughput2.38 ns2.37 ns .. 2.38 nsper elem
squarefp64x2/square latency (dependent chain)fp64x2latency4.76 ns4.75 ns .. 4.77 nsper elem
squarefp64x2/square throughput (8 chains)fp64x2throughput3.70 ns3.69 ns .. 3.71 nsper elem
squaregoldilocks2/square latency (dependent chain)goldilocks2latency3.59 ns3.58 ns .. 3.60 nsper elem
squaregoldilocks2/square throughput (8 chains)goldilocks2throughput2.59 ns2.58 ns .. 2.60 nsper elem
mulgf2_109/mul latency (dependent chain)gf2_109latency5.13 ns5.10 ns .. 5.16 nsper elem
mulgf2_109/mul throughput (8 chains)gf2_109throughput1.37 ns1.37 ns .. 1.38 nsper elem
mulgf2_122/mul latency (dependent chain)gf2_122latency4.56 ns4.54 ns .. 4.57 nsper elem
mulgf2_122/mul throughput (8 chains)gf2_122throughput1.38 ns1.38 ns .. 1.38 nsper elem
mulgf2_127/mul latency (dependent chain)gf2_127latency3.50 ns3.49 ns .. 3.51 nsper elem
mulgf2_127/mul throughput (8 chains)gf2_127throughput1.43 ns1.42 ns .. 1.43 nsper elem
mulfp107 schoolbook/mul latency (dependent chain)fp107latency3.98 ns3.98 ns .. 3.99 nsper elem
mulfp107 schoolbook/mul throughput (8 chains)fp107throughput2.55 ns2.55 ns .. 2.56 nsper elem
mulfp107/mul latency (dependent chain)fp107latency3.97 ns3.96 ns .. 3.98 nsper elem
mulfp107/mul throughput (8 chains)fp107throughput2.64 ns2.61 ns .. 2.66 nsper elem
mulfp127/mul latency (dependent chain)fp127latency4.31 ns4.29 ns .. 4.32 nsper elem
mulfp127/mul throughput (8 chains)fp127throughput2.69 ns2.68 ns .. 2.70 nsper elem
mulfp128/mul latency (dependent chain)fp128latency6.73 ns6.71 ns .. 6.74 nsper elem
mulfp128/mul throughput (8 chains)fp128throughput3.82 ns3.82 ns .. 3.83 nsper elem
mulfp61x2/mul latency (dependent chain)fp61x2latency5.37 ns5.36 ns .. 5.39 nsper elem
mulfp61x2/mul throughput (8 chains)fp61x2throughput2.54 ns2.54 ns .. 2.55 nsper elem
mulfp64x2/mul latency (dependent chain)fp64x2latency4.99 ns4.99 ns .. 5.01 nsper elem
mulfp64x2/mul throughput (8 chains)fp64x2throughput3.82 ns3.82 ns .. 3.83 nsper elem
mulgoldilocks2/mul latency (dependent chain)goldilocks2latency3.26 ns3.25 ns .. 3.27 nsper elem
mulgoldilocks2/mul throughput (8 chains)goldilocks2throughput2.67 ns2.66 ns .. 2.68 nsper elem
invertgf2_109/invertgf2_109per-element491 ns490 ns .. 493 nsper elem
invertgf2_122/invertgf2_122per-element238 ns238 ns .. 239 nsper elem
invertgf2_127/invertgf2_127per-element123 ns123 ns .. 124 nsper elem
invertfp107/invertfp107per-element571 ns566 ns .. 576 nsper elem
invertfp127/invertfp127per-element577 ns576 ns .. 578 nsper elem
invertfp128/invertfp128per-element918 ns916 ns .. 922 nsper elem
invertfp61x2/invertfp61x2per-element176 ns176 ns .. 176 nsper elem
invertfp64x2/invertfp64x2per-element241 ns241 ns .. 242 nsper elem
invertgoldilocks2/invertgoldilocks2per-element304 ns303 ns .. 305 nsper elem
sqrtgf2_109/sqrtgf2_109per-element6.93 ns6.92 ns .. 6.95 nsper elem
sqrtgf2_122/sqrtgf2_122per-element3.98 ns3.97 ns .. 3.98 nsper elem
sqrtgf2_127/sqrtgf2_127per-element1.70 ns1.69 ns .. 1.70 nsper elem
sqrtfp107/sqrt (x^(2^105))fp107per-element422 ns420 ns .. 425 nsper elem
sqrtfp127/sqrt (x^(2^125))fp127per-element523 ns523 ns .. 524 nsper elem
sqrtfp128/sqrtfp128per-element891 ns888 ns .. 893 nsper elem
sqrtfp61x2/sqrtfp61x2per-element298 ns298 ns .. 299 nsper elem
sqrtfp64x2/sqrtfp64x2per-element431 ns430 ns .. 432 nsper elem
sqrtgoldilocks2/sqrtgoldilocks2per-element996 ns993 ns .. 998 nsper elem
pow_p34fp107/pow_p34 (x^(2^105-1))fp107per-element570 ns569 ns .. 571 nsper elem
pow_p34fp127/pow_p34 (x^(2^125-1))fp127per-element579 ns575 ns .. 582 nsper elem
sqrt_ratiofp107/sqrt_ratiofp107per-element597 ns593 ns .. 601 nsper elem
sqrt_ratiofp127/sqrt_ratiofp127per-element592 ns590 ns .. 593 nsper elem
sqrt_ratiofp128/sqrt_ratiofp128per-element937 ns936 ns .. 939 nsper elem
sqrt_ratiofp61x2/sqrt_ratiofp61x2per-element295 ns294 ns .. 295 nsper elem
sqrt_ratiofp64x2/sqrt_ratiofp64x2per-element431 ns430 ns .. 432 nsper elem
sqrt_ratiogoldilocks2/sqrt_ratiogoldilocks2per-element950 ns948 ns .. 952 nsper elem

group ops

486 benchmarks
operationbenchmarkfamilymodetime95% CIunit
preparebinary.109/mode=batch,n=1024gf2_109batch4.25 ns4.24 ns .. 4.27 nsper elem
preparebinary.109/mode=batch,n=64gf2_109batch4.65 ns4.64 ns .. 4.66 nsper elem
preparebinary.109/mode=batch,n=8gf2_109batch4.88 ns4.87 ns .. 4.89 nsper elem
preparebinary.109/mode=indepgf2_109per-element4.23 ns4.22 ns .. 4.24 nsper elem
preparebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch8.13 ns8.10 ns .. 8.16 nsper elem
preparebinary-lambda.109/mode=batch,n=64gf2_109-lambdabatch18.8 ns18.7 ns .. 18.8 nsper elem
preparebinary-lambda.109/mode=batch,n=8gf2_109-lambdabatch82.7 ns82.4 ns .. 83.0 nsper elem
preparebinary-lambda.109/mode=indepgf2_109-lambdaper-element503 ns502 ns .. 504 nsper elem
preparebinary-u.109/mode=batch,n=1024gf2_109-ubatch0.46 ns0.46 ns .. 0.47 nsper elem
preparebinary-u.109/mode=batch,n=64gf2_109-ubatch0.79 ns0.79 ns .. 0.80 nsper elem
preparebinary-u.109/mode=batch,n=8gf2_109-ubatch1.08 ns1.08 ns .. 1.09 nsper elem
preparebinary-u.109/mode=indepgf2_109-uper-element0.48 ns0.45 ns .. 0.51 nsper elem
preparebinary-w.109/mode=batch,n=1024gf2_109-wbatch0.47 ns0.46 ns .. 0.47 nsper elem
preparebinary-w.109/mode=batch,n=64gf2_109-wbatch0.82 ns0.81 ns .. 0.82 nsper elem
preparebinary-w.109/mode=batch,n=8gf2_109-wbatch1.08 ns1.08 ns .. 1.09 nsper elem
preparebinary-w.109/mode=indepgf2_109-wper-element0.44 ns0.42 ns .. 0.46 nsper elem
preparebinary.122/mode=batch,n=1024gf2_122batch5.01 ns5.00 ns .. 5.03 nsper elem
preparebinary.122/mode=batch,n=64gf2_122batch5.44 ns5.42 ns .. 5.46 nsper elem
preparebinary.122/mode=batch,n=8gf2_122batch5.62 ns5.60 ns .. 5.63 nsper elem
preparebinary.122/mode=indepgf2_122per-element4.91 ns4.90 ns .. 4.92 nsper elem
preparebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch4.27 ns4.26 ns .. 4.29 nsper elem
preparebinary.122-gls/mode=batch,n=64gf2_122-glsbatch4.54 ns4.53 ns .. 4.55 nsper elem
preparebinary.122-gls/mode=batch,n=8gf2_122-glsbatch4.83 ns4.82 ns .. 4.84 nsper elem
preparebinary.122-gls/mode=indepgf2_122-glsper-element4.22 ns4.20 ns .. 4.25 nsper elem
preparebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch8.11 ns8.08 ns .. 8.14 nsper elem
preparebinary-lambda.122-gls/mode=batch,n=64gf2_122-gls-lambdabatch15.1 ns15.1 ns .. 15.2 nsper elem
preparebinary-lambda.122-gls/mode=batch,n=8gf2_122-gls-lambdabatch53.4 ns53.3 ns .. 53.6 nsper elem
preparebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element249 ns248 ns .. 250 nsper elem
preparebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch0.68 ns0.68 ns .. 0.68 nsper elem
preparebinary-u.122-gls/mode=batch,n=64gf2_122-gls-ubatch0.83 ns0.82 ns .. 0.83 nsper elem
preparebinary-u.122-gls/mode=batch,n=8gf2_122-gls-ubatch1.07 ns1.07 ns .. 1.07 nsper elem
preparebinary-u.122-gls/mode=indepgf2_122-gls-uper-element0.44 ns0.42 ns .. 0.45 nsper elem
preparebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch0.68 ns0.68 ns .. 0.68 nsper elem
preparebinary-w.122-gls/mode=batch,n=64gf2_122-gls-wbatch0.83 ns0.82 ns .. 0.83 nsper elem
preparebinary-w.122-gls/mode=batch,n=8gf2_122-gls-wbatch1.08 ns1.08 ns .. 1.08 nsper elem
preparebinary-w.122-gls/mode=indepgf2_122-gls-wper-element0.43 ns0.42 ns .. 0.45 nsper elem
preparebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch8.18 ns8.16 ns .. 8.19 nsper elem
preparebinary-lambda.122/mode=batch,n=64gf2_122-lambdabatch15.2 ns15.1 ns .. 15.3 nsper elem
preparebinary-lambda.122/mode=batch,n=8gf2_122-lambdabatch53.6 ns53.2 ns .. 54.0 nsper elem
preparebinary-lambda.122/mode=indepgf2_122-lambdaper-element251 ns250 ns .. 251 nsper elem
preparebinary-u.122/mode=batch,n=1024gf2_122-ubatch0.49 ns0.49 ns .. 0.50 nsper elem
preparebinary-u.122/mode=batch,n=64gf2_122-ubatch0.82 ns0.82 ns .. 0.82 nsper elem
preparebinary-u.122/mode=batch,n=8gf2_122-ubatch1.08 ns1.08 ns .. 1.08 nsper elem
preparebinary-u.122/mode=indepgf2_122-uper-element0.50 ns0.47 ns .. 0.52 nsper elem
preparebinary-w.122/mode=batch,n=1024gf2_122-wbatch0.47 ns0.46 ns .. 0.47 nsper elem
preparebinary-w.122/mode=batch,n=64gf2_122-wbatch0.75 ns0.75 ns .. 0.76 nsper elem
preparebinary-w.122/mode=batch,n=8gf2_122-wbatch1.09 ns1.08 ns .. 1.09 nsper elem
preparebinary-w.122/mode=indepgf2_122-wper-element0.44 ns0.42 ns .. 0.46 nsper elem
preparebinary.127/mode=batch,n=1024gf2_127batch6.36 ns6.31 ns .. 6.42 nsper elem
preparebinary.127/mode=batch,n=64gf2_127batch6.55 ns6.52 ns .. 6.59 nsper elem
preparebinary.127/mode=batch,n=8gf2_127batch6.72 ns6.69 ns .. 6.76 nsper elem
preparebinary.127/mode=indepgf2_127per-element6.38 ns6.33 ns .. 6.42 nsper elem
preparebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch8.18 ns8.16 ns .. 8.20 nsper elem
preparebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch12.7 ns12.7 ns .. 12.7 nsper elem
preparebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch32.8 ns32.7 ns .. 32.8 nsper elem
preparebinary-lambda.127/mode=indepgf2_127-lambdaper-element129 ns128 ns .. 129 nsper elem
preparebinary-u.127/mode=batch,n=1024gf2_127-ubatch0.47 ns0.47 ns .. 0.47 nsper elem
preparebinary-u.127/mode=batch,n=64gf2_127-ubatch0.81 ns0.81 ns .. 0.81 nsper elem
preparebinary-u.127/mode=batch,n=8gf2_127-ubatch1.08 ns1.08 ns .. 1.08 nsper elem
preparebinary-u.127/mode=indepgf2_127-uper-element0.48 ns0.46 ns .. 0.51 nsper elem
preparebinary-w.127/mode=batch,n=1024gf2_127-wbatch0.47 ns0.47 ns .. 0.47 nsper elem
preparebinary-w.127/mode=batch,n=64gf2_127-wbatch0.79 ns0.79 ns .. 0.80 nsper elem
preparebinary-w.127/mode=batch,n=8gf2_127-wbatch1.10 ns1.09 ns .. 1.11 nsper elem
preparebinary-w.127/mode=indepgf2_127-wper-element0.45 ns0.44 ns .. 0.47 nsper elem
prepareedwards.107/mode=batch,n=1024edwards107batch37.9 ns37.8 ns .. 38.1 nsper elem
prepareedwards.107/mode=indepedwards107per-element632 ns630 ns .. 634 nsper elem
prepareedwards.127/mode=batch,n=1024edwards127batch39.9 ns39.9 ns .. 40.0 nsper elem
prepareedwards.127/mode=indepedwards127per-element663 ns662 ns .. 664 nsper elem
prepareedwards.61x2/mode=batch,n=1024edwards61x2batch34.9 ns34.8 ns .. 35.1 nsper elem
prepareedwards.61x2/mode=indepedwards61x2per-element236 ns235 ns .. 236 nsper elem
preparetwisted.goldilocks2/mode=batch,n=1024twisted-goldilocks2batch9.54 ns9.49 ns .. 9.59 nsper elem
preparetwisted.goldilocks2/mode=indeptwisted-goldilocks2per-element9.45 ns9.41 ns .. 9.50 nsper elem
preparetwisted.128/mode=batch,n=1024twisted128batch12.7 ns12.6 ns .. 12.7 nsper elem
preparetwisted.128/mode=indeptwisted128per-element12.5 ns12.4 ns .. 12.5 nsper elem
preparetwisted.61x2/mode=batch,n=1024twisted61x2batch7.93 ns7.89 ns .. 7.96 nsper elem
preparetwisted.61x2/mode=batch,n=64twisted61x2batch8.39 ns8.35 ns .. 8.43 nsper elem
preparetwisted.61x2/mode=batch,n=8twisted61x2batch8.59 ns8.56 ns .. 8.63 nsper elem
preparetwisted.61x2/mode=indeptwisted61x2per-element8.07 ns8.02 ns .. 8.11 nsper elem
preparetwisted.64x2/mode=batch,n=1024twisted64x2batch8.79 ns8.76 ns .. 8.82 nsper elem
preparetwisted.64x2/mode=indeptwisted64x2per-element8.75 ns8.71 ns .. 8.79 nsper elem
prepareweier.107/mode=batch,n=1024weier107batch0.63 ns0.62 ns .. 0.63 nsper elem
prepareweier.107/mode=indepweier107per-element0.82 ns0.81 ns .. 0.82 nsper elem
prepareweier-jacobian.107/mode=batch,n=1024weier107-jacobianbatch0.63 ns0.62 ns .. 0.63 nsper elem
prepareweier-jacobian.107/mode=indepweier107-jacobianper-element0.81 ns0.80 ns .. 0.81 nsper elem
prepareweier.127/mode=batch,n=1024weier127batch1.00 ns0.99 ns .. 1.00 nsper elem
prepareweier.127/mode=indepweier127per-element0.81 ns0.81 ns .. 0.82 nsper elem
prepareweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch0.99 ns0.98 ns .. 0.99 nsper elem
prepareweier-jacobian.127/mode=indepweier127-jacobianper-element0.81 ns0.81 ns .. 0.81 nsper elem
prepareweier.61x2/mode=batch,n=1024weier61x2batch0.52 ns0.52 ns .. 0.53 nsper elem
prepareweier.61x2/mode=indepweier61x2per-element0.44 ns0.43 ns .. 0.46 nsper elem
prepareweier-jacobian.61x2/mode=batch,n=1024weier61x2-jacobianbatch0.52 ns0.52 ns .. 0.52 nsper elem
prepareweier-jacobian.61x2/mode=indepweier61x2-jacobianper-element0.44 ns0.42 ns .. 0.46 nsper elem
addxor-sha256/xor 32B, 1 accumulatorxorlatency0.26 ns0.25 ns .. 0.26 nsper elem
addxor-sha256/xor 32B, 8 accumulatorsxorthroughput0.45 ns0.43 ns .. 0.46 nsper elem
addbinary.109/mode=latencygf2_109latency22.2 ns22.1 ns .. 22.2 nsper elem
addbinary.109/mode=throughputgf2_109throughput20.4 ns20.3 ns .. 20.4 nsper elem
addgf2_109/extended += affine, 8 accumulatorsgf2_109throughput24.7 ns24.6 ns .. 24.7 nsper elem
addbinary-lambda.109/mode=latencygf2_109-lambdalatency28.2 ns28.2 ns .. 28.3 nsper elem
addbinary-lambda.109/mode=throughputgf2_109-lambdathroughput18.9 ns18.9 ns .. 18.9 nsper elem
addbinary-u.109/mode=latencygf2_109-ulatency15.7 ns15.7 ns .. 15.7 nsper elem
addbinary-u.109/mode=throughputgf2_109-uthroughput13.5 ns13.5 ns .. 13.5 nsper elem
addbinary-w.109/mode=latencygf2_109-wlatency28.3 ns28.2 ns .. 28.4 nsper elem
addbinary-w.109/mode=throughputgf2_109-wthroughput18.9 ns18.9 ns .. 19.0 nsper elem
addbinary.122/mode=latencygf2_122latency21.3 ns21.2 ns .. 21.3 nsper elem
addbinary.122/mode=throughputgf2_122throughput19.9 ns19.9 ns .. 20.0 nsper elem
addgf2_122/extended += affine, 8 accumulatorsgf2_122throughput25.4 ns25.3 ns .. 25.5 nsper elem
addbinary.122-gls/mode=latencygf2_122-glslatency20.6 ns20.5 ns .. 20.6 nsper elem
addbinary.122-gls/mode=throughputgf2_122-glsthroughput19.3 ns19.2 ns .. 19.4 nsper elem
addgf2_122-gls/extended += affine, 8 accumulatorsgf2_122-glsthroughput23.3 ns23.2 ns .. 23.3 nsper elem
addbinary-lambda.122-gls/mode=latencygf2_122-gls-lambdalatency28.0 ns27.9 ns .. 28.1 nsper elem
addbinary-lambda.122-gls/mode=throughputgf2_122-gls-lambdathroughput20.3 ns20.2 ns .. 20.3 nsper elem
addbinary-u.122-gls/mode=latencygf2_122-gls-ulatency16.2 ns16.1 ns .. 16.3 nsper elem
addbinary-u.122-gls/mode=throughputgf2_122-gls-uthroughput13.7 ns13.7 ns .. 13.8 nsper elem
addbinary-w.122-gls/mode=latencygf2_122-gls-wlatency28.1 ns28.0 ns .. 28.1 nsper elem
addbinary-w.122-gls/mode=throughputgf2_122-gls-wthroughput20.3 ns20.2 ns .. 20.4 nsper elem
addbinary-lambda.122/mode=latencygf2_122-lambdalatency28.0 ns27.9 ns .. 28.1 nsper elem
addbinary-lambda.122/mode=throughputgf2_122-lambdathroughput20.2 ns20.2 ns .. 20.3 nsper elem
addbinary-u.122/mode=latencygf2_122-ulatency16.7 ns16.6 ns .. 16.8 nsper elem
addbinary-u.122/mode=throughputgf2_122-uthroughput14.3 ns14.3 ns .. 14.4 nsper elem
addbinary-w.122/mode=latencygf2_122-wlatency27.9 ns27.8 ns .. 28.0 nsper elem
addbinary-w.122/mode=throughputgf2_122-wthroughput20.5 ns20.4 ns .. 20.6 nsper elem
addbinary.127/mode=latencygf2_127latency19.9 ns19.8 ns .. 20.0 nsper elem
addbinary.127/mode=throughputgf2_127throughput19.5 ns19.5 ns .. 19.6 nsper elem
addgf2_127/extended += affine, 8 accumulatorsgf2_127throughput23.1 ns23.0 ns .. 23.1 nsper elem
addbinary-lambda.127/mode=latencygf2_127-lambdalatency24.4 ns24.3 ns .. 24.5 nsper elem
addbinary-lambda.127/mode=throughputgf2_127-lambdathroughput17.6 ns17.6 ns .. 17.7 nsper elem
addbinary-u.127/mode=latencygf2_127-ulatency14.6 ns14.5 ns .. 14.6 nsper elem
addbinary-u.127/mode=throughputgf2_127-uthroughput13.2 ns13.2 ns .. 13.2 nsper elem
addbinary-w.127/mode=latencygf2_127-wlatency24.4 ns24.3 ns .. 24.4 nsper elem
addbinary-w.127/mode=throughputgf2_127-wthroughput17.7 ns17.6 ns .. 17.7 nsper elem
addedwards.107/mode=latencyedwards107latency32.6 ns32.5 ns .. 32.7 nsper elem
addedwards.107/mode=throughputedwards107throughput27.6 ns27.5 ns .. 27.7 nsper elem
addedwards107/+= montgomery affine, 8 accumulatorsedwards107throughput45.9 ns45.7 ns .. 46.2 nsper elem
addedwards.127/mode=latencyedwards127latency35.8 ns35.7 ns .. 35.9 nsper elem
addedwards.127/mode=throughputedwards127throughput27.5 ns27.4 ns .. 27.6 nsper elem
addedwards127/+= montgomery affine, 8 accumulatorsedwards127throughput48.1 ns48.0 ns .. 48.3 nsper elem
addedwards.61x2/mode=latencyedwards61x2latency29.6 ns29.5 ns .. 29.7 nsper elem
addedwards.61x2/mode=throughputedwards61x2throughput25.8 ns25.7 ns .. 25.9 nsper elem
addtwisted.goldilocks2/mode=latencytwisted-goldilocks2latency29.4 ns29.3 ns .. 29.4 nsper elem
addtwisted.goldilocks2/mode=throughputtwisted-goldilocks2throughput28.7 ns28.7 ns .. 28.8 nsper elem
addtwisted.128/mode=latencytwisted128latency36.3 ns36.2 ns .. 36.4 nsper elem
addtwisted.128/mode=throughputtwisted128throughput31.1 ns31.0 ns .. 31.2 nsper elem
addtwisted.61x2/mode=latencytwisted61x2latency28.4 ns28.3 ns .. 28.5 nsper elem
addtwisted.61x2/mode=throughputtwisted61x2throughput24.9 ns24.8 ns .. 25.0 nsper elem
addtwisted.64x2/mode=latencytwisted64x2latency37.9 ns37.7 ns .. 38.0 nsper elem
addtwisted.64x2/mode=throughputtwisted64x2throughput33.3 ns33.2 ns .. 33.4 nsper elem
addweier.107/mode=latencyweier107latency53.9 ns53.4 ns .. 54.2 nsper elem
addweier.107/mode=throughputweier107throughput48.6 ns48.4 ns .. 48.8 nsper elem
addweier-jacobian.107/mode=latencyweier107-jacobianlatency50.9 ns50.8 ns .. 51.1 nsper elem
addweier-jacobian.107/mode=throughputweier107-jacobianthroughput44.1 ns44.0 ns .. 44.3 nsper elem
addweier.127/mode=latencyweier127latency63.9 ns63.7 ns .. 64.0 nsper elem
addweier.127/mode=throughputweier127throughput58.7 ns58.5 ns .. 58.9 nsper elem
addweier-jacobian.127/mode=latencyweier127-jacobianlatency56.6 ns56.4 ns .. 56.9 nsper elem
addweier-jacobian.127/mode=throughputweier127-jacobianthroughput48.1 ns48.0 ns .. 48.2 nsper elem
addweier.61x2/mode=latencyweier61x2latency57.1 ns57.0 ns .. 57.2 nsper elem
addweier.61x2/mode=throughputweier61x2throughput50.6 ns50.4 ns .. 50.7 nsper elem
addweier-jacobian.61x2/mode=latencyweier61x2-jacobianlatency57.2 ns57.0 ns .. 57.3 nsper elem
addweier-jacobian.61x2/mode=throughputweier61x2-jacobianthroughput50.2 ns50.1 ns .. 50.3 nsper elem
addristretto255/+=, 1 accumulatorristretto255latency117 ns117 ns .. 118 nsper elem
addristretto255/+=, 8 accumulatorsristretto255throughput116 ns115 ns .. 116 nsper elem
subtractbinary.109/mode=throughputgf2_109throughput20.7 ns20.6 ns .. 20.7 nsper elem
subtractbinary-lambda.109/mode=throughputgf2_109-lambdathroughput19.1 ns19.0 ns .. 19.2 nsper elem
subtractbinary-u.109/mode=throughputgf2_109-uthroughput13.6 ns13.6 ns .. 13.7 nsper elem
subtractbinary-w.109/mode=throughputgf2_109-wthroughput19.2 ns19.1 ns .. 19.2 nsper elem
subtractbinary.122/mode=throughputgf2_122throughput20.1 ns20.1 ns .. 20.2 nsper elem
subtractbinary.122-gls/mode=throughputgf2_122-glsthroughput19.5 ns19.5 ns .. 19.6 nsper elem
subtractbinary-lambda.122-gls/mode=throughputgf2_122-gls-lambdathroughput20.4 ns20.4 ns .. 20.5 nsper elem
subtractbinary-u.122-gls/mode=throughputgf2_122-gls-uthroughput14.0 ns13.9 ns .. 14.0 nsper elem
subtractbinary-w.122-gls/mode=throughputgf2_122-gls-wthroughput20.5 ns20.5 ns .. 20.5 nsper elem
subtractbinary-lambda.122/mode=throughputgf2_122-lambdathroughput20.5 ns20.4 ns .. 20.6 nsper elem
subtractbinary-u.122/mode=throughputgf2_122-uthroughput13.9 ns13.9 ns .. 13.9 nsper elem
subtractbinary-w.122/mode=throughputgf2_122-wthroughput20.5 ns20.5 ns .. 20.6 nsper elem
subtractbinary.127/mode=throughputgf2_127throughput18.6 ns18.6 ns .. 18.7 nsper elem
subtractbinary-lambda.127/mode=throughputgf2_127-lambdathroughput17.6 ns17.6 ns .. 17.7 nsper elem
subtractbinary-u.127/mode=throughputgf2_127-uthroughput13.1 ns13.1 ns .. 13.1 nsper elem
subtractbinary-w.127/mode=throughputgf2_127-wthroughput17.7 ns17.6 ns .. 17.7 nsper elem
subtracttwisted.61x2/mode=throughputtwisted61x2throughput25.2 ns25.2 ns .. 25.2 nsper elem
subtractristretto255/-=, 8 accumulatorsristretto255throughput113 ns112 ns .. 113 nsper elem
negatebinary.109gf2_109per-element1.17 ns1.17 ns .. 1.18 nsper elem
negategf2_109/affine (y += x)gf2_109per-element0.56 ns0.56 ns .. 0.56 nsper elem
negatebinary-lambda.109gf2_109-lambdaper-element0.56 ns0.56 ns .. 0.56 nsper elem
negatebinary-u.109gf2_109-uper-element0.56 ns0.56 ns .. 0.57 nsper elem
negatebinary-w.109gf2_109-wper-element0.57 ns0.56 ns .. 0.57 nsper elem
negatebinary.122gf2_122per-element1.18 ns1.17 ns .. 1.19 nsper elem
negategf2_122/affine (y += x)gf2_122per-element0.56 ns0.55 ns .. 0.56 nsper elem
negatebinary.122-glsgf2_122-glsper-element1.17 ns1.16 ns .. 1.17 nsper elem
negatebinary-lambda.122-glsgf2_122-gls-lambdaper-element0.57 ns0.57 ns .. 0.58 nsper elem
negatebinary-u.122-glsgf2_122-gls-uper-element0.56 ns0.56 ns .. 0.56 nsper elem
negatebinary-w.122-glsgf2_122-gls-wper-element0.56 ns0.56 ns .. 0.56 nsper elem
negatebinary-lambda.122gf2_122-lambdaper-element0.56 ns0.56 ns .. 0.57 nsper elem
negatebinary-u.122gf2_122-uper-element0.58 ns0.57 ns .. 0.58 nsper elem
negatebinary-w.122gf2_122-wper-element0.58 ns0.57 ns .. 0.58 nsper elem
negatebinary.127gf2_127per-element1.20 ns1.19 ns .. 1.21 nsper elem
negategf2_127/affine (y += x)gf2_127per-element0.56 ns0.56 ns .. 0.57 nsper elem
negatebinary-lambda.127gf2_127-lambdaper-element0.56 ns0.56 ns .. 0.56 nsper elem
negatebinary-u.127gf2_127-uper-element0.56 ns0.56 ns .. 0.56 nsper elem
negatebinary-w.127gf2_127-wper-element0.56 ns0.56 ns .. 0.56 nsper elem
negateedwards.107edwards107per-element1.40 ns1.39 ns .. 1.40 nsper elem
negateedwards107/extended (-X, -T)edwards107per-element1.74 ns1.74 ns .. 1.75 nsper elem
negateedwards.127edwards127per-element1.98 ns1.97 ns .. 1.98 nsper elem
negateedwards127/extended (-X, -T)edwards127per-element2.17 ns2.16 ns .. 2.18 nsper elem
negateedwards.61x2edwards61x2per-element0.78 ns0.77 ns .. 0.78 nsper elem
negatetwisted.goldilocks2twisted-goldilocks2per-element1.32 ns1.31 ns .. 1.32 nsper elem
negatetwisted.128twisted128per-element1.15 ns1.14 ns .. 1.15 nsper elem
negatetwisted.61x2twisted61x2per-element0.73 ns0.71 ns .. 0.76 nsper elem
negatetwisted.64x2twisted64x2per-element0.73 ns0.71 ns .. 0.76 nsper elem
negateweier.107weier107per-element0.82 ns0.82 ns .. 0.82 nsper elem
negateweier107/projective (-Y)weier107per-element1.18 ns1.17 ns .. 1.19 nsper elem
negateweier-jacobian.107weier107-jacobianper-element0.82 ns0.82 ns .. 0.83 nsper elem
negateweier.127weier127per-element1.10 ns1.09 ns .. 1.10 nsper elem
negateweier127/projective (-Y)weier127per-element1.19 ns1.18 ns .. 1.19 nsper elem
negateweier-jacobian.127weier127-jacobianper-element1.10 ns1.10 ns .. 1.10 nsper elem
negateweier.61x2weier61x2per-element0.57 ns0.57 ns .. 0.57 nsper elem
negateweier-jacobian.61x2weier61x2-jacobianper-element0.57 ns0.57 ns .. 0.57 nsper elem
negateristretto255/-Pristretto255per-element6.47 ns6.38 ns .. 6.56 nsper elem
negatesecp256k1/PublicKey::negatesecp256k1per-element24.7 ns24.5 ns .. 24.8 nsper elem
is identitybinary.109gf2_109per-element0.94 ns0.94 ns .. 0.94 nsper elem
is identitybinary-lambda.109gf2_109-lambdaper-element0.80 ns0.80 ns .. 0.80 nsper elem
is identitybinary-u.109gf2_109-uper-element0.80 ns0.80 ns .. 0.80 nsper elem
is identitybinary-w.109gf2_109-wper-element0.80 ns0.80 ns .. 0.80 nsper elem
is identitybinary.122gf2_122per-element0.87 ns0.87 ns .. 0.88 nsper elem
is identitybinary.122-glsgf2_122-glsper-element0.87 ns0.87 ns .. 0.88 nsper elem
is identitybinary-lambda.122-glsgf2_122-gls-lambdaper-element0.80 ns0.80 ns .. 0.81 nsper elem
is identitybinary-u.122-glsgf2_122-gls-uper-element0.80 ns0.80 ns .. 0.80 nsper elem
is identitybinary-w.122-glsgf2_122-gls-wper-element0.81 ns0.81 ns .. 0.81 nsper elem
is identitybinary-lambda.122gf2_122-lambdaper-element0.81 ns0.81 ns .. 0.81 nsper elem
is identitybinary-u.122gf2_122-uper-element0.85 ns0.84 ns .. 0.85 nsper elem
is identitybinary-w.122gf2_122-wper-element0.84 ns0.83 ns .. 0.85 nsper elem
is identitybinary.127gf2_127per-element1.02 ns1.01 ns .. 1.02 nsper elem
is identitybinary-lambda.127gf2_127-lambdaper-element0.82 ns0.82 ns .. 0.83 nsper elem
is identitybinary-u.127gf2_127-uper-element0.83 ns0.83 ns .. 0.84 nsper elem
is identitybinary-w.127gf2_127-wper-element0.82 ns0.81 ns .. 0.82 nsper elem
is identityedwards.107edwards107per-element1.18 ns1.18 ns .. 1.19 nsper elem
is identityedwards.127edwards127per-element1.30 ns1.30 ns .. 1.31 nsper elem
is identityedwards.61x2edwards61x2per-element0.54 ns0.53 ns .. 0.55 nsper elem
is identitytwisted.goldilocks2twisted-goldilocks2per-element0.60 ns0.59 ns .. 0.60 nsper elem
is identitytwisted.128twisted128per-element0.50 ns0.50 ns .. 0.50 nsper elem
is identitytwisted.61x2twisted61x2per-element0.50 ns0.50 ns .. 0.50 nsper elem
is identitytwisted.64x2twisted64x2per-element0.50 ns0.50 ns .. 0.51 nsper elem
is identityweier.107weier107per-element0.91 ns0.90 ns .. 0.91 nsper elem
is identityweier-jacobian.107weier107-jacobianper-element0.90 ns0.90 ns .. 0.90 nsper elem
is identityweier.127weier127per-element0.40 ns0.40 ns .. 0.41 nsper elem
is identityweier-jacobian.127weier127-jacobianper-element0.40 ns0.40 ns .. 0.41 nsper elem
is identityweier.61x2weier61x2per-element0.41 ns0.40 ns .. 0.41 nsper elem
is identityweier-jacobian.61x2weier61x2-jacobianper-element0.40 ns0.40 ns .. 0.40 nsper elem
equals addendbinary.109/mode=matchgf2_109match4.05 ns4.04 ns .. 4.06 nsper elem
equals addendbinary.109/mode=mismatchgf2_109mismatch4.07 ns4.06 ns .. 4.08 nsper elem
equals addendbinary-lambda.109/mode=matchgf2_109-lambdamatch3.96 ns3.94 ns .. 3.97 nsper elem
equals addendbinary-lambda.109/mode=mismatchgf2_109-lambdamismatch3.94 ns3.93 ns .. 3.95 nsper elem
equals addendbinary-u.109/mode=matchgf2_109-umatch5.84 ns5.83 ns .. 5.86 nsper elem
equals addendbinary-u.109/mode=mismatchgf2_109-umismatch5.82 ns5.81 ns .. 5.83 nsper elem
equals addendbinary-w.109/mode=matchgf2_109-wmatch4.16 ns4.15 ns .. 4.18 nsper elem
equals addendbinary-w.109/mode=mismatchgf2_109-wmismatch4.13 ns4.12 ns .. 4.14 nsper elem
equals addendbinary.122/mode=matchgf2_122match4.07 ns4.05 ns .. 4.08 nsper elem
equals addendbinary.122/mode=mismatchgf2_122mismatch4.05 ns4.04 ns .. 4.06 nsper elem
equals addendbinary.122-gls/mode=matchgf2_122-glsmatch4.06 ns4.05 ns .. 4.07 nsper elem
equals addendbinary.122-gls/mode=mismatchgf2_122-glsmismatch4.08 ns4.06 ns .. 4.10 nsper elem
equals addendbinary-lambda.122-gls/mode=matchgf2_122-gls-lambdamatch4.20 ns4.19 ns .. 4.21 nsper elem
equals addendbinary-lambda.122-gls/mode=mismatchgf2_122-gls-lambdamismatch4.37 ns4.35 ns .. 4.39 nsper elem
equals addendbinary-u.122-gls/mode=matchgf2_122-gls-umatch5.60 ns5.58 ns .. 5.61 nsper elem
equals addendbinary-u.122-gls/mode=mismatchgf2_122-gls-umismatch5.64 ns5.62 ns .. 5.65 nsper elem
equals addendbinary-w.122-gls/mode=matchgf2_122-gls-wmatch4.23 ns4.22 ns .. 4.25 nsper elem
equals addendbinary-w.122-gls/mode=mismatchgf2_122-gls-wmismatch4.26 ns4.24 ns .. 4.28 nsper elem
equals addendbinary-lambda.122/mode=matchgf2_122-lambdamatch4.21 ns4.20 ns .. 4.23 nsper elem
equals addendbinary-lambda.122/mode=mismatchgf2_122-lambdamismatch4.23 ns4.22 ns .. 4.24 nsper elem
equals addendbinary-u.122/mode=matchgf2_122-umatch5.59 ns5.58 ns .. 5.60 nsper elem
equals addendbinary-u.122/mode=mismatchgf2_122-umismatch5.97 ns5.92 ns .. 6.03 nsper elem
equals addendbinary-w.122/mode=matchgf2_122-wmatch4.23 ns4.22 ns .. 4.24 nsper elem
equals addendbinary-w.122/mode=mismatchgf2_122-wmismatch4.41 ns4.38 ns .. 4.45 nsper elem
equals addendbinary.127/mode=matchgf2_127match3.97 ns3.96 ns .. 3.98 nsper elem
equals addendbinary.127/mode=mismatchgf2_127mismatch4.25 ns4.21 ns .. 4.30 nsper elem
equals addendbinary-lambda.127/mode=matchgf2_127-lambdamatch3.95 ns3.94 ns .. 3.96 nsper elem
equals addendbinary-lambda.127/mode=mismatchgf2_127-lambdamismatch4.05 ns4.04 ns .. 4.06 nsper elem
equals addendbinary-u.127/mode=matchgf2_127-umatch6.31 ns6.29 ns .. 6.33 nsper elem
equals addendbinary-u.127/mode=mismatchgf2_127-umismatch6.44 ns6.41 ns .. 6.46 nsper elem
equals addendbinary-w.127/mode=matchgf2_127-wmatch4.04 ns4.03 ns .. 4.04 nsper elem
equals addendbinary-w.127/mode=mismatchgf2_127-wmismatch4.05 ns4.04 ns .. 4.06 nsper elem
equals addendedwards.107/mode=mismatchedwards107mismatch4.93 ns4.91 ns .. 4.95 nsper elem
equals addendedwards.127/mode=mismatchedwards127mismatch3.16 ns3.15 ns .. 3.17 nsper elem
equals addendedwards.61x2/mode=mismatchedwards61x2mismatch2.97 ns2.96 ns .. 2.98 nsper elem
equals addendtwisted.goldilocks2/mode=mismatchtwisted-goldilocks2mismatch9.42 ns9.36 ns .. 9.50 nsper elem
equals addendtwisted.128/mode=mismatchtwisted128mismatch9.45 ns9.43 ns .. 9.47 nsper elem
equals addendtwisted.61x2/mode=matchtwisted61x2match8.55 ns8.54 ns .. 8.57 nsper elem
equals addendtwisted.61x2/mode=mismatchtwisted61x2mismatch8.85 ns8.79 ns .. 8.91 nsper elem
equals addendtwisted.64x2/mode=mismatchtwisted64x2mismatch7.68 ns7.65 ns .. 7.71 nsper elem
equals addendweier.107/mode=mismatchweier107mismatch5.81 ns5.80 ns .. 5.83 nsper elem
equals addendweier-jacobian.107/mode=mismatchweier107-jacobianmismatch9.23 ns9.20 ns .. 9.26 nsper elem
equals addendweier.127/mode=mismatchweier127mismatch3.53 ns3.52 ns .. 3.54 nsper elem
equals addendweier-jacobian.127/mode=mismatchweier127-jacobianmismatch6.60 ns6.58 ns .. 6.62 nsper elem
equals addendweier.61x2/mode=mismatchweier61x2mismatch3.33 ns3.32 ns .. 3.34 nsper elem
equals addendweier-jacobian.61x2/mode=mismatchweier61x2-jacobianmismatch7.98 ns7.93 ns .. 8.03 nsper elem
encodebinary.109/mode=batch,n=1024gf2_109batch18.2 ns18.1 ns .. 18.3 nsper elem
encodebinary.109/mode=batch,n=64gf2_109batch28.6 ns28.6 ns .. 28.7 nsper elem
encodebinary.109/mode=batch,n=8gf2_109batch94.4 ns93.7 ns .. 95.4 nsper elem
encodebinary.109/mode=indepgf2_109per-element538 ns537 ns .. 540 nsper elem
encodebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch14.1 ns14.1 ns .. 14.2 nsper elem
encodebinary-lambda.109/mode=batch,n=64gf2_109-lambdabatch24.8 ns24.7 ns .. 24.9 nsper elem
encodebinary-lambda.109/mode=batch,n=8gf2_109-lambdabatch90.0 ns89.7 ns .. 90.3 nsper elem
encodebinary-lambda.109/mode=indepgf2_109-lambdaper-element530 ns529 ns .. 532 nsper elem
encodebinary-u.109/mode=batch,n=1024gf2_109-ubatch21.9 ns21.9 ns .. 22.0 nsper elem
encodebinary-u.109/mode=batch,n=64gf2_109-ubatch31.7 ns31.6 ns .. 31.8 nsper elem
encodebinary-u.109/mode=batch,n=8gf2_109-ubatch97.1 ns96.8 ns .. 97.4 nsper elem
encodebinary-u.109/mode=indepgf2_109-uper-element546 ns545 ns .. 548 nsper elem
encodebinary-w.109/mode=batch,n=1024gf2_109-wbatch21.6 ns21.6 ns .. 21.7 nsper elem
encodebinary-w.109/mode=batch,n=64gf2_109-wbatch32.5 ns32.4 ns .. 32.6 nsper elem
encodebinary-w.109/mode=batch,n=8gf2_109-wbatch96.0 ns95.7 ns .. 96.3 nsper elem
encodebinary-w.109/mode=indepgf2_109-wper-element540 ns539 ns .. 541 nsper elem
encodebinary.122/mode=batch,n=1024gf2_122batch22.1 ns22.0 ns .. 22.1 nsper elem
encodebinary.122/mode=batch,n=64gf2_122batch28.9 ns28.8 ns .. 29.0 nsper elem
encodebinary.122/mode=batch,n=8gf2_122batch66.6 ns66.4 ns .. 66.8 nsper elem
encodebinary.122/mode=indepgf2_122per-element294 ns294 ns .. 295 nsper elem
encodebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch21.1 ns21.0 ns .. 21.2 nsper elem
encodebinary.122-gls/mode=batch,n=64gf2_122-glsbatch27.9 ns27.8 ns .. 28.0 nsper elem
encodebinary.122-gls/mode=batch,n=8gf2_122-glsbatch65.6 ns65.5 ns .. 65.8 nsper elem
encodebinary.122-gls/mode=indepgf2_122-glsper-element293 ns293 ns .. 294 nsper elem
encodebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch17.9 ns17.8 ns .. 17.9 nsper elem
encodebinary-lambda.122-gls/mode=batch,n=64gf2_122-gls-lambdabatch24.5 ns24.4 ns .. 24.6 nsper elem
encodebinary-lambda.122-gls/mode=batch,n=8gf2_122-gls-lambdabatch62.1 ns62.0 ns .. 62.2 nsper elem
encodebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element297 ns296 ns .. 297 nsper elem
encodebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch18.0 ns18.0 ns .. 18.1 nsper elem
encodebinary-u.122-gls/mode=batch,n=64gf2_122-gls-ubatch22.5 ns22.5 ns .. 22.5 nsper elem
encodebinary-u.122-gls/mode=batch,n=8gf2_122-gls-ubatch61.2 ns61.0 ns .. 61.4 nsper elem
encodebinary-u.122-gls/mode=indepgf2_122-gls-uper-element297 ns296 ns .. 299 nsper elem
encodebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch20.4 ns20.3 ns .. 20.5 nsper elem
encodebinary-w.122-gls/mode=batch,n=64gf2_122-gls-wbatch27.2 ns27.2 ns .. 27.3 nsper elem
encodebinary-w.122-gls/mode=batch,n=8gf2_122-gls-wbatch64.9 ns64.7 ns .. 65.0 nsper elem
encodebinary-w.122-gls/mode=indepgf2_122-gls-wper-element297 ns296 ns .. 297 nsper elem
encodebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch17.3 ns17.2 ns .. 17.3 nsper elem
encodebinary-lambda.122/mode=batch,n=64gf2_122-lambdabatch24.1 ns24.0 ns .. 24.1 nsper elem
encodebinary-lambda.122/mode=batch,n=8gf2_122-lambdabatch61.7 ns61.6 ns .. 61.9 nsper elem
encodebinary-lambda.122/mode=indepgf2_122-lambdaper-element287 ns286 ns .. 288 nsper elem
encodebinary-u.122/mode=batch,n=1024gf2_122-ubatch18.4 ns18.3 ns .. 18.5 nsper elem
encodebinary-u.122/mode=batch,n=64gf2_122-ubatch22.5 ns22.4 ns .. 22.5 nsper elem
encodebinary-u.122/mode=batch,n=8gf2_122-ubatch61.3 ns61.2 ns .. 61.5 nsper elem
encodebinary-u.122/mode=indepgf2_122-uper-element305 ns304 ns .. 306 nsper elem
encodebinary-w.122/mode=batch,n=1024gf2_122-wbatch21.2 ns21.0 ns .. 21.4 nsper elem
encodebinary-w.122/mode=batch,n=64gf2_122-wbatch27.0 ns26.8 ns .. 27.1 nsper elem
encodebinary-w.122/mode=batch,n=8gf2_122-wbatch64.3 ns64.1 ns .. 64.5 nsper elem
encodebinary-w.122/mode=indepgf2_122-wper-element302 ns300 ns .. 303 nsper elem
encodebinary.127/mode=batch,n=1024gf2_127batch22.7 ns22.5 ns .. 23.0 nsper elem
encodebinary.127/mode=batch,n=64gf2_127batch25.6 ns25.5 ns .. 25.6 nsper elem
encodebinary.127/mode=batch,n=8gf2_127batch46.0 ns45.9 ns .. 46.1 nsper elem
encodebinary.127/mode=indepgf2_127per-element151 ns149 ns .. 152 nsper elem
encodebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch17.5 ns17.4 ns .. 17.5 nsper elem
encodebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch21.8 ns21.7 ns .. 21.8 nsper elem
encodebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch42.0 ns41.9 ns .. 42.1 nsper elem
encodebinary-lambda.127/mode=indepgf2_127-lambdaper-element140 ns140 ns .. 141 nsper elem
encodebinary-u.127/mode=batch,n=1024gf2_127-ubatch12.6 ns12.5 ns .. 12.6 nsper elem
encodebinary-u.127/mode=batch,n=64gf2_127-ubatch16.3 ns16.2 ns .. 16.3 nsper elem
encodebinary-u.127/mode=batch,n=8gf2_127-ubatch38.2 ns38.1 ns .. 38.3 nsper elem
encodebinary-u.127/mode=indepgf2_127-uper-element137 ns137 ns .. 137 nsper elem
encodebinary-w.127/mode=batch,n=1024gf2_127-wbatch17.0 ns17.0 ns .. 17.1 nsper elem
encodebinary-w.127/mode=batch,n=64gf2_127-wbatch21.8 ns21.7 ns .. 21.9 nsper elem
encodebinary-w.127/mode=batch,n=8gf2_127-wbatch42.1 ns41.9 ns .. 42.2 nsper elem
encodebinary-w.127/mode=indepgf2_127-wper-element139 ns139 ns .. 140 nsper elem
encodeedwards.107/mode=batch,n=1024edwards107batch35.1 ns35.0 ns .. 35.4 nsper elem
encodeedwards.107/mode=indepedwards107per-element600 ns599 ns .. 601 nsper elem
encodeedwards.127/mode=batch,n=1024edwards127batch31.9 ns31.8 ns .. 32.0 nsper elem
encodeedwards.127/mode=indepedwards127per-element610 ns608 ns .. 611 nsper elem
encodeedwards.61x2/mode=batch,n=1024edwards61x2batch35.0 ns34.9 ns .. 35.1 nsper elem
encodeedwards.61x2/mode=indepedwards61x2per-element203 ns202 ns .. 203 nsper elem
encodetwisted.goldilocks2/mode=batch,n=1024twisted-goldilocks2batch22.9 ns22.9 ns .. 23.0 nsper elem
encodetwisted.goldilocks2/mode=indeptwisted-goldilocks2per-element316 ns316 ns .. 316 nsper elem
encodetwisted.128/mode=batch,n=1024twisted128batch22.7 ns22.7 ns .. 22.8 nsper elem
encodetwisted.128/mode=indeptwisted128per-element943 ns942 ns .. 946 nsper elem
encodetwisted.61x2/mode=batch,n=1024twisted61x2batch14.9 ns14.9 ns .. 15.0 nsper elem
encodetwisted.61x2/mode=batch,n=64twisted61x2batch21.1 ns21.1 ns .. 21.2 nsper elem
encodetwisted.61x2/mode=batch,n=8twisted61x2batch49.3 ns49.3 ns .. 49.4 nsper elem
encodetwisted.61x2/mode=indeptwisted61x2per-element189 ns189 ns .. 190 nsper elem
encodetwisted.64x2/mode=batch,n=1024twisted64x2batch22.6 ns22.5 ns .. 22.7 nsper elem
encodetwisted.64x2/mode=indeptwisted64x2per-element267 ns266 ns .. 268 nsper elem
encodeweier.107/mode=batch,n=1024weier107batch19.4 ns19.3 ns .. 19.5 nsper elem
encodeweier.107/mode=indepweier107per-element582 ns579 ns .. 584 nsper elem
encodeweier-jacobian.107/mode=batch,n=1024weier107-jacobianbatch25.5 ns25.4 ns .. 25.6 nsper elem
encodeweier-jacobian.107/mode=indepweier107-jacobianper-element580 ns578 ns .. 581 nsper elem
encodeweier.127/mode=batch,n=1024weier127batch16.7 ns16.7 ns .. 16.8 nsper elem
encodeweier.127/mode=indepweier127per-element593 ns591 ns .. 594 nsper elem
encodeweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch23.6 ns23.5 ns .. 23.7 nsper elem
encodeweier-jacobian.127/mode=indepweier127-jacobianper-element605 ns602 ns .. 609 nsper elem
encodeweier.61x2/mode=batch,n=1024weier61x2batch15.3 ns15.2 ns .. 15.3 nsper elem
encodeweier.61x2/mode=indepweier61x2per-element190 ns190 ns .. 191 nsper elem
encodeweier-jacobian.61x2/mode=batch,n=1024weier61x2-jacobianbatch24.8 ns24.7 ns .. 24.9 nsper elem
encodeweier-jacobian.61x2/mode=indepweier61x2-jacobianper-element198 ns198 ns .. 199 nsper elem
decodebinary.109/mode=batch,n=1024gf2_109batch26.7 ns26.6 ns .. 26.8 nsper elem
decodebinary.109/mode=batch,n=64gf2_109batch38.7 ns38.6 ns .. 38.8 nsper elem
decodebinary.109/mode=batch,n=8gf2_109batch108 ns108 ns .. 108 nsper elem
decodebinary.109/mode=indepgf2_109per-element554 ns553 ns .. 556 nsper elem
decodebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch26.5 ns26.4 ns .. 26.5 nsper elem
decodebinary-lambda.109/mode=batch,n=64gf2_109-lambdabatch39.1 ns38.9 ns .. 39.2 nsper elem
decodebinary-lambda.109/mode=batch,n=8gf2_109-lambdabatch109 ns108 ns .. 109 nsper elem
decodebinary-lambda.109/mode=indepgf2_109-lambdaper-element549 ns548 ns .. 551 nsper elem
decodebinary-u.109/mode=batch,n=1024gf2_109-ubatch27.7 ns27.7 ns .. 27.8 nsper elem
decodebinary-u.109/mode=batch,n=64gf2_109-ubatch40.3 ns40.1 ns .. 40.4 nsper elem
decodebinary-u.109/mode=batch,n=8gf2_109-ubatch109 ns108 ns .. 109 nsper elem
decodebinary-u.109/mode=indepgf2_109-uper-element555 ns555 ns .. 556 nsper elem
decodebinary-w.109/mode=batch,n=1024gf2_109-wbatch24.4 ns24.3 ns .. 24.4 nsper elem
decodebinary-w.109/mode=batch,n=64gf2_109-wbatch36.8 ns36.7 ns .. 37.0 nsper elem
decodebinary-w.109/mode=batch,n=8gf2_109-wbatch105 ns105 ns .. 106 nsper elem
decodebinary-w.109/mode=indepgf2_109-wper-element555 ns553 ns .. 556 nsper elem
decodebinary.122/mode=batch,n=1024gf2_122batch24.0 ns23.9 ns .. 24.1 nsper elem
decodebinary.122/mode=batch,n=64gf2_122batch32.4 ns32.3 ns .. 32.5 nsper elem
decodebinary.122/mode=batch,n=8gf2_122batch73.5 ns73.4 ns .. 73.7 nsper elem
decodebinary.122/mode=indepgf2_122per-element313 ns312 ns .. 313 nsper elem
decodebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch22.7 ns22.6 ns .. 22.7 nsper elem
decodebinary.122-gls/mode=batch,n=64gf2_122-glsbatch31.0 ns30.9 ns .. 31.1 nsper elem
decodebinary.122-gls/mode=batch,n=8gf2_122-glsbatch71.5 ns71.4 ns .. 71.7 nsper elem
decodebinary.122-gls/mode=indepgf2_122-glsper-element313 ns312 ns .. 313 nsper elem
decodebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch22.6 ns22.6 ns .. 22.7 nsper elem
decodebinary-lambda.122-gls/mode=batch,n=64gf2_122-gls-lambdabatch32.1 ns32.0 ns .. 32.2 nsper elem
decodebinary-lambda.122-gls/mode=batch,n=8gf2_122-gls-lambdabatch73.7 ns73.6 ns .. 73.9 nsper elem
decodebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element311 ns310 ns .. 312 nsper elem
decodebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch24.7 ns24.6 ns .. 24.8 nsper elem
decodebinary-u.122-gls/mode=batch,n=64gf2_122-gls-ubatch32.9 ns32.8 ns .. 33.0 nsper elem
decodebinary-u.122-gls/mode=batch,n=8gf2_122-gls-ubatch73.8 ns73.6 ns .. 73.9 nsper elem
decodebinary-u.122-gls/mode=indepgf2_122-gls-uper-element313 ns311 ns .. 314 nsper elem
decodebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch20.9 ns20.8 ns .. 21.0 nsper elem
decodebinary-w.122-gls/mode=batch,n=64gf2_122-gls-wbatch29.1 ns29.1 ns .. 29.2 nsper elem
decodebinary-w.122-gls/mode=batch,n=8gf2_122-gls-wbatch70.1 ns69.9 ns .. 70.2 nsper elem
decodebinary-w.122-gls/mode=indepgf2_122-gls-wper-element305 ns304 ns .. 306 nsper elem
decodebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch24.1 ns24.0 ns .. 24.1 nsper elem
decodebinary-lambda.122/mode=batch,n=64gf2_122-lambdabatch32.2 ns32.2 ns .. 32.3 nsper elem
decodebinary-lambda.122/mode=batch,n=8gf2_122-lambdabatch73.1 ns72.9 ns .. 73.2 nsper elem
decodebinary-lambda.122/mode=indepgf2_122-lambdaper-element314 ns313 ns .. 314 nsper elem
decodebinary-u.122/mode=batch,n=1024gf2_122-ubatch26.0 ns25.8 ns .. 26.2 nsper elem
decodebinary-u.122/mode=batch,n=64gf2_122-ubatch33.6 ns33.6 ns .. 33.7 nsper elem
decodebinary-u.122/mode=batch,n=8gf2_122-ubatch74.7 ns74.6 ns .. 74.8 nsper elem
decodebinary-u.122/mode=indepgf2_122-uper-element317 ns315 ns .. 319 nsper elem
decodebinary-w.122/mode=batch,n=1024gf2_122-wbatch21.6 ns21.5 ns .. 21.7 nsper elem
decodebinary-w.122/mode=batch,n=64gf2_122-wbatch29.8 ns29.7 ns .. 29.9 nsper elem
decodebinary-w.122/mode=batch,n=8gf2_122-wbatch70.9 ns70.7 ns .. 71.1 nsper elem
decodebinary-w.122/mode=indepgf2_122-wper-element307 ns306 ns .. 308 nsper elem
decodebinary.127/mode=batch,n=1024gf2_127batch25.7 ns25.6 ns .. 25.7 nsper elem
decodebinary.127/mode=batch,n=64gf2_127batch29.6 ns29.5 ns .. 29.6 nsper elem
decodebinary.127/mode=batch,n=8gf2_127batch54.2 ns54.1 ns .. 54.3 nsper elem
decodebinary.127/mode=indepgf2_127per-element164 ns163 ns .. 164 nsper elem
decodebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch24.0 ns24.0 ns .. 24.1 nsper elem
decodebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch29.7 ns29.7 ns .. 29.8 nsper elem
decodebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch54.2 ns54.2 ns .. 54.3 nsper elem
decodebinary-lambda.127/mode=indepgf2_127-lambdaper-element155 ns154 ns .. 155 nsper elem
decodebinary-u.127/mode=batch,n=1024gf2_127-ubatch27.5 ns27.5 ns .. 27.6 nsper elem
decodebinary-u.127/mode=batch,n=64gf2_127-ubatch32.8 ns32.7 ns .. 32.9 nsper elem
decodebinary-u.127/mode=batch,n=8gf2_127-ubatch57.6 ns57.4 ns .. 57.8 nsper elem
decodebinary-u.127/mode=indepgf2_127-uper-element162 ns161 ns .. 162 nsper elem
decodebinary-w.127/mode=batch,n=1024gf2_127-wbatch22.6 ns22.5 ns .. 22.6 nsper elem
decodebinary-w.127/mode=batch,n=64gf2_127-wbatch28.8 ns28.7 ns .. 28.9 nsper elem
decodebinary-w.127/mode=batch,n=8gf2_127-wbatch55.2 ns55.1 ns .. 55.4 nsper elem
decodebinary-w.127/mode=indepgf2_127-wper-element155 ns154 ns .. 155 nsper elem
decodeedwards.107/mode=batch,n=1024edwards107batch426 ns424 ns .. 427 nsper elem
decodeedwards.107/mode=indepedwards107per-element424 ns423 ns .. 426 nsper elem
decodeedwards.127/mode=batch,n=1024edwards127batch541 ns540 ns .. 543 nsper elem
decodeedwards.127/mode=indepedwards127per-element540 ns539 ns .. 541 nsper elem
decodeedwards.61x2/mode=batch,n=1024edwards61x2batch441 ns439 ns .. 442 nsper elem
decodeedwards.61x2/mode=indepedwards61x2per-element437 ns436 ns .. 439 nsper elem
decodetwisted.goldilocks2/mode=batch,n=1024twisted-goldilocks2batch1.92 µs1.92 µs .. 1.93 µsper elem
decodetwisted.goldilocks2/mode=indeptwisted-goldilocks2per-element1.91 µs1.91 µs .. 1.91 µsper elem
decodetwisted.128/mode=batch,n=1024twisted128batch962 ns960 ns .. 965 nsper elem
decodetwisted.128/mode=indeptwisted128per-element960 ns959 ns .. 962 nsper elem
decodetwisted.61x2/mode=batch,n=1024twisted61x2batch450 ns449 ns .. 451 nsper elem
decodetwisted.61x2/mode=batch,n=64twisted61x2batch447 ns446 ns .. 447 nsper elem
decodetwisted.61x2/mode=batch,n=8twisted61x2batch448 ns447 ns .. 449 nsper elem
decodetwisted.61x2/mode=indeptwisted61x2per-element448 ns447 ns .. 449 nsper elem
decodetwisted.64x2/mode=batch,n=1024twisted64x2batch647 ns646 ns .. 649 nsper elem
decodetwisted.64x2/mode=indeptwisted64x2per-element650 ns648 ns .. 652 nsper elem
decodeweier.107/mode=batch,n=1024weier107batch422 ns421 ns .. 423 nsper elem
decodeweier.107/mode=indepweier107per-element421 ns420 ns .. 422 nsper elem
decodeweier-jacobian.107/mode=batch,n=1024weier107-jacobianbatch421 ns420 ns .. 422 nsper elem
decodeweier-jacobian.107/mode=indepweier107-jacobianper-element419 ns418 ns .. 421 nsper elem
decodeweier.127/mode=batch,n=1024weier127batch539 ns538 ns .. 541 nsper elem
decodeweier.127/mode=indepweier127per-element541 ns540 ns .. 543 nsper elem
decodeweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch542 ns541 ns .. 543 nsper elem
decodeweier-jacobian.127/mode=indepweier127-jacobianper-element543 ns541 ns .. 545 nsper elem
decodeweier.61x2/mode=batch,n=1024weier61x2batch448 ns447 ns .. 449 nsper elem
decodeweier.61x2/mode=indepweier61x2per-element441 ns440 ns .. 442 nsper elem
decodeweier-jacobian.61x2/mode=batch,n=1024weier61x2-jacobianbatch445 ns444 ns .. 446 nsper elem
decodeweier-jacobian.61x2/mode=indepweier61x2-jacobianper-element440 ns439 ns .. 441 nsper elem
normalizegf2_109/normalize, batchedgf2_109batch16.4 ns16.3 ns .. 16.4 nsper elem
normalizegf2_122/normalize, batchedgf2_122batch17.2 ns17.2 ns .. 17.3 nsper elem
normalizegf2_122-gls/normalize, batchedgf2_122-glsbatch16.3 ns16.2 ns .. 16.3 nsper elem
batch sumgf2_109/batch affine (tree sum)gf2_109batch21.4 ns21.4 ns .. 21.5 nsper elem
batch sumgf2_122/batch affine (tree sum)gf2_122batch18.7 ns18.7 ns .. 18.8 nsper elem
batch sumgf2_127/batch affine (tree sum)gf2_127batch16.2 ns16.1 ns .. 16.2 nsper elem
batch sumedwards107/batch montgomery affine (tree sum)edwards107batch36.7 ns36.5 ns .. 36.8 nsper elem
batch sumedwards127/batch montgomery affine (tree sum)edwards127batch40.8 ns40.7 ns .. 40.9 nsper elem
batch sumweier107/batch affine (tree sum)weier107batch35.9 ns35.8 ns .. 36.1 nsper elem
batch sumweier127/batch affine (tree sum)weier127batch39.3 ns39.1 ns .. 39.4 nsper elem
batch sumsecp256k1/combine_keys (jacobian += affine)secp256k1batch162 ns162 ns .. 163 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.

262 benchmarks
operationbenchmarkfamilymodetime95% CIunit
hash to curvesha256 (XOR baseline)xorper-element53.4 ns52.9 ns .. 53.9 nsper elem
hash to curvebinary.109/mode=batch,n=1024gf2_109batch126 ns125 ns .. 127 nsper elem
hash to curvebinary.109/mode=batch,n=64gf2_109batch195 ns194 ns .. 195 nsper elem
hash to curvebinary.109/mode=batch,n=8gf2_109batch431 ns430 ns .. 432 nsper elem
hash to curvebinary.109/mode=indepgf2_109per-element1.16 µs1.16 µs .. 1.17 µsper elem
hash to curvebinary-lambda.109/mode=batch,n=1024gf2_109-lambdabatch124 ns124 ns .. 125 nsper elem
hash to curvebinary-lambda.109/mode=batch,n=64gf2_109-lambdabatch195 ns194 ns .. 195 nsper elem
hash to curvebinary-lambda.109/mode=batch,n=8gf2_109-lambdabatch431 ns430 ns .. 433 nsper elem
hash to curvebinary-lambda.109/mode=indepgf2_109-lambdaper-element1.16 µs1.16 µs .. 1.16 µsper elem
hash to curvebinary-u.109/mode=batch,n=1024gf2_109-ubatch125 ns125 ns .. 125 nsper elem
hash to curvebinary-u.109/mode=batch,n=64gf2_109-ubatch189 ns189 ns .. 190 nsper elem
hash to curvebinary-u.109/mode=batch,n=8gf2_109-ubatch417 ns416 ns .. 419 nsper elem
hash to curvebinary-u.109/mode=indepgf2_109-uper-element1.15 µs1.15 µs .. 1.16 µsper elem
hash to curvebinary-w.109/mode=batch,n=1024gf2_109-wbatch120 ns119 ns .. 121 nsper elem
hash to curvebinary-w.109/mode=batch,n=64gf2_109-wbatch183 ns182 ns .. 183 nsper elem
hash to curvebinary-w.109/mode=batch,n=8gf2_109-wbatch413 ns412 ns .. 415 nsper elem
hash to curvebinary-w.109/mode=indepgf2_109-wper-element1.14 µs1.13 µs .. 1.14 µsper elem
hash to curvebinary.122/mode=batch,n=1024gf2_122batch114 ns114 ns .. 114 nsper elem
hash to curvebinary.122/mode=batch,n=64gf2_122batch155 ns155 ns .. 156 nsper elem
hash to curvebinary.122/mode=batch,n=8gf2_122batch293 ns292 ns .. 294 nsper elem
hash to curvebinary.122/mode=indepgf2_122per-element670 ns669 ns .. 671 nsper elem
hash to curvebinary.122-gls/mode=batch,n=1024gf2_122-glsbatch116 ns116 ns .. 117 nsper elem
hash to curvebinary.122-gls/mode=batch,n=64gf2_122-glsbatch161 ns161 ns .. 162 nsper elem
hash to curvebinary.122-gls/mode=batch,n=8gf2_122-glsbatch308 ns308 ns .. 309 nsper elem
hash to curvebinary.122-gls/mode=indepgf2_122-glsper-element697 ns693 ns .. 702 nsper elem
hash to curvebinary-lambda.122-gls/mode=batch,n=1024gf2_122-gls-lambdabatch116 ns115 ns .. 116 nsper elem
hash to curvebinary-lambda.122-gls/mode=batch,n=64gf2_122-gls-lambdabatch161 ns161 ns .. 161 nsper elem
hash to curvebinary-lambda.122-gls/mode=batch,n=8gf2_122-gls-lambdabatch306 ns306 ns .. 307 nsper elem
hash to curvebinary-lambda.122-gls/mode=indepgf2_122-gls-lambdaper-element692 ns688 ns .. 696 nsper elem
hash to curvebinary-u.122-gls/mode=batch,n=1024gf2_122-gls-ubatch121 ns120 ns .. 121 nsper elem
hash to curvebinary-u.122-gls/mode=batch,n=64gf2_122-gls-ubatch165 ns165 ns .. 166 nsper elem
hash to curvebinary-u.122-gls/mode=batch,n=8gf2_122-gls-ubatch298 ns298 ns .. 299 nsper elem
hash to curvebinary-u.122-gls/mode=indepgf2_122-gls-uper-element678 ns676 ns .. 680 nsper elem
hash to curvebinary-w.122-gls/mode=batch,n=1024gf2_122-gls-wbatch116 ns115 ns .. 116 nsper elem
hash to curvebinary-w.122-gls/mode=batch,n=64gf2_122-gls-wbatch161 ns160 ns .. 161 nsper elem
hash to curvebinary-w.122-gls/mode=batch,n=8gf2_122-gls-wbatch303 ns303 ns .. 304 nsper elem
hash to curvebinary-w.122-gls/mode=indepgf2_122-gls-wper-element659 ns658 ns .. 660 nsper elem
hash to curvebinary-lambda.122/mode=batch,n=1024gf2_122-lambdabatch115 ns115 ns .. 116 nsper elem
hash to curvebinary-lambda.122/mode=batch,n=64gf2_122-lambdabatch156 ns156 ns .. 157 nsper elem
hash to curvebinary-lambda.122/mode=batch,n=8gf2_122-lambdabatch294 ns294 ns .. 295 nsper elem
hash to curvebinary-lambda.122/mode=indepgf2_122-lambdaper-element679 ns677 ns .. 680 nsper elem
hash to curvebinary-u.122/mode=batch,n=1024gf2_122-ubatch127 ns125 ns .. 128 nsper elem
hash to curvebinary-u.122/mode=batch,n=64gf2_122-ubatch164 ns164 ns .. 165 nsper elem
hash to curvebinary-u.122/mode=batch,n=8gf2_122-ubatch301 ns301 ns .. 302 nsper elem
hash to curvebinary-u.122/mode=indepgf2_122-uper-element674 ns672 ns .. 676 nsper elem
hash to curvebinary-w.122/mode=batch,n=1024gf2_122-wbatch116 ns116 ns .. 117 nsper elem
hash to curvebinary-w.122/mode=batch,n=64gf2_122-wbatch156 ns156 ns .. 156 nsper elem
hash to curvebinary-w.122/mode=batch,n=8gf2_122-wbatch294 ns294 ns .. 295 nsper elem
hash to curvebinary-w.122/mode=indepgf2_122-wper-element654 ns653 ns .. 656 nsper elem
hash to curvebinary.127/mode=batch,n=1024gf2_127batch113 ns112 ns .. 113 nsper elem
hash to curvebinary.127/mode=batch,n=64gf2_127batch137 ns136 ns .. 137 nsper elem
hash to curvebinary.127/mode=batch,n=8gf2_127batch200 ns199 ns .. 200 nsper elem
hash to curvebinary.127/mode=indepgf2_127per-element366 ns365 ns .. 368 nsper elem
hash to curvebinary-lambda.127/mode=batch,n=1024gf2_127-lambdabatch114 ns114 ns .. 115 nsper elem
hash to curvebinary-lambda.127/mode=batch,n=64gf2_127-lambdabatch137 ns137 ns .. 137 nsper elem
hash to curvebinary-lambda.127/mode=batch,n=8gf2_127-lambdabatch204 ns203 ns .. 204 nsper elem
hash to curvebinary-lambda.127/mode=indepgf2_127-lambdaper-element394 ns392 ns .. 396 nsper elem
hash to curvebinary-u.127/mode=batch,n=1024gf2_127-ubatch125 ns124 ns .. 125 nsper elem
hash to curvebinary-u.127/mode=batch,n=64gf2_127-ubatch153 ns152 ns .. 153 nsper elem
hash to curvebinary-u.127/mode=batch,n=8gf2_127-ubatch225 ns225 ns .. 226 nsper elem
hash to curvebinary-u.127/mode=indepgf2_127-uper-element401 ns400 ns .. 403 nsper elem
hash to curvebinary-w.127/mode=batch,n=1024gf2_127-wbatch119 ns119 ns .. 120 nsper elem
hash to curvebinary-w.127/mode=batch,n=64gf2_127-wbatch145 ns145 ns .. 145 nsper elem
hash to curvebinary-w.127/mode=batch,n=8gf2_127-wbatch219 ns218 ns .. 219 nsper elem
hash to curvebinary-w.127/mode=indepgf2_127-wper-element392 ns391 ns .. 393 nsper elem
hash to curveedwards.107/mode=batch,n=1024edwards107batch916 ns914 ns .. 919 nsper elem
hash to curveedwards.107/mode=indepedwards107per-element919 ns916 ns .. 922 nsper elem
hash to curveedwards107/edwards-native try-and-incrementedwards107per-element1.31 µs1.31 µs .. 1.32 µsper elem
hash to curveedwards.127/mode=batch,n=1024edwards127batch1.24 µs1.23 µs .. 1.24 µsper elem
hash to curveedwards.127/mode=indepedwards127per-element1.22 µs1.22 µs .. 1.23 µsper elem
hash to curveedwards127/edwards-native try-and-incrementedwards127per-element1.29 µs1.28 µs .. 1.29 µsper elem
hash to curveedwards.61x2/mode=batch,n=1024edwards61x2batch706 ns704 ns .. 708 nsper elem
hash to curveedwards.61x2/mode=indepedwards61x2per-element707 ns705 ns .. 708 nsper elem
hash to curvetwisted.goldilocks2/mode=batch,n=1024twisted-goldilocks2batch2.24 µs2.23 µs .. 2.24 µsper elem
hash to curvetwisted.goldilocks2/mode=indeptwisted-goldilocks2per-element2.21 µs2.21 µs .. 2.22 µsper elem
hash to curvetwisted.128/mode=batch,n=1024twisted128batch1.96 µs1.96 µs .. 1.96 µsper elem
hash to curvetwisted.128/mode=indeptwisted128per-element1.97 µs1.96 µs .. 1.97 µsper elem
hash to curvetwisted.61x2/mode=batch,n=1024twisted61x2batch711 ns708 ns .. 713 nsper elem
hash to curvetwisted.61x2/mode=batch,n=64twisted61x2batch703 ns702 ns .. 704 nsper elem
hash to curvetwisted.61x2/mode=batch,n=8twisted61x2batch703 ns701 ns .. 705 nsper elem
hash to curvetwisted.61x2/mode=indeptwisted61x2per-element706 ns704 ns .. 708 nsper elem
hash to curvetwisted.64x2/mode=batch,n=1024twisted64x2batch1.00 µs1.00 µs .. 1.01 µsper elem
hash to curvetwisted.64x2/mode=indeptwisted64x2per-element1.00 µs999 ns .. 1.01 µsper elem
hash to curveweier.107/mode=batch,n=1024weier107batch901 ns899 ns .. 904 nsper elem
hash to curveweier.107/mode=indepweier107per-element892 ns890 ns .. 895 nsper elem
hash to curveweier-jacobian.107/mode=batch,n=1024weier107-jacobianbatch893 ns891 ns .. 895 nsper elem
hash to curveweier-jacobian.107/mode=indepweier107-jacobianper-element886 ns884 ns .. 888 nsper elem
hash to curveweier.127/mode=batch,n=1024weier127batch1.17 µs1.16 µs .. 1.17 µsper elem
hash to curveweier.127/mode=indepweier127per-element1.16 µs1.16 µs .. 1.16 µsper elem
hash to curveweier-jacobian.127/mode=batch,n=1024weier127-jacobianbatch1.16 µs1.16 µs .. 1.16 µsper elem
hash to curveweier-jacobian.127/mode=indepweier127-jacobianper-element1.15 µs1.15 µs .. 1.16 µsper elem
hash to curveweier.61x2/mode=batch,n=1024weier61x2batch698 ns696 ns .. 700 nsper elem
hash to curveweier.61x2/mode=indepweier61x2per-element696 ns694 ns .. 697 nsper elem
hash to curveweier-jacobian.61x2/mode=batch,n=1024weier61x2-jacobianbatch698 ns696 ns .. 700 nsper elem
hash to curveweier-jacobian.61x2/mode=indepweier61x2-jacobianper-element702 ns700 ns .. 704 nsper elem
hash to curveristretto255/hash_from_bytes<Sha512>ristretto255per-element6.03 µs6.02 µs .. 6.05 µsper elem
hash to curvesecp256k1/ellswift decodesecp256k1per-element6.16 µs6.14 µs .. 6.18 µsper elem
hash to curvesecp256k1/try-and-increment (parse)secp256k1per-element6.17 µs6.16 µs .. 6.19 µsper elem
ID to addendbinary.109/proj=fp127,h2c=pornin,mode=batch,n=1024gf2_109batch66.9 ns66.8 ns .. 67.1 nsper elem
ID to addendbinary.109/proj=fp127,h2c=ti,mode=batch,n=1024gf2_109batch71.9 ns71.7 ns .. 72.0 nsper elem
ID to addendbinary.109/proj=fp130,h2c=pornin,mode=batch,n=1024gf2_109batch72.5 ns72.3 ns .. 72.8 nsper elem
ID to addendbinary.109/proj=fp130,h2c=ti,mode=batch,n=1024gf2_109batch103 ns103 ns .. 104 nsper elem
ID to addendbinary.109/proj=gf2_127,h2c=pornin,mode=batch,n=1024gf2_109batch63.8 ns63.6 ns .. 63.9 nsper elem
ID to addendbinary.109/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_109batch71.6 ns71.4 ns .. 71.9 nsper elem
ID to addendbinary.109/proj=none,h2c=pornin,mode=batch,n=1024gf2_109batch113 ns113 ns .. 114 nsper elem
ID to addendbinary.109/proj=none,h2c=ti,mode=batch,n=1024gf2_109batch132 ns131 ns .. 132 nsper elem
ID to addendbinary-lambda.109/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_109-lambdabatch59.1 ns58.9 ns .. 59.3 nsper elem
ID to addendbinary-lambda.109/proj=fp127,h2c=ti,mode=batch,n=1024gf2_109-lambdabatch74.9 ns74.7 ns .. 75.1 nsper elem
ID to addendbinary-lambda.109/proj=fp127,h2c=ti-addend,mode=batch,n=1024gf2_109-lambdabatch66.5 ns66.3 ns .. 66.8 nsper elem
ID to addendbinary-lambda.109/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_109-lambdabatch65.0 ns64.7 ns .. 65.2 nsper elem
ID to addendbinary-lambda.109/proj=fp130,h2c=ti,mode=batch,n=1024gf2_109-lambdabatch102 ns102 ns .. 103 nsper elem
ID to addendbinary-lambda.109/proj=fp130,h2c=ti-addend,mode=batch,n=1024gf2_109-lambdabatch93.8 ns93.4 ns .. 94.2 nsper elem
ID to addendbinary-lambda.109/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_109-lambdabatch55.7 ns55.5 ns .. 55.8 nsper elem
ID to addendbinary-lambda.109/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_109-lambdabatch72.5 ns72.3 ns .. 72.7 nsper elem
ID to addendbinary-lambda.109/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024gf2_109-lambdabatch64.3 ns64.1 ns .. 64.4 nsper elem
ID to addendbinary-lambda.109/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_109-lambdabatch105 ns105 ns .. 106 nsper elem
ID to addendbinary-lambda.109/proj=none,h2c=ti,mode=batch,n=1024gf2_109-lambdabatch132 ns132 ns .. 133 nsper elem
ID to addendbinary-lambda.109/proj=none,h2c=ti-addend,mode=batch,n=1024gf2_109-lambdabatch124 ns124 ns .. 125 nsper elem
ID to addendbinary-u.109/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_109-ubatch64.2 ns64.0 ns .. 64.4 nsper elem
ID to addendbinary-u.109/proj=fp127,h2c=ti,mode=batch,n=1024gf2_109-ubatch71.9 ns71.7 ns .. 72.2 nsper elem
ID to addendbinary-u.109/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_109-ubatch69.8 ns69.6 ns .. 70.0 nsper elem
ID to addendbinary-u.109/proj=fp130,h2c=ti,mode=batch,n=1024gf2_109-ubatch98.9 ns98.7 ns .. 99.2 nsper elem
ID to addendbinary-u.109/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_109-ubatch60.6 ns60.3 ns .. 60.8 nsper elem
ID to addendbinary-u.109/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_109-ubatch70.2 ns70.0 ns .. 70.4 nsper elem
ID to addendbinary-u.109/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_109-ubatch110 ns110 ns .. 111 nsper elem
ID to addendbinary-u.109/proj=none,h2c=ti,mode=batch,n=1024gf2_109-ubatch130 ns130 ns .. 130 nsper elem
ID to addendbinary-w.109/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_109-wbatch58.5 ns58.4 ns .. 58.7 nsper elem
ID to addendbinary-w.109/proj=fp127,h2c=ti,mode=batch,n=1024gf2_109-wbatch67.2 ns66.6 ns .. 68.0 nsper elem
ID to addendbinary-w.109/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_109-wbatch65.0 ns64.8 ns .. 65.2 nsper elem
ID to addendbinary-w.109/proj=fp130,h2c=ti,mode=batch,n=1024gf2_109-wbatch92.7 ns92.4 ns .. 93.0 nsper elem
ID to addendbinary-w.109/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_109-wbatch56.3 ns56.1 ns .. 56.4 nsper elem
ID to addendbinary-w.109/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_109-wbatch65.0 ns64.8 ns .. 65.2 nsper elem
ID to addendbinary-w.109/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_109-wbatch105 ns105 ns .. 105 nsper elem
ID to addendbinary-w.109/proj=none,h2c=ti,mode=batch,n=1024gf2_109-wbatch124 ns124 ns .. 125 nsper elem
ID to addendbinary.122/proj=fp127,h2c=pornin,mode=batch,n=1024gf2_122batch56.1 ns55.9 ns .. 56.3 nsper elem
ID to addendbinary.122/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122batch69.9 ns69.7 ns .. 70.1 nsper elem
ID to addendbinary.122/proj=fp130,h2c=pornin,mode=batch,n=1024gf2_122batch62.2 ns62.0 ns .. 62.4 nsper elem
ID to addendbinary.122/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122batch95.5 ns95.2 ns .. 95.8 nsper elem
ID to addendbinary.122/proj=gf2_127,h2c=pornin,mode=batch,n=1024gf2_122batch53.4 ns53.2 ns .. 53.6 nsper elem
ID to addendbinary.122/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122batch63.4 ns63.2 ns .. 63.5 nsper elem
ID to addendbinary.122/proj=none,h2c=pornin,mode=batch,n=1024gf2_122batch103 ns102 ns .. 103 nsper elem
ID to addendbinary.122/proj=none,h2c=ti,mode=batch,n=1024gf2_122batch126 ns125 ns .. 127 nsper elem
ID to addendbinary.122-gls/proj=fp127,h2c=pornin,mode=batch,n=1024gf2_122-glsbatch54.7 ns54.6 ns .. 54.8 nsper elem
ID to addendbinary.122-gls/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-glsbatch67.3 ns67.2 ns .. 67.4 nsper elem
ID to addendbinary.122-gls/proj=fp130,h2c=pornin,mode=batch,n=1024gf2_122-glsbatch60.7 ns60.5 ns .. 60.9 nsper elem
ID to addendbinary.122-gls/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-glsbatch92.7 ns92.5 ns .. 92.8 nsper elem
ID to addendbinary.122-gls/proj=gf2_127,h2c=pornin,mode=batch,n=1024gf2_122-glsbatch51.7 ns51.5 ns .. 51.9 nsper elem
ID to addendbinary.122-gls/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-glsbatch62.7 ns62.6 ns .. 62.9 nsper elem
ID to addendbinary.122-gls/proj=none,h2c=pornin,mode=batch,n=1024gf2_122-glsbatch100 ns100 ns .. 100 nsper elem
ID to addendbinary.122-gls/proj=none,h2c=ti,mode=batch,n=1024gf2_122-glsbatch120 ns120 ns .. 121 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-lambdabatch48.8 ns48.6 ns .. 48.9 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-gls-lambdabatch69.5 ns69.5 ns .. 69.6 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp127,h2c=ti-addend,mode=batch,n=1024gf2_122-gls-lambdabatch60.5 ns60.4 ns .. 60.6 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-lambdabatch55.4 ns55.2 ns .. 55.5 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-gls-lambdabatch97.3 ns97.1 ns .. 97.5 nsper elem
ID to addendbinary-lambda.122-gls/proj=fp130,h2c=ti-addend,mode=batch,n=1024gf2_122-gls-lambdabatch88.7 ns88.5 ns .. 89.0 nsper elem
ID to addendbinary-lambda.122-gls/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-lambdabatch46.1 ns46.0 ns .. 46.2 nsper elem
ID to addendbinary-lambda.122-gls/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-gls-lambdabatch64.6 ns64.5 ns .. 64.7 nsper elem
ID to addendbinary-lambda.122-gls/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024gf2_122-gls-lambdabatch55.5 ns55.4 ns .. 55.6 nsper elem
ID to addendbinary-lambda.122-gls/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-lambdabatch95.2 ns95.0 ns .. 95.4 nsper elem
ID to addendbinary-lambda.122-gls/proj=none,h2c=ti,mode=batch,n=1024gf2_122-gls-lambdabatch124 ns123 ns .. 124 nsper elem
ID to addendbinary-lambda.122-gls/proj=none,h2c=ti-addend,mode=batch,n=1024gf2_122-gls-lambdabatch114 ns114 ns .. 114 nsper elem
ID to addendbinary-u.122-gls/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-ubatch53.6 ns53.4 ns .. 53.8 nsper elem
ID to addendbinary-u.122-gls/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-gls-ubatch65.6 ns65.4 ns .. 65.7 nsper elem
ID to addendbinary-u.122-gls/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-ubatch59.2 ns59.0 ns .. 59.3 nsper elem
ID to addendbinary-u.122-gls/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-gls-ubatch94.3 ns94.1 ns .. 94.6 nsper elem
ID to addendbinary-u.122-gls/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-ubatch50.1 ns50.0 ns .. 50.2 nsper elem
ID to addendbinary-u.122-gls/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-gls-ubatch61.9 ns61.8 ns .. 62.0 nsper elem
ID to addendbinary-u.122-gls/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-ubatch99.5 ns99.2 ns .. 99.8 nsper elem
ID to addendbinary-u.122-gls/proj=none,h2c=ti,mode=batch,n=1024gf2_122-gls-ubatch123 ns123 ns .. 124 nsper elem
ID to addendbinary-w.122-gls/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-wbatch50.0 ns49.8 ns .. 50.1 nsper elem
ID to addendbinary-w.122-gls/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-gls-wbatch61.4 ns61.2 ns .. 61.6 nsper elem
ID to addendbinary-w.122-gls/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-wbatch55.3 ns55.2 ns .. 55.4 nsper elem
ID to addendbinary-w.122-gls/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-gls-wbatch87.5 ns87.3 ns .. 87.8 nsper elem
ID to addendbinary-w.122-gls/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-wbatch46.4 ns46.3 ns .. 46.5 nsper elem
ID to addendbinary-w.122-gls/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-gls-wbatch58.1 ns57.9 ns .. 58.2 nsper elem
ID to addendbinary-w.122-gls/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-gls-wbatch95.1 ns94.9 ns .. 95.3 nsper elem
ID to addendbinary-w.122-gls/proj=none,h2c=ti,mode=batch,n=1024gf2_122-gls-wbatch116 ns116 ns .. 117 nsper elem
ID to addendbinary-lambda.122/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-lambdabatch49.8 ns49.6 ns .. 50.0 nsper elem
ID to addendbinary-lambda.122/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-lambdabatch72.1 ns71.9 ns .. 72.4 nsper elem
ID to addendbinary-lambda.122/proj=fp127,h2c=ti-addend,mode=batch,n=1024gf2_122-lambdabatch63.0 ns62.8 ns .. 63.3 nsper elem
ID to addendbinary-lambda.122/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-lambdabatch55.8 ns55.6 ns .. 55.9 nsper elem
ID to addendbinary-lambda.122/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-lambdabatch97.5 ns97.2 ns .. 97.8 nsper elem
ID to addendbinary-lambda.122/proj=fp130,h2c=ti-addend,mode=batch,n=1024gf2_122-lambdabatch88.0 ns87.7 ns .. 88.3 nsper elem
ID to addendbinary-lambda.122/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-lambdabatch46.4 ns46.2 ns .. 46.5 nsper elem
ID to addendbinary-lambda.122/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-lambdabatch64.5 ns64.3 ns .. 64.8 nsper elem
ID to addendbinary-lambda.122/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024gf2_122-lambdabatch55.1 ns55.0 ns .. 55.3 nsper elem
ID to addendbinary-lambda.122/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-lambdabatch95.8 ns95.6 ns .. 96.1 nsper elem
ID to addendbinary-lambda.122/proj=none,h2c=ti,mode=batch,n=1024gf2_122-lambdabatch126 ns126 ns .. 127 nsper elem
ID to addendbinary-lambda.122/proj=none,h2c=ti-addend,mode=batch,n=1024gf2_122-lambdabatch118 ns117 ns .. 118 nsper elem
ID to addendbinary-u.122/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-ubatch53.8 ns53.7 ns .. 54.0 nsper elem
ID to addendbinary-u.122/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-ubatch68.6 ns68.5 ns .. 68.8 nsper elem
ID to addendbinary-u.122/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-ubatch60.1 ns59.9 ns .. 60.3 nsper elem
ID to addendbinary-u.122/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-ubatch97.8 ns97.5 ns .. 98.1 nsper elem
ID to addendbinary-u.122/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-ubatch50.3 ns50.2 ns .. 50.4 nsper elem
ID to addendbinary-u.122/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-ubatch63.9 ns63.7 ns .. 64.1 nsper elem
ID to addendbinary-u.122/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-ubatch100 ns100.0 ns .. 101 nsper elem
ID to addendbinary-u.122/proj=none,h2c=ti,mode=batch,n=1024gf2_122-ubatch123 ns123 ns .. 123 nsper elem
ID to addendbinary-w.122/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_122-wbatch49.4 ns49.2 ns .. 49.5 nsper elem
ID to addendbinary-w.122/proj=fp127,h2c=ti,mode=batch,n=1024gf2_122-wbatch63.1 ns63.0 ns .. 63.3 nsper elem
ID to addendbinary-w.122/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_122-wbatch55.7 ns55.5 ns .. 55.8 nsper elem
ID to addendbinary-w.122/proj=fp130,h2c=ti,mode=batch,n=1024gf2_122-wbatch90.8 ns90.6 ns .. 90.9 nsper elem
ID to addendbinary-w.122/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_122-wbatch46.6 ns46.5 ns .. 46.8 nsper elem
ID to addendbinary-w.122/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_122-wbatch58.5 ns58.3 ns .. 58.7 nsper elem
ID to addendbinary-w.122/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_122-wbatch95.3 ns95.1 ns .. 95.5 nsper elem
ID to addendbinary-w.122/proj=none,h2c=ti,mode=batch,n=1024gf2_122-wbatch116 ns116 ns .. 117 nsper elem
ID to addendbinary.127/proj=fp127,h2c=pornin,mode=batch,n=1024gf2_127batch54.6 ns54.5 ns .. 54.7 nsper elem
ID to addendbinary.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127batch64.8 ns64.6 ns .. 64.9 nsper elem
ID to addendbinary.127/proj=fp130,h2c=pornin,mode=batch,n=1024gf2_127batch60.7 ns60.6 ns .. 60.8 nsper elem
ID to addendbinary.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127batch92.5 ns92.3 ns .. 92.8 nsper elem
ID to addendbinary.127/proj=gf2_127,h2c=pornin,mode=batch,n=1024gf2_127batch51.6 ns51.6 ns .. 51.7 nsper elem
ID to addendbinary.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127batch60.9 ns60.8 ns .. 61.1 nsper elem
ID to addendbinary.127/proj=none,h2c=pornin,mode=batch,n=1024gf2_127batch101 ns101 ns .. 101 nsper elem
ID to addendbinary.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127batch118 ns118 ns .. 118 nsper elem
ID to addendbinary-lambda.127/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch46.6 ns46.6 ns .. 46.7 nsper elem
ID to addendbinary-lambda.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch67.2 ns66.9 ns .. 67.7 nsper elem
ID to addendbinary-lambda.127/proj=fp127,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch59.0 ns58.9 ns .. 59.1 nsper elem
ID to addendbinary-lambda.127/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch53.5 ns53.3 ns .. 53.6 nsper elem
ID to addendbinary-lambda.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch96.9 ns96.7 ns .. 97.1 nsper elem
ID to addendbinary-lambda.127/proj=fp130,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch88.3 ns88.1 ns .. 88.4 nsper elem
ID to addendbinary-lambda.127/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch43.9 ns43.8 ns .. 43.9 nsper elem
ID to addendbinary-lambda.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch63.2 ns63.0 ns .. 63.3 nsper elem
ID to addendbinary-lambda.127/proj=gf2_127,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch55.2 ns55.0 ns .. 55.3 nsper elem
ID to addendbinary-lambda.127/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_127-lambdabatch93.0 ns92.8 ns .. 93.3 nsper elem
ID to addendbinary-lambda.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127-lambdabatch120 ns119 ns .. 120 nsper elem
ID to addendbinary-lambda.127/proj=none,h2c=ti-addend,mode=batch,n=1024gf2_127-lambdabatch111 ns111 ns .. 112 nsper elem
ID to addendbinary-u.127/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch52.5 ns52.4 ns .. 52.7 nsper elem
ID to addendbinary-u.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127-ubatch63.9 ns63.7 ns .. 64.1 nsper elem
ID to addendbinary-u.127/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch58.3 ns58.1 ns .. 58.5 nsper elem
ID to addendbinary-u.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127-ubatch91.1 ns90.8 ns .. 91.5 nsper elem
ID to addendbinary-u.127/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch49.2 ns49.1 ns .. 49.3 nsper elem
ID to addendbinary-u.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127-ubatch59.0 ns58.9 ns .. 59.2 nsper elem
ID to addendbinary-u.127/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_127-ubatch98.7 ns98.4 ns .. 99.1 nsper elem
ID to addendbinary-u.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127-ubatch120 ns119 ns .. 120 nsper elem
ID to addendbinary-w.127/proj=fp127,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch49.5 ns49.4 ns .. 49.6 nsper elem
ID to addendbinary-w.127/proj=fp127,h2c=ti,mode=batch,n=1024gf2_127-wbatch60.6 ns60.4 ns .. 60.9 nsper elem
ID to addendbinary-w.127/proj=fp130,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch53.4 ns53.3 ns .. 53.6 nsper elem
ID to addendbinary-w.127/proj=fp130,h2c=ti,mode=batch,n=1024gf2_127-wbatch84.9 ns84.7 ns .. 85.2 nsper elem
ID to addendbinary-w.127/proj=gf2_127,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch45.8 ns45.7 ns .. 45.9 nsper elem
ID to addendbinary-w.127/proj=gf2_127,h2c=ti,mode=batch,n=1024gf2_127-wbatch55.7 ns55.5 ns .. 55.8 nsper elem
ID to addendbinary-w.127/proj=none,h2c=pornin-addend,mode=batch,n=1024gf2_127-wbatch93.0 ns92.8 ns .. 93.2 nsper elem
ID to addendbinary-w.127/proj=none,h2c=ti,mode=batch,n=1024gf2_127-wbatch112 ns112 ns .. 113 nsper elem
ID to addendtwisted.61x2/proj=fp127,h2c=elligator2,mode=batch,n=1024twisted61x2batch947 ns942 ns .. 953 nsper elem
ID to addendtwisted.61x2/proj=fp127,h2c=ti,mode=batch,n=1024twisted61x2batch662 ns661 ns .. 663 nsper elem
ID to addendtwisted.61x2/proj=fp130,h2c=elligator2,mode=batch,n=1024twisted61x2batch942 ns941 ns .. 943 nsper elem
ID to addendtwisted.61x2/proj=fp130,h2c=ti,mode=batch,n=1024twisted61x2batch677 ns676 ns .. 678 nsper elem
ID to addendtwisted.61x2/proj=gf2_127,h2c=elligator2,mode=batch,n=1024twisted61x2batch936 ns934 ns .. 937 nsper elem
ID to addendtwisted.61x2/proj=gf2_127,h2c=ti,mode=batch,n=1024twisted61x2batch658 ns657 ns .. 659 nsper elem
ID to addendtwisted.61x2/proj=none,h2c=elligator2,mode=batch,n=1024twisted61x2batch996 ns994 ns .. 998 nsper elem
ID to addendtwisted.61x2/proj=none,h2c=ti,mode=batch,n=1024twisted61x2batch696 ns695 ns .. 697 nsper elem
hash to addendgf2_109-lambda/try-and-increment to (x, λ)gf2_109-lambdaper-element1.17 µs1.16 µs .. 1.17 µsper elem
hash to addendgf2_109-lambda/try-and-increment to (x, λ), batchedgf2_109-lambdabatch131 ns130 ns .. 132 nsper elem
hash to addendgf2_122-gls-lambda/try-and-increment to (x, λ)gf2_122-gls-lambdaper-element679 ns678 ns .. 681 nsper elem
hash to addendgf2_122-gls-lambda/try-and-increment to (x, λ), batchedgf2_122-gls-lambdabatch121 ns120 ns .. 122 nsper elem
hash to addendgf2_122-lambda/try-and-increment to (x, λ)gf2_122-lambdaper-element672 ns669 ns .. 674 nsper elem
hash to addendgf2_122-lambda/try-and-increment to (x, λ), batchedgf2_122-lambdabatch119 ns118 ns .. 120 nsper elem
hash to addendgf2_127-lambda/try-and-increment to (x, λ)gf2_127-lambdaper-element369 ns368 ns .. 371 nsper elem
hash to addendgf2_127-lambda/try-and-increment to (x, λ), batchedgf2_127-lambdabatch111 ns111 ns .. 112 nsper elem
steps: digestdigest/sha512 (ristretto input)ristretto255per-element175 ns175 ns .. 176 nsper elem
steps: ristretto255ristretto255/from_uniform_bytes (2 maps + add)ristretto255per-element5.83 µs5.82 µs .. 5.85 µsper elem
x on curveristretto255/decompress (valid, inv sqrt)ristretto255per-element2.93 µs2.92 µs .. 2.94 µsper elem
x on curvesecp256k1/x: parse compressed (sqrt)secp256k1per-element3.10 µs3.09 µs .. 3.11 µsper 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.

43 benchmarks
operationbenchmarkfamilymodetime95% CIunit
one map to addendgf2_109-lambda/pornin map x1 to (x, λ)gf2_109-lambdaper-element655 ns653 ns .. 657 nsper elem
one map to addendgf2_109-lambda/pornin map x1 to (x, λ), batchedgf2_109-lambdabatch105 ns104 ns .. 105 nsper elem
one map to addendgf2_109-u/pornin map x1 to (u, v)gf2_109-uper-element657 ns656 ns .. 659 nsper elem
one map to addendgf2_109-u/pornin map x1 to (u, v), batchedgf2_109-ubatch110 ns109 ns .. 110 nsper elem
one map to addendgf2_109-w/pornin map x1 to (x, λ)gf2_109-wper-element652 ns650 ns .. 653 nsper elem
one map to addendgf2_109-w/pornin map x1 to (x, λ), batchedgf2_109-wbatch104 ns104 ns .. 104 nsper elem
one map to addendgf2_122-gls-lambda/pornin map x1 to (x, λ)gf2_122-gls-lambdaper-element385 ns384 ns .. 386 nsper elem
one map to addendgf2_122-gls-lambda/pornin map x1 to (x, λ), batchedgf2_122-gls-lambdabatch95.0 ns94.7 ns .. 95.4 nsper elem
one map to addendgf2_122-gls-u/pornin map x1 to (u, v)gf2_122-gls-uper-element390 ns389 ns .. 390 nsper elem
one map to addendgf2_122-gls-u/pornin map x1 to (u, v), batchedgf2_122-gls-ubatch97.6 ns97.4 ns .. 97.8 nsper elem
one map to addendgf2_122-gls-w/pornin map x1 to (x, λ)gf2_122-gls-wper-element385 ns384 ns .. 386 nsper elem
one map to addendgf2_122-gls-w/pornin map x1 to (x, λ), batchedgf2_122-gls-wbatch94.6 ns94.4 ns .. 94.9 nsper elem
one map to addendgf2_122-lambda/pornin map x1 to (x, λ)gf2_122-lambdaper-element381 ns380 ns .. 382 nsper elem
one map to addendgf2_122-lambda/pornin map x1 to (x, λ), batchedgf2_122-lambdabatch95.0 ns94.7 ns .. 95.2 nsper elem
one map to addendgf2_122-u/pornin map x1 to (u, v)gf2_122-uper-element391 ns390 ns .. 392 nsper elem
one map to addendgf2_122-u/pornin map x1 to (u, v), batchedgf2_122-ubatch99.3 ns99.0 ns .. 99.5 nsper elem
one map to addendgf2_122-w/pornin map x1 to (x, λ)gf2_122-wper-element381 ns380 ns .. 382 nsper elem
one map to addendgf2_122-w/pornin map x1 to (x, λ), batchedgf2_122-wbatch95.2 ns95.0 ns .. 95.5 nsper elem
one map to addendgf2_127-lambda/pornin map x1 to (x, λ)gf2_127-lambdaper-element245 ns244 ns .. 246 nsper elem
one map to addendgf2_127-lambda/pornin map x1 to (x, λ), batchedgf2_127-lambdabatch92.7 ns92.4 ns .. 93.0 nsper elem
one map to addendgf2_127-u/pornin map x1 to (u, v)gf2_127-uper-element249 ns248 ns .. 250 nsper elem
one map to addendgf2_127-u/pornin map x1 to (u, v), batchedgf2_127-ubatch98.0 ns97.4 ns .. 98.6 nsper elem
one map to addendgf2_127-w/pornin map x1 to (x, λ)gf2_127-wper-element244 ns243 ns .. 245 nsper elem
one map to addendgf2_127-w/pornin map x1 to (x, λ), batchedgf2_127-wbatch92.8 ns92.4 ns .. 93.2 nsper elem
two maps summedgf2_127/pornin map x2gf2_127per-element452 ns451 ns .. 453 nsper elem
one mapgf2_109/pornin map x1gf2_109per-element675 ns673 ns .. 677 nsper elem
one mapgf2_109/pornin map x1, batchedgf2_109batch114 ns113 ns .. 114 nsper elem
one mapgf2_122/pornin map x1gf2_122per-element392 ns391 ns .. 393 nsper elem
one mapgf2_122/pornin map x1, batchedgf2_122batch103 ns102 ns .. 103 nsper elem
one mapgf2_122-gls/pornin map x1gf2_122-glsper-element394 ns393 ns .. 395 nsper elem
one mapgf2_122-gls/pornin map x1, batchedgf2_122-glsbatch101 ns101 ns .. 102 nsper elem
one mapgf2_127/pornin map x1gf2_127per-element256 ns254 ns .. 258 nsper elem
one mapgf2_127/pornin map x1, batchedgf2_127batch103 ns102 ns .. 103 nsper elem
one mapedwards107/elligator2 x1edwards107per-element1.28 µs1.27 µs .. 1.29 µsper elem
one mapedwards127/elligator2 x1edwards127per-element1.51 µs1.50 µs .. 1.51 µsper elem
one mapedwards61x2/elligator2 x1edwards61x2per-element792 ns790 ns .. 794 nsper elem
one maptwisted-goldilocks2/elligator2 x1twisted-goldilocks2per-element2.75 µs2.75 µs .. 2.76 µsper elem
one maptwisted128/elligator2 x1twisted128per-element3.32 µs3.32 µs .. 3.33 µsper elem
one maptwisted61x2/elligator2 x1twisted61x2per-element981 ns979 ns .. 984 nsper elem
one maptwisted64x2/elligator2 x1twisted64x2per-element1.38 µs1.38 µs .. 1.38 µsper elem
one mapweier107/sswu x1weier107per-element1.26 µs1.26 µs .. 1.26 µsper elem
one mapweier127/sswu x1weier127per-element1.29 µs1.29 µs .. 1.29 µsper elem
one mapweier61x2/sswu x1weier61x2per-element812 ns809 ns .. 816 nsper 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.

620 benchmarks
operationbenchmarkfamilymodetime95% CIunit
encode (hash + cells)xor-sha256.64/m=12150,n=3500xorper-element255 ns254 ns .. 256 nsper elem
encode (hash + cells)xor-sha256.64/m=1350,n=3500xorper-element218 ns218 ns .. 218 nsper elem
encode (hash + cells)xor-sha256.64/m=150,n=3500xorper-element188 ns188 ns .. 188 nsper elem
encode (hash + cells)xor-sha256.64/m=20,n=3500xorper-element161 ns161 ns .. 162 nsper elem
encode (hash + cells)xor-sha256.64/m=5,n=3500xorper-element144 ns143 ns .. 144 nsper elem
encode (hash + cells)xor-siphash.64/m=12150,n=3500xor-siphashper-element219 ns219 ns .. 219 nsper elem
encode (hash + cells)xor-siphash.64/m=12150,n=3500,map=mcg64xor-siphashper-element218 ns217 ns .. 218 nsper elem
encode (hash + cells)xor-siphash.64/m=1350,n=3500xor-siphashper-element183 ns183 ns .. 183 nsper elem
encode (hash + cells)xor-siphash.64/m=1350,n=3500,map=mcg64xor-siphashper-element182 ns182 ns .. 182 nsper elem
encode (hash + cells)xor-siphash.64/m=150,n=3500xor-siphashper-element152 ns152 ns .. 153 nsper elem
encode (hash + cells)xor-siphash.64/m=150,n=3500,map=mcg64xor-siphashper-element151 ns151 ns .. 151 nsper elem
encode (hash + cells)xor-siphash.64/m=20,n=3500xor-siphashper-element124 ns124 ns .. 125 nsper elem
encode (hash + cells)xor-siphash.64/m=20,n=3500,map=mcg64xor-siphashper-element123 ns123 ns .. 123 nsper elem
encode (hash + cells)xor-siphash.64/m=5,n=3500xor-siphashper-element107 ns107 ns .. 108 nsper elem
encode (hash + cells)xor-siphash.64/m=5,n=3500,map=mcg64xor-siphashper-element105 ns104 ns .. 106 nsper elem
encode (hash + cells)binary.109/m=12150,n=3500,h2c=porningf2_109per-element643 ns642 ns .. 644 nsper elem
encode (hash + cells)binary.109/m=12150,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109per-element553 ns552 ns .. 554 nsper elem
encode (hash + cells)binary.109/m=1350,n=3500,h2c=porningf2_109per-element513 ns512 ns .. 514 nsper elem
encode (hash + cells)binary.109/m=1350,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109per-element418 ns418 ns .. 419 nsper elem
encode (hash + cells)binary.109/m=5,n=3500,h2c=porningf2_109per-element266 ns264 ns .. 267 nsper elem
encode (hash + cells)binary.109/m=5,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109per-element170 ns170 ns .. 171 nsper elem
encode (hash + cells)binary-lambda.109/m=12150,n=3500,h2c=pornin-addendgf2_109-lambdaper-element597 ns596 ns .. 598 nsper elem
encode (hash + cells)binary-lambda.109/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdaper-element500 ns497 ns .. 503 nsper elem
encode (hash + cells)binary-lambda.109/m=1350,n=3500,h2c=pornin-addendgf2_109-lambdaper-element488 ns487 ns .. 489 nsper elem
encode (hash + cells)binary-lambda.109/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdaper-element395 ns394 ns .. 395 nsper elem
encode (hash + cells)binary-lambda.109/m=5,n=3500,h2c=pornin-addendgf2_109-lambdaper-element247 ns246 ns .. 247 nsper elem
encode (hash + cells)binary-lambda.109/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdaper-element151 ns151 ns .. 151 nsper elem
encode (hash + cells)binary-u.109/m=12150,n=3500,h2c=pornin-addendgf2_109-uper-element531 ns531 ns .. 532 nsper elem
encode (hash + cells)binary-u.109/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-uper-element437 ns436 ns .. 438 nsper elem
encode (hash + cells)binary-u.109/m=1350,n=3500,h2c=pornin-addendgf2_109-uper-element422 ns422 ns .. 423 nsper elem
encode (hash + cells)binary-u.109/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-uper-element331 ns330 ns .. 331 nsper elem
encode (hash + cells)binary-u.109/m=150,n=3500,h2c=pornin-addendgf2_109-uper-element344 ns344 ns .. 345 nsper elem
encode (hash + cells)binary-u.109/m=20,n=3500,h2c=pornin-addendgf2_109-uper-element278 ns278 ns .. 279 nsper elem
encode (hash + cells)binary-u.109/m=5,n=3500,h2c=pornin-addendgf2_109-uper-element240 ns239 ns .. 240 nsper elem
encode (hash + cells)binary-u.109/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-uper-element148 ns147 ns .. 148 nsper elem
encode (hash + cells)binary-w.109/m=12150,n=3500,h2c=pornin-addendgf2_109-wper-element596 ns596 ns .. 597 nsper elem
encode (hash + cells)binary-w.109/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wper-element500 ns500 ns .. 501 nsper elem
encode (hash + cells)binary-w.109/m=1350,n=3500,h2c=pornin-addendgf2_109-wper-element490 ns489 ns .. 491 nsper elem
encode (hash + cells)binary-w.109/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wper-element397 ns396 ns .. 397 nsper elem
encode (hash + cells)binary-w.109/m=5,n=3500,h2c=pornin-addendgf2_109-wper-element249 ns249 ns .. 249 nsper elem
encode (hash + cells)binary-w.109/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wper-element154 ns154 ns .. 154 nsper elem
encode (hash + cells)binary.122/m=12150,n=3500,h2c=porningf2_122per-element673 ns671 ns .. 674 nsper elem
encode (hash + cells)binary.122/m=12150,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122per-element552 ns550 ns .. 553 nsper elem
encode (hash + cells)binary.122/m=1350,n=3500,h2c=porningf2_122per-element537 ns536 ns .. 538 nsper elem
encode (hash + cells)binary.122/m=1350,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122per-element435 ns435 ns .. 436 nsper elem
encode (hash + cells)binary.122/m=5,n=3500,h2c=porningf2_122per-element271 ns270 ns .. 272 nsper elem
encode (hash + cells)binary.122/m=5,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122per-element173 ns173 ns .. 173 nsper elem
encode (hash + cells)binary.122-gls/m=12150,n=3500,h2c=porningf2_122-glsper-element635 ns634 ns .. 636 nsper elem
encode (hash + cells)binary.122-gls/m=12150,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122-glsper-element534 ns533 ns .. 535 nsper elem
encode (hash + cells)binary.122-gls/m=1350,n=3500,h2c=porningf2_122-glsper-element509 ns508 ns .. 510 nsper elem
encode (hash + cells)binary.122-gls/m=1350,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122-glsper-element408 ns407 ns .. 409 nsper elem
encode (hash + cells)binary.122-gls/m=5,n=3500,h2c=porningf2_122-glsper-element259 ns257 ns .. 260 nsper elem
encode (hash + cells)binary.122-gls/m=5,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122-glsper-element162 ns162 ns .. 163 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=12150,n=3500,h2c=pornin-addendgf2_122-gls-lambdaper-element608 ns607 ns .. 610 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdaper-element502 ns501 ns .. 503 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=1350,n=3500,h2c=pornin-addendgf2_122-gls-lambdaper-element501 ns500 ns .. 502 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdaper-element400 ns399 ns .. 401 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=5,n=3500,h2c=pornin-addendgf2_122-gls-lambdaper-element250 ns249 ns .. 250 nsper elem
encode (hash + cells)binary-lambda.122-gls/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdaper-element154 ns154 ns .. 155 nsper elem
encode (hash + cells)binary-u.122-gls/m=12150,n=3500,h2c=pornin-addendgf2_122-gls-uper-element544 ns542 ns .. 547 nsper elem
encode (hash + cells)binary-u.122-gls/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-uper-element442 ns440 ns .. 444 nsper elem
encode (hash + cells)binary-u.122-gls/m=1350,n=3500,h2c=pornin-addendgf2_122-gls-uper-element432 ns431 ns .. 433 nsper elem
encode (hash + cells)binary-u.122-gls/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-uper-element333 ns332 ns .. 334 nsper elem
encode (hash + cells)binary-u.122-gls/m=150,n=3500,h2c=pornin-addendgf2_122-gls-uper-element349 ns348 ns .. 350 nsper elem
encode (hash + cells)binary-u.122-gls/m=20,n=3500,h2c=pornin-addendgf2_122-gls-uper-element280 ns280 ns .. 280 nsper elem
encode (hash + cells)binary-u.122-gls/m=5,n=3500,h2c=pornin-addendgf2_122-gls-uper-element238 ns238 ns .. 239 nsper elem
encode (hash + cells)binary-u.122-gls/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-uper-element140 ns140 ns .. 141 nsper elem
encode (hash + cells)binary-w.122-gls/m=12150,n=3500,h2c=pornin-addendgf2_122-gls-wper-element606 ns605 ns .. 606 nsper elem
encode (hash + cells)binary-w.122-gls/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wper-element510 ns508 ns .. 513 nsper elem
encode (hash + cells)binary-w.122-gls/m=1350,n=3500,h2c=pornin-addendgf2_122-gls-wper-element498 ns498 ns .. 499 nsper elem
encode (hash + cells)binary-w.122-gls/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wper-element402 ns401 ns .. 403 nsper elem
encode (hash + cells)binary-w.122-gls/m=5,n=3500,h2c=pornin-addendgf2_122-gls-wper-element250 ns250 ns .. 251 nsper elem
encode (hash + cells)binary-w.122-gls/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wper-element155 ns155 ns .. 155 nsper elem
encode (hash + cells)binary-lambda.122/m=12150,n=3500,h2c=pornin-addendgf2_122-lambdaper-element613 ns612 ns .. 615 nsper elem
encode (hash + cells)binary-lambda.122/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdaper-element506 ns506 ns .. 507 nsper elem
encode (hash + cells)binary-lambda.122/m=1350,n=3500,h2c=pornin-addendgf2_122-lambdaper-element505 ns503 ns .. 507 nsper elem
encode (hash + cells)binary-lambda.122/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdaper-element403 ns402 ns .. 403 nsper elem
encode (hash + cells)binary-lambda.122/m=5,n=3500,h2c=pornin-addendgf2_122-lambdaper-element250 ns250 ns .. 251 nsper elem
encode (hash + cells)binary-lambda.122/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdaper-element155 ns155 ns .. 156 nsper elem
encode (hash + cells)binary-u.122/m=12150,n=3500,h2c=pornin-addendgf2_122-uper-element543 ns542 ns .. 544 nsper elem
encode (hash + cells)binary-u.122/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-uper-element440 ns439 ns .. 441 nsper elem
encode (hash + cells)binary-u.122/m=1350,n=3500,h2c=pornin-addendgf2_122-uper-element436 ns435 ns .. 437 nsper elem
encode (hash + cells)binary-u.122/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-uper-element332 ns331 ns .. 333 nsper elem
encode (hash + cells)binary-u.122/m=150,n=3500,h2c=pornin-addendgf2_122-uper-element354 ns353 ns .. 355 nsper elem
encode (hash + cells)binary-u.122/m=20,n=3500,h2c=pornin-addendgf2_122-uper-element282 ns282 ns .. 283 nsper elem
encode (hash + cells)binary-u.122/m=5,n=3500,h2c=pornin-addendgf2_122-uper-element239 ns238 ns .. 239 nsper elem
encode (hash + cells)binary-u.122/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-uper-element144 ns143 ns .. 144 nsper elem
encode (hash + cells)binary-w.122/m=12150,n=3500,h2c=pornin-addendgf2_122-wper-element616 ns615 ns .. 617 nsper elem
encode (hash + cells)binary-w.122/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wper-element516 ns513 ns .. 518 nsper elem
encode (hash + cells)binary-w.122/m=1350,n=3500,h2c=pornin-addendgf2_122-wper-element504 ns503 ns .. 505 nsper elem
encode (hash + cells)binary-w.122/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wper-element409 ns407 ns .. 410 nsper elem
encode (hash + cells)binary-w.122/m=5,n=3500,h2c=pornin-addendgf2_122-wper-element249 ns249 ns .. 250 nsper elem
encode (hash + cells)binary-w.122/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wper-element157 ns156 ns .. 158 nsper elem
encode (hash + cells)binary.127/m=12150,n=3500,h2c=porningf2_127per-element630 ns629 ns .. 631 nsper elem
encode (hash + cells)binary.127/m=12150,n=3500,h2c=pornin,map=mcg64gf2_127per-element635 ns634 ns .. 637 nsper elem
encode (hash + cells)binary.127/m=12150,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127per-element541 ns541 ns .. 542 nsper elem
encode (hash + cells)binary.127/m=1350,n=3500,h2c=porningf2_127per-element503 ns502 ns .. 505 nsper elem
encode (hash + cells)binary.127/m=1350,n=3500,h2c=pornin,map=mcg64gf2_127per-element502 ns502 ns .. 503 nsper elem
encode (hash + cells)binary.127/m=1350,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127per-element412 ns411 ns .. 413 nsper elem
encode (hash + cells)binary.127/m=150,n=3500,h2c=pornin,map=mcg64gf2_127per-element394 ns393 ns .. 394 nsper elem
encode (hash + cells)binary.127/m=20,n=3500,h2c=pornin,map=mcg64gf2_127per-element302 ns302 ns .. 303 nsper elem
encode (hash + cells)binary.127/m=5,n=3500,h2c=porningf2_127per-element248 ns248 ns .. 248 nsper elem
encode (hash + cells)binary.127/m=5,n=3500,h2c=pornin,map=mcg64gf2_127per-element244 ns244 ns .. 245 nsper elem
encode (hash + cells)binary.127/m=5,n=3500,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127per-element154 ns154 ns .. 154 nsper elem
encode (hash + cells)binary-lambda.127/m=12150,n=3500,h2c=pornin-addendgf2_127-lambdaper-element583 ns582 ns .. 584 nsper elem
encode (hash + cells)binary-lambda.127/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdaper-element484 ns484 ns .. 485 nsper elem
encode (hash + cells)binary-lambda.127/m=1350,n=3500,h2c=pornin-addendgf2_127-lambdaper-element474 ns473 ns .. 475 nsper elem
encode (hash + cells)binary-lambda.127/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdaper-element379 ns379 ns .. 380 nsper elem
encode (hash + cells)binary-lambda.127/m=150,n=3500,h2c=pornin-addendgf2_127-lambdaper-element376 ns375 ns .. 377 nsper elem
encode (hash + cells)binary-lambda.127/m=20,n=3500,h2c=pornin-addendgf2_127-lambdaper-element291 ns289 ns .. 294 nsper elem
encode (hash + cells)binary-lambda.127/m=5,n=3500,h2c=pornin-addendgf2_127-lambdaper-element234 ns233 ns .. 234 nsper elem
encode (hash + cells)binary-lambda.127/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdaper-element139 ns139 ns .. 139 nsper elem
encode (hash + cells)binary-u.127/m=12150,n=3500,h2c=pornin-addendgf2_127-uper-element520 ns520 ns .. 521 nsper elem
encode (hash + cells)binary-u.127/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-uper-element427 ns426 ns .. 429 nsper elem
encode (hash + cells)binary-u.127/m=1350,n=3500,h2c=pornin-addendgf2_127-uper-element414 ns414 ns .. 415 nsper elem
encode (hash + cells)binary-u.127/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-uper-element320 ns319 ns .. 321 nsper elem
encode (hash + cells)binary-u.127/m=150,n=3500,h2c=pornin-addendgf2_127-uper-element335 ns334 ns .. 336 nsper elem
encode (hash + cells)binary-u.127/m=20,n=3500,h2c=pornin-addendgf2_127-uper-element266 ns266 ns .. 267 nsper elem
encode (hash + cells)binary-u.127/m=5,n=3500,h2c=pornin-addendgf2_127-uper-element225 ns224 ns .. 225 nsper elem
encode (hash + cells)binary-u.127/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-uper-element132 ns132 ns .. 132 nsper elem
encode (hash + cells)binary-w.127/m=12150,n=3500,h2c=pornin-addendgf2_127-wper-element586 ns584 ns .. 587 nsper elem
encode (hash + cells)binary-w.127/m=12150,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wper-element485 ns484 ns .. 486 nsper elem
encode (hash + cells)binary-w.127/m=1350,n=3500,h2c=pornin-addendgf2_127-wper-element476 ns475 ns .. 477 nsper elem
encode (hash + cells)binary-w.127/m=1350,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wper-element380 ns379 ns .. 381 nsper elem
encode (hash + cells)binary-w.127/m=150,n=3500,h2c=pornin-addendgf2_127-wper-element376 ns375 ns .. 376 nsper elem
encode (hash + cells)binary-w.127/m=20,n=3500,h2c=pornin-addendgf2_127-wper-element288 ns288 ns .. 288 nsper elem
encode (hash + cells)binary-w.127/m=5,n=3500,h2c=pornin-addendgf2_127-wper-element233 ns233 ns .. 234 nsper elem
encode (hash + cells)binary-w.127/m=5,n=3500,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wper-element139 ns139 ns .. 140 nsper elem
encode (hash + cells)edwards.107/m=1350,n=3500,h2c=tiedwards107per-element1.47 µs1.47 µs .. 1.47 µsper elem
encode (hash + cells)edwards.127/m=1350,n=3500,h2c=tiedwards127per-element1.73 µs1.73 µs .. 1.73 µsper elem
encode (hash + cells)edwards.61x2/m=1350,n=3500,h2c=tiedwards61x2per-element1.22 µs1.22 µs .. 1.22 µsper elem
encode (hash + cells)twisted.goldilocks2/m=1350,n=3500,h2c=titwisted-goldilocks2per-element2.86 µs2.85 µs .. 2.87 µsper elem
encode (hash + cells)twisted.128/m=1350,n=3500,h2c=titwisted128per-element2.61 µs2.60 µs .. 2.61 µsper elem
encode (hash + cells)twisted.61x2/m=1350,n=3500,h2c=titwisted61x2per-element1.18 µs1.18 µs .. 1.18 µsper elem
encode (hash + cells)twisted.64x2/m=1350,n=3500,h2c=titwisted64x2per-element1.58 µs1.58 µs .. 1.59 µsper elem
encode (hash + cells)weier.107/m=1350,n=3500,h2c=tiweier107per-element1.74 µs1.74 µs .. 1.74 µsper elem
encode (hash + cells)weier-jacobian.107/m=1350,n=3500,h2c=tiweier107-jacobianper-element1.64 µs1.64 µs .. 1.65 µsper elem
encode (hash + cells)weier.127/m=1350,n=3500,h2c=tiweier127per-element2.07 µs2.07 µs .. 2.07 µsper elem
encode (hash + cells)weier-jacobian.127/m=1350,n=3500,h2c=tiweier127-jacobianper-element1.91 µs1.91 µs .. 1.91 µsper elem
encode (hash + cells)weier.61x2/m=1350,n=3500,h2c=tiweier61x2per-element1.54 µs1.53 µs .. 1.54 µsper elem
encode (hash + cells)weier-jacobian.61x2/m=1350,n=3500,h2c=tiweier61x2-jacobianper-element1.48 µs1.48 µs .. 1.48 µsper elem
encode (hash + cells)ristretto255/m=12150,n=3500ristretto255per-element8.25 µs8.23 µs .. 8.27 µsper elem
encode (hash + cells)ristretto255/m=12150,n=3500,map=mcg64ristretto255per-element8.23 µs8.22 µs .. 8.25 µsper elem
encode (hash + cells)ristretto255/m=1350,n=3500ristretto255per-element7.69 µs7.67 µs .. 7.70 µsper elem
encode (hash + cells)ristretto255/m=1350,n=3500,map=mcg64ristretto255per-element7.66 µs7.65 µs .. 7.67 µsper elem
encode (hash + cells)ristretto255/m=150,n=3500ristretto255per-element7.14 µs7.13 µs .. 7.15 µsper elem
encode (hash + cells)ristretto255/m=150,n=3500,map=mcg64ristretto255per-element7.12 µs7.11 µs .. 7.13 µsper elem
encode (hash + cells)ristretto255/m=20,n=3500ristretto255per-element6.67 µs6.67 µs .. 6.68 µsper elem
encode (hash + cells)ristretto255/m=20,n=3500,map=mcg64ristretto255per-element6.65 µs6.64 µs .. 6.66 µsper elem
encode (hash + cells)ristretto255/m=5,n=3500ristretto255per-element6.39 µs6.37 µs .. 6.41 µsper elem
encode (hash + cells)ristretto255/m=5,n=3500,map=mcg64ristretto255per-element6.35 µs6.34 µs .. 6.36 µsper elem
cell updatesxor-sha256.64/m=1350,n=3500xorper-element168 ns167 ns .. 168 nsper elem
cell updatesxor-siphash.64/m=1350,n=3500xor-siphashper-element166 ns166 ns .. 167 nsper elem
cell updatesbinary.109/m=12150,n=3500gf2_109per-element516 ns515 ns .. 517 nsper elem
cell updatesbinary.109/m=1350,n=3500gf2_109per-element384 ns384 ns .. 385 nsper elem
cell updatesbinary.109/m=5,n=3500gf2_109per-element134 ns134 ns .. 134 nsper elem
cell updatesbinary-lambda.109/m=12150,n=3500gf2_109-lambdaper-element471 ns470 ns .. 472 nsper elem
cell updatesbinary-lambda.109/m=1350,n=3500gf2_109-lambdaper-element368 ns367 ns .. 369 nsper elem
cell updatesbinary-lambda.109/m=5,n=3500gf2_109-lambdaper-element129 ns129 ns .. 129 nsper elem
cell updatesbinary-u.109/m=12150,n=3500gf2_109-uper-element407 ns406 ns .. 408 nsper elem
cell updatesbinary-u.109/m=1350,n=3500gf2_109-uper-element299 ns299 ns .. 300 nsper elem
cell updatesbinary-u.109/m=150,n=3500gf2_109-uper-element221 ns220 ns .. 221 nsper elem
cell updatesbinary-u.109/m=20,n=3500gf2_109-uper-element154 ns154 ns .. 155 nsper elem
cell updatesbinary-u.109/m=5,n=3500gf2_109-uper-element116 ns115 ns .. 116 nsper elem
cell updatesbinary-w.109/m=12150,n=3500gf2_109-wper-element471 ns470 ns .. 472 nsper elem
cell updatesbinary-w.109/m=1350,n=3500gf2_109-wper-element369 ns368 ns .. 370 nsper elem
cell updatesbinary-w.109/m=5,n=3500gf2_109-wper-element129 ns129 ns .. 129 nsper elem
cell updatesbinary.122/m=12150,n=3500gf2_122per-element527 ns526 ns .. 528 nsper elem
cell updatesbinary.122/m=1350,n=3500gf2_122per-element397 ns396 ns .. 398 nsper elem
cell updatesbinary.122/m=5,n=3500gf2_122per-element138 ns137 ns .. 138 nsper elem
cell updatesbinary.122-gls/m=12150,n=3500gf2_122-glsper-element512 ns512 ns .. 513 nsper elem
cell updatesbinary.122-gls/m=1350,n=3500gf2_122-glsper-element383 ns382 ns .. 384 nsper elem
cell updatesbinary.122-gls/m=5,n=3500gf2_122-glsper-element134 ns134 ns .. 134 nsper elem
cell updatesbinary-lambda.122-gls/m=12150,n=3500gf2_122-gls-lambdaper-element491 ns490 ns .. 492 nsper elem
cell updatesbinary-lambda.122-gls/m=1350,n=3500gf2_122-gls-lambdaper-element384 ns384 ns .. 385 nsper elem
cell updatesbinary-lambda.122-gls/m=5,n=3500gf2_122-gls-lambdaper-element134 ns134 ns .. 134 nsper elem
cell updatesbinary-u.122-gls/m=12150,n=3500gf2_122-gls-uper-element422 ns421 ns .. 423 nsper elem
cell updatesbinary-u.122-gls/m=1350,n=3500gf2_122-gls-uper-element312 ns312 ns .. 313 nsper elem
cell updatesbinary-u.122-gls/m=150,n=3500gf2_122-gls-uper-element229 ns229 ns .. 230 nsper elem
cell updatesbinary-u.122-gls/m=20,n=3500gf2_122-gls-uper-element160 ns160 ns .. 161 nsper elem
cell updatesbinary-u.122-gls/m=5,n=3500gf2_122-gls-uper-element118 ns118 ns .. 119 nsper elem
cell updatesbinary-w.122-gls/m=12150,n=3500gf2_122-gls-wper-element489 ns489 ns .. 490 nsper elem
cell updatesbinary-w.122-gls/m=1350,n=3500gf2_122-gls-wper-element383 ns382 ns .. 384 nsper elem
cell updatesbinary-w.122-gls/m=5,n=3500gf2_122-gls-wper-element133 ns133 ns .. 133 nsper elem
cell updatesbinary-lambda.122/m=12150,n=3500gf2_122-lambdaper-element493 ns490 ns .. 496 nsper elem
cell updatesbinary-lambda.122/m=1350,n=3500gf2_122-lambdaper-element384 ns383 ns .. 385 nsper elem
cell updatesbinary-lambda.122/m=5,n=3500gf2_122-lambdaper-element135 ns134 ns .. 135 nsper elem
cell updatesbinary-u.122/m=12150,n=3500gf2_122-uper-element422 ns421 ns .. 423 nsper elem
cell updatesbinary-u.122/m=1350,n=3500gf2_122-uper-element312 ns311 ns .. 313 nsper elem
cell updatesbinary-u.122/m=150,n=3500gf2_122-uper-element229 ns229 ns .. 230 nsper elem
cell updatesbinary-u.122/m=20,n=3500gf2_122-uper-element161 ns160 ns .. 161 nsper elem
cell updatesbinary-u.122/m=5,n=3500gf2_122-uper-element119 ns119 ns .. 120 nsper elem
cell updatesbinary-w.122/m=12150,n=3500gf2_122-wper-element501 ns499 ns .. 502 nsper elem
cell updatesbinary-w.122/m=1350,n=3500gf2_122-wper-element387 ns386 ns .. 388 nsper elem
cell updatesbinary-w.122/m=5,n=3500gf2_122-wper-element134 ns133 ns .. 134 nsper elem
cell updatesbinary.127/m=12150,n=3500gf2_127per-element518 ns517 ns .. 519 nsper elem
cell updatesbinary.127/m=1350,n=3500gf2_127per-element386 ns385 ns .. 387 nsper elem
cell updatesbinary.127/m=5,n=3500gf2_127per-element133 ns133 ns .. 133 nsper elem
cell updatesbinary-lambda.127/m=12150,n=3500gf2_127-lambdaper-element484 ns483 ns .. 486 nsper elem
cell updatesbinary-lambda.127/m=1350,n=3500gf2_127-lambdaper-element377 ns376 ns .. 378 nsper elem
cell updatesbinary-lambda.127/m=150,n=3500gf2_127-lambdaper-element276 ns276 ns .. 277 nsper elem
cell updatesbinary-lambda.127/m=20,n=3500gf2_127-lambdaper-element187 ns187 ns .. 188 nsper elem
cell updatesbinary-lambda.127/m=5,n=3500gf2_127-lambdaper-element130 ns130 ns .. 130 nsper elem
cell updatesbinary-u.127/m=12150,n=3500gf2_127-uper-element411 ns410 ns .. 412 nsper elem
cell updatesbinary-u.127/m=1350,n=3500gf2_127-uper-element304 ns304 ns .. 305 nsper elem
cell updatesbinary-u.127/m=150,n=3500gf2_127-uper-element225 ns224 ns .. 226 nsper elem
cell updatesbinary-u.127/m=20,n=3500gf2_127-uper-element158 ns157 ns .. 160 nsper elem
cell updatesbinary-u.127/m=5,n=3500gf2_127-uper-element115 ns115 ns .. 115 nsper elem
cell updatesbinary-w.127/m=12150,n=3500gf2_127-wper-element480 ns479 ns .. 480 nsper elem
cell updatesbinary-w.127/m=1350,n=3500gf2_127-wper-element373 ns372 ns .. 373 nsper elem
cell updatesbinary-w.127/m=150,n=3500gf2_127-wper-element273 ns273 ns .. 274 nsper elem
cell updatesbinary-w.127/m=20,n=3500gf2_127-wper-element186 ns186 ns .. 187 nsper elem
cell updatesbinary-w.127/m=5,n=3500gf2_127-wper-element132 ns131 ns .. 132 nsper elem
cell updatesedwards.107/m=1350,n=3500edwards107per-element473 ns473 ns .. 474 nsper elem
cell updatesedwards.127/m=1350,n=3500edwards127per-element488 ns487 ns .. 489 nsper elem
cell updatesedwards.61x2/m=1350,n=3500edwards61x2per-element456 ns455 ns .. 457 nsper elem
cell updatestwisted.goldilocks2/m=1350,n=3500twisted-goldilocks2per-element582 ns581 ns .. 584 nsper elem
cell updatestwisted.128/m=1350,n=3500twisted128per-element617 ns616 ns .. 619 nsper elem
cell updatestwisted.61x2/m=1350,n=3500twisted61x2per-element450 ns449 ns .. 452 nsper elem
cell updatestwisted.64x2/m=1350,n=3500twisted64x2per-element561 ns560 ns .. 562 nsper elem
cell updatesweier.107/m=1350,n=3500weier107per-element788 ns786 ns .. 790 nsper elem
cell updatesweier-jacobian.107/m=1350,n=3500weier107-jacobianper-element697 ns696 ns .. 699 nsper elem
cell updatesweier.127/m=1350,n=3500weier127per-element910 ns908 ns .. 913 nsper elem
cell updatesweier-jacobian.127/m=1350,n=3500weier127-jacobianper-element742 ns740 ns .. 744 nsper elem
cell updatesweier.61x2/m=1350,n=3500weier61x2per-element817 ns812 ns .. 823 nsper elem
cell updatesweier-jacobian.61x2/m=1350,n=3500weier61x2-jacobianper-element768 ns766 ns .. 770 nsper elem
cell updatesristretto255/m=1350,n=3500ristretto255per-element1.74 µs1.74 µs .. 1.75 µsper elem
peel, per differencexor-sha256.64/d=1350,m=2700,prefilter=true,batch=truexorbatch1.03 µs1.03 µs .. 1.03 µsper elem
peel, per differencexor-siphash.64/d=1350,m=2700,prefilter=true,batch=truexor-siphashbatch988 ns987 ns .. 990 nsper elem
peel, per differencebinary.109/d=10000,m=20000,prefilter=true,batch=true,h2c=porningf2_109batch1.70 µs1.69 µs .. 1.70 µsper elem
peel, per differencebinary.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109batch1.45 µs1.45 µs .. 1.46 µsper elem
peel, per differencebinary.109/d=1350,m=2700,prefilter=true,batch=true,h2c=porningf2_109batch1.39 µs1.39 µs .. 1.39 µsper elem
peel, per differencebinary.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109batch1.16 µs1.16 µs .. 1.17 µsper elem
peel, per differencebinary.109/d=4,m=10,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_109batch962 ns960 ns .. 964 nsper elem
peel, per differencebinary.109/d=4,m=8,prefilter=true,batch=true,h2c=porningf2_109batch820 ns817 ns .. 824 nsper elem
peel, per differencebinary-lambda.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_109-lambdabatch1.67 µs1.67 µs .. 1.67 µsper elem
peel, per differencebinary-lambda.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdabatch1.44 µs1.43 µs .. 1.44 µsper elem
peel, per differencebinary-lambda.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_109-lambdabatch1.37 µs1.37 µs .. 1.37 µsper elem
peel, per differencebinary-lambda.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdabatch1.14 µs1.14 µs .. 1.15 µsper elem
peel, per differencebinary-lambda.109/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-lambdabatch927 ns925 ns .. 929 nsper elem
peel, per differencebinary-lambda.109/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_109-lambdabatch795 ns793 ns .. 798 nsper elem
peel, per differencebinary-u.109/d=10000,m=20000,prefilter=false,batch=false,h2c=pornin-addendgf2_109-uper-element2.27 µs2.26 µs .. 2.27 µsper elem
peel, per differencebinary-u.109/d=10000,m=20000,prefilter=false,batch=true,h2c=pornin-addendgf2_109-ubatch1.35 µs1.35 µs .. 1.35 µsper elem
peel, per differencebinary-u.109/d=10000,m=20000,prefilter=true,batch=false,h2c=pornin-addendgf2_109-uper-element2.11 µs2.10 µs .. 2.11 µsper elem
peel, per differencebinary-u.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch1.57 µs1.57 µs .. 1.58 µsper elem
peel, per differencebinary-u.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-ubatch1.33 µs1.33 µs .. 1.34 µsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=false,batch=false,h2c=pornin-addendgf2_109-uper-element2.04 µs2.03 µs .. 2.04 µsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=false,batch=true,h2c=pornin-addendgf2_109-ubatch1.12 µs1.11 µs .. 1.12 µsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=true,batch=false,h2c=pornin-addendgf2_109-uper-element1.82 µs1.82 µs .. 1.83 µsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch1.30 µs1.30 µs .. 1.30 µsper elem
peel, per differencebinary-u.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-ubatch1.07 µs1.07 µs .. 1.07 µsper elem
peel, per differencebinary-u.109/d=150,m=300,prefilter=false,batch=false,h2c=pornin-addendgf2_109-uper-element1.78 µs1.78 µs .. 1.79 µsper elem
peel, per differencebinary-u.109/d=150,m=300,prefilter=false,batch=true,h2c=pornin-addendgf2_109-ubatch865 ns863 ns .. 868 nsper elem
peel, per differencebinary-u.109/d=150,m=300,prefilter=true,batch=false,h2c=pornin-addendgf2_109-uper-element1.58 µs1.58 µs .. 1.58 µsper elem
peel, per differencebinary-u.109/d=150,m=300,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch1.04 µs1.04 µs .. 1.05 µsper elem
peel, per differencebinary-u.109/d=20,m=40,prefilter=false,batch=false,h2c=pornin-addendgf2_109-uper-element1.43 µs1.43 µs .. 1.44 µsper elem
peel, per differencebinary-u.109/d=20,m=40,prefilter=false,batch=true,h2c=pornin-addendgf2_109-ubatch750 ns749 ns .. 752 nsper elem
peel, per differencebinary-u.109/d=20,m=40,prefilter=true,batch=false,h2c=pornin-addendgf2_109-uper-element1.31 µs1.30 µs .. 1.31 µsper elem
peel, per differencebinary-u.109/d=20,m=40,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch881 ns878 ns .. 884 nsper elem
peel, per differencebinary-u.109/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-ubatch938 ns933 ns .. 943 nsper elem
peel, per differencebinary-u.109/d=4,m=8,prefilter=false,batch=false,h2c=pornin-addendgf2_109-uper-element953 ns951 ns .. 955 nsper elem
peel, per differencebinary-u.109/d=4,m=8,prefilter=false,batch=true,h2c=pornin-addendgf2_109-ubatch722 ns720 ns .. 723 nsper elem
peel, per differencebinary-u.109/d=4,m=8,prefilter=true,batch=false,h2c=pornin-addendgf2_109-uper-element1.02 µs1.02 µs .. 1.03 µsper elem
peel, per differencebinary-u.109/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_109-ubatch805 ns802 ns .. 807 nsper elem
peel, per differencebinary-w.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_109-wbatch1.66 µs1.66 µs .. 1.67 µsper elem
peel, per differencebinary-w.109/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wbatch1.42 µs1.42 µs .. 1.43 µsper elem
peel, per differencebinary-w.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_109-wbatch1.37 µs1.36 µs .. 1.37 µsper elem
peel, per differencebinary-w.109/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wbatch1.13 µs1.13 µs .. 1.14 µsper elem
peel, per differencebinary-w.109/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_109-wbatch922 ns920 ns .. 924 nsper elem
peel, per differencebinary-w.109/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_109-wbatch795 ns793 ns .. 798 nsper elem
peel, per differencebinary.122/d=10000,m=20000,prefilter=true,batch=true,h2c=porningf2_122batch1.69 µs1.68 µs .. 1.70 µsper elem
peel, per differencebinary.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122batch1.47 µs1.46 µs .. 1.47 µsper elem
peel, per differencebinary.122/d=1350,m=2700,prefilter=true,batch=true,h2c=porningf2_122batch1.39 µs1.39 µs .. 1.40 µsper elem
peel, per differencebinary.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122batch1.16 µs1.16 µs .. 1.16 µsper elem
peel, per differencebinary.122/d=4,m=10,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122batch771 ns768 ns .. 774 nsper elem
peel, per differencebinary.122/d=4,m=8,prefilter=true,batch=true,h2c=porningf2_122batch683 ns682 ns .. 685 nsper elem
peel, per differencebinary.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=porningf2_122-glsbatch1.67 µs1.66 µs .. 1.67 µsper elem
peel, per differencebinary.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122-glsbatch1.45 µs1.44 µs .. 1.45 µsper elem
peel, per differencebinary.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=porningf2_122-glsbatch1.37 µs1.37 µs .. 1.37 µsper elem
peel, per differencebinary.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122-glsbatch1.15 µs1.14 µs .. 1.15 µsper elem
peel, per differencebinary.122-gls/d=4,m=10,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_122-glsbatch765 ns762 ns .. 768 nsper elem
peel, per differencebinary.122-gls/d=4,m=8,prefilter=true,batch=true,h2c=porningf2_122-glsbatch676 ns674 ns .. 677 nsper elem
peel, per differencebinary-lambda.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-lambdabatch1.67 µs1.66 µs .. 1.68 µsper elem
peel, per differencebinary-lambda.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdabatch1.44 µs1.43 µs .. 1.44 µsper elem
peel, per differencebinary-lambda.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-lambdabatch1.37 µs1.37 µs .. 1.38 µsper elem
peel, per differencebinary-lambda.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdabatch1.14 µs1.14 µs .. 1.15 µsper elem
peel, per differencebinary-lambda.122-gls/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-lambdabatch734 ns732 ns .. 737 nsper elem
peel, per differencebinary-lambda.122-gls/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-lambdabatch661 ns659 ns .. 663 nsper elem
peel, per differencebinary-u.122-gls/d=10000,m=20000,prefilter=false,batch=false,h2c=pornin-addendgf2_122-gls-uper-element1.86 µs1.86 µs .. 1.87 µsper elem
peel, per differencebinary-u.122-gls/d=10000,m=20000,prefilter=false,batch=true,h2c=pornin-addendgf2_122-gls-ubatch1.35 µs1.34 µs .. 1.35 µsper elem
peel, per differencebinary-u.122-gls/d=10000,m=20000,prefilter=true,batch=false,h2c=pornin-addendgf2_122-gls-uper-element1.85 µs1.85 µs .. 1.85 µsper elem
peel, per differencebinary-u.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-ubatch1.57 µs1.57 µs .. 1.58 µsper elem
peel, per differencebinary-u.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-ubatch1.34 µs1.34 µs .. 1.34 µsper elem
peel, per differencebinary-u.122-gls/d=1350,m=2700,prefilter=false,batch=false,h2c=pornin-addendgf2_122-gls-uper-element1.61 µs1.60 µs .. 1.61 µsper elem
peel, per differencebinary-u.122-gls/d=1350,m=2700,prefilter=false,batch=true,h2c=pornin-addendgf2_122-gls-ubatch1.10 µs1.10 µs .. 1.11 µsper elem
peel, per differencebinary-u.122-gls/d=1350,m=2700,prefilter=true,batch=false,h2c=pornin-addendgf2_122-gls-uper-element1.58 µs1.57 µs .. 1.58 µsper elem
peel, per differencebinary-u.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-ubatch1.30 µs1.29 µs .. 1.30 µsper elem
peel, per differencebinary-u.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-ubatch1.06 µs1.06 µs .. 1.07 µsper elem
peel, per differencebinary-u.122-gls/d=150,m=300,prefilter=false,batch=false,h2c=pornin-addendgf2_122-gls-uper-element1.32 µs1.31 µs .. 1.32 µsper elem
peel, per differencebinary-u.122-gls/d=150,m=300,prefilter=false,batch=true,h2c=pornin-addendgf2_122-gls-ubatch834 ns831 ns .. 837 nsper elem
peel, per differencebinary-u.122-gls/d=150,m=300,prefilter=true,batch=false,h2c=pornin-addendgf2_122-gls-uper-element1.30 µs1.29 µs .. 1.30 µsper elem
peel, per differencebinary-u.122-gls/d=150,m=300,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-ubatch1.01 µs1.01 µs .. 1.02 µsper elem
peel, per differencebinary-u.122-gls/d=20,m=40,prefilter=false,batch=false,h2c=pornin-addendgf2_122-gls-uper-element1.05 µs1.04 µs .. 1.05 µsper elem
peel, per differencebinary-u.122-gls/d=20,m=40,prefilter=false,batch=true,h2c=pornin-addendgf2_122-gls-ubatch696 ns693 ns .. 699 nsper elem
peel, per differencebinary-u.122-gls/d=20,m=40,prefilter=true,batch=false,h2c=pornin-addendgf2_122-gls-uper-element1.05 µs1.05 µs .. 1.06 µsper elem
peel, per differencebinary-u.122-gls/d=20,m=40,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-ubatch823 ns819 ns .. 826 nsper elem
peel, per differencebinary-u.122-gls/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-ubatch728 ns726 ns .. 730 nsper elem
peel, per differencebinary-u.122-gls/d=4,m=8,prefilter=false,batch=false,h2c=pornin-addendgf2_122-gls-uper-element718 ns716 ns .. 720 nsper elem
peel, per differencebinary-u.122-gls/d=4,m=8,prefilter=false,batch=true,h2c=pornin-addendgf2_122-gls-ubatch600 ns597 ns .. 604 nsper elem
peel, per differencebinary-u.122-gls/d=4,m=8,prefilter=true,batch=false,h2c=pornin-addendgf2_122-gls-uper-element796 ns794 ns .. 799 nsper elem
peel, per differencebinary-u.122-gls/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-ubatch676 ns673 ns .. 678 nsper elem
peel, per differencebinary-w.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-wbatch1.67 µs1.67 µs .. 1.67 µsper elem
peel, per differencebinary-w.122-gls/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wbatch1.44 µs1.44 µs .. 1.44 µsper elem
peel, per differencebinary-w.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-wbatch1.38 µs1.38 µs .. 1.38 µsper elem
peel, per differencebinary-w.122-gls/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wbatch1.14 µs1.14 µs .. 1.15 µsper elem
peel, per differencebinary-w.122-gls/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-gls-wbatch732 ns729 ns .. 734 nsper elem
peel, per differencebinary-w.122-gls/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-gls-wbatch665 ns662 ns .. 667 nsper elem
peel, per differencebinary-lambda.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-lambdabatch1.67 µs1.66 µs .. 1.67 µsper elem
peel, per differencebinary-lambda.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdabatch1.45 µs1.44 µs .. 1.46 µsper elem
peel, per differencebinary-lambda.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-lambdabatch1.38 µs1.37 µs .. 1.38 µsper elem
peel, per differencebinary-lambda.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdabatch1.15 µs1.15 µs .. 1.15 µsper elem
peel, per differencebinary-lambda.122/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-lambdabatch735 ns733 ns .. 737 nsper elem
peel, per differencebinary-lambda.122/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-lambdabatch659 ns657 ns .. 662 nsper elem
peel, per differencebinary-u.122/d=10000,m=20000,prefilter=false,batch=false,h2c=pornin-addendgf2_122-uper-element1.84 µs1.84 µs .. 1.85 µsper elem
peel, per differencebinary-u.122/d=10000,m=20000,prefilter=false,batch=true,h2c=pornin-addendgf2_122-ubatch1.34 µs1.34 µs .. 1.35 µsper elem
peel, per differencebinary-u.122/d=10000,m=20000,prefilter=true,batch=false,h2c=pornin-addendgf2_122-uper-element1.86 µs1.86 µs .. 1.87 µsper elem
peel, per differencebinary-u.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-ubatch1.57 µs1.57 µs .. 1.58 µsper elem
peel, per differencebinary-u.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-ubatch1.33 µs1.33 µs .. 1.33 µsper elem
peel, per differencebinary-u.122/d=1350,m=2700,prefilter=false,batch=false,h2c=pornin-addendgf2_122-uper-element1.62 µs1.61 µs .. 1.62 µsper elem
peel, per differencebinary-u.122/d=1350,m=2700,prefilter=false,batch=true,h2c=pornin-addendgf2_122-ubatch1.11 µs1.10 µs .. 1.11 µsper elem
peel, per differencebinary-u.122/d=1350,m=2700,prefilter=true,batch=false,h2c=pornin-addendgf2_122-uper-element1.59 µs1.59 µs .. 1.59 µsper elem
peel, per differencebinary-u.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-ubatch1.30 µs1.30 µs .. 1.30 µsper elem
peel, per differencebinary-u.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-ubatch1.06 µs1.06 µs .. 1.06 µsper elem
peel, per differencebinary-u.122/d=150,m=300,prefilter=false,batch=false,h2c=pornin-addendgf2_122-uper-element1.33 µs1.32 µs .. 1.33 µsper elem
peel, per differencebinary-u.122/d=150,m=300,prefilter=false,batch=true,h2c=pornin-addendgf2_122-ubatch837 ns834 ns .. 839 nsper elem
peel, per differencebinary-u.122/d=150,m=300,prefilter=true,batch=false,h2c=pornin-addendgf2_122-uper-element1.31 µs1.30 µs .. 1.31 µsper elem
peel, per differencebinary-u.122/d=150,m=300,prefilter=true,batch=true,h2c=pornin-addendgf2_122-ubatch1.03 µs1.02 µs .. 1.04 µsper elem
peel, per differencebinary-u.122/d=20,m=40,prefilter=false,batch=false,h2c=pornin-addendgf2_122-uper-element1.05 µs1.05 µs .. 1.05 µsper elem
peel, per differencebinary-u.122/d=20,m=40,prefilter=false,batch=true,h2c=pornin-addendgf2_122-ubatch690 ns688 ns .. 692 nsper elem
peel, per differencebinary-u.122/d=20,m=40,prefilter=true,batch=false,h2c=pornin-addendgf2_122-uper-element1.05 µs1.04 µs .. 1.05 µsper elem
peel, per differencebinary-u.122/d=20,m=40,prefilter=true,batch=true,h2c=pornin-addendgf2_122-ubatch826 ns823 ns .. 830 nsper elem
peel, per differencebinary-u.122/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-ubatch751 ns745 ns .. 757 nsper elem
peel, per differencebinary-u.122/d=4,m=8,prefilter=false,batch=false,h2c=pornin-addendgf2_122-uper-element713 ns712 ns .. 714 nsper elem
peel, per differencebinary-u.122/d=4,m=8,prefilter=false,batch=true,h2c=pornin-addendgf2_122-ubatch603 ns597 ns .. 611 nsper elem
peel, per differencebinary-u.122/d=4,m=8,prefilter=true,batch=false,h2c=pornin-addendgf2_122-uper-element793 ns791 ns .. 795 nsper elem
peel, per differencebinary-u.122/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-ubatch675 ns673 ns .. 676 nsper elem
peel, per differencebinary-w.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_122-wbatch1.68 µs1.68 µs .. 1.69 µsper elem
peel, per differencebinary-w.122/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wbatch1.43 µs1.43 µs .. 1.44 µsper elem
peel, per differencebinary-w.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_122-wbatch1.38 µs1.38 µs .. 1.39 µsper elem
peel, per differencebinary-w.122/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wbatch1.14 µs1.14 µs .. 1.14 µsper elem
peel, per differencebinary-w.122/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_122-wbatch730 ns728 ns .. 733 nsper elem
peel, per differencebinary-w.122/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_122-wbatch680 ns677 ns .. 684 nsper elem
peel, per differencebinary.127/d=10000,m=20000,prefilter=true,batch=true,h2c=porningf2_127batch1.66 µs1.66 µs .. 1.67 µsper elem
peel, per differencebinary.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127batch1.44 µs1.44 µs .. 1.45 µsper elem
peel, per differencebinary.127/d=1350,m=2700,prefilter=true,batch=true,h2c=porningf2_127batch1.37 µs1.37 µs .. 1.37 µsper elem
peel, per differencebinary.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127batch1.15 µs1.15 µs .. 1.15 µsper elem
peel, per differencebinary.127/d=4,m=10,prefilter=true,batch=true,h2c=pornin,proj=gf2_127,mapproj=gf2_127gf2_127batch660 ns657 ns .. 663 nsper elem
peel, per differencebinary.127/d=4,m=8,prefilter=true,batch=true,h2c=porningf2_127batch601 ns599 ns .. 603 nsper elem
peel, per differencebinary-lambda.127/d=10000,m=20000,prefilter=false,batch=false,h2c=pornin-addendgf2_127-lambdaper-element1.64 µs1.64 µs .. 1.65 µsper elem
peel, per differencebinary-lambda.127/d=10000,m=20000,prefilter=false,batch=true,h2c=pornin-addendgf2_127-lambdabatch1.40 µs1.40 µs .. 1.40 µsper elem
peel, per differencebinary-lambda.127/d=10000,m=20000,prefilter=true,batch=false,h2c=pornin-addendgf2_127-lambdaper-element1.77 µs1.77 µs .. 1.78 µsper elem
peel, per differencebinary-lambda.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_127-lambdabatch1.63 µs1.63 µs .. 1.64 µsper elem
peel, per differencebinary-lambda.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdabatch1.40 µs1.40 µs .. 1.41 µsper elem
peel, per differencebinary-lambda.127/d=1350,m=2700,prefilter=false,batch=false,h2c=pornin-addendgf2_127-lambdaper-element1.38 µs1.38 µs .. 1.39 µsper elem
peel, per differencebinary-lambda.127/d=1350,m=2700,prefilter=false,batch=true,h2c=pornin-addendgf2_127-lambdabatch1.16 µs1.15 µs .. 1.16 µsper elem
peel, per differencebinary-lambda.127/d=1350,m=2700,prefilter=true,batch=false,h2c=pornin-addendgf2_127-lambdaper-element1.49 µs1.48 µs .. 1.50 µsper elem
peel, per differencebinary-lambda.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_127-lambdabatch1.35 µs1.35 µs .. 1.35 µsper elem
peel, per differencebinary-lambda.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdabatch1.12 µs1.12 µs .. 1.13 µsper elem
peel, per differencebinary-lambda.127/d=150,m=300,prefilter=false,batch=false,h2c=pornin-addendgf2_127-lambdaper-element1.08 µs1.08 µs .. 1.08 µsper elem
peel, per differencebinary-lambda.127/d=150,m=300,prefilter=false,batch=true,h2c=pornin-addendgf2_127-lambdabatch848 ns846 ns .. 851 nsper elem
peel, per differencebinary-lambda.127/d=150,m=300,prefilter=true,batch=false,h2c=pornin-addendgf2_127-lambdaper-element1.16 µs1.16 µs .. 1.16 µsper elem
peel, per differencebinary-lambda.127/d=150,m=300,prefilter=true,batch=true,h2c=pornin-addendgf2_127-lambdabatch1.03 µs1.03 µs .. 1.04 µsper elem
peel, per differencebinary-lambda.127/d=20,m=40,prefilter=false,batch=false,h2c=pornin-addendgf2_127-lambdaper-element827 ns825 ns .. 829 nsper elem
peel, per differencebinary-lambda.127/d=20,m=40,prefilter=false,batch=true,h2c=pornin-addendgf2_127-lambdabatch665 ns663 ns .. 668 nsper elem
peel, per differencebinary-lambda.127/d=20,m=40,prefilter=true,batch=false,h2c=pornin-addendgf2_127-lambdaper-element890 ns888 ns .. 891 nsper elem
peel, per differencebinary-lambda.127/d=20,m=40,prefilter=true,batch=true,h2c=pornin-addendgf2_127-lambdabatch796 ns794 ns .. 798 nsper elem
peel, per differencebinary-lambda.127/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-lambdabatch605 ns604 ns .. 606 nsper elem
peel, per differencebinary-lambda.127/d=4,m=8,prefilter=false,batch=false,h2c=pornin-addendgf2_127-lambdaper-element542 ns540 ns .. 543 nsper elem
peel, per differencebinary-lambda.127/d=4,m=8,prefilter=false,batch=true,h2c=pornin-addendgf2_127-lambdabatch495 ns493 ns .. 497 nsper elem
peel, per differencebinary-lambda.127/d=4,m=8,prefilter=true,batch=false,h2c=pornin-addendgf2_127-lambdaper-element623 ns621 ns .. 626 nsper elem
peel, per differencebinary-lambda.127/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_127-lambdabatch576 ns574 ns .. 578 nsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=false,batch=false,h2c=pornin-addendgf2_127-uper-element1.56 µs1.56 µs .. 1.56 µsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=false,batch=true,h2c=pornin-addendgf2_127-ubatch1.32 µs1.32 µs .. 1.32 µsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=true,batch=false,h2c=pornin-addendgf2_127-uper-element1.70 µs1.70 µs .. 1.71 µsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch1.57 µs1.57 µs .. 1.58 µsper elem
peel, per differencebinary-u.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-ubatch1.33 µs1.33 µs .. 1.34 µsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=false,batch=false,h2c=pornin-addendgf2_127-uper-element1.33 µs1.32 µs .. 1.33 µsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=false,batch=true,h2c=pornin-addendgf2_127-ubatch1.09 µs1.09 µs .. 1.09 µsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=true,batch=false,h2c=pornin-addendgf2_127-uper-element1.42 µs1.42 µs .. 1.42 µsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch1.29 µs1.28 µs .. 1.29 µsper elem
peel, per differencebinary-u.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-ubatch1.06 µs1.06 µs .. 1.06 µsper elem
peel, per differencebinary-u.127/d=150,m=300,prefilter=false,batch=false,h2c=pornin-addendgf2_127-uper-element1.05 µs1.05 µs .. 1.05 µsper elem
peel, per differencebinary-u.127/d=150,m=300,prefilter=false,batch=true,h2c=pornin-addendgf2_127-ubatch819 ns818 ns .. 821 nsper elem
peel, per differencebinary-u.127/d=150,m=300,prefilter=true,batch=false,h2c=pornin-addendgf2_127-uper-element1.14 µs1.13 µs .. 1.14 µsper elem
peel, per differencebinary-u.127/d=150,m=300,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch1.00 µs1.00 µs .. 1.01 µsper elem
peel, per differencebinary-u.127/d=20,m=40,prefilter=false,batch=false,h2c=pornin-addendgf2_127-uper-element819 ns817 ns .. 821 nsper elem
peel, per differencebinary-u.127/d=20,m=40,prefilter=false,batch=true,h2c=pornin-addendgf2_127-ubatch661 ns659 ns .. 663 nsper elem
peel, per differencebinary-u.127/d=20,m=40,prefilter=true,batch=false,h2c=pornin-addendgf2_127-uper-element884 ns880 ns .. 891 nsper elem
peel, per differencebinary-u.127/d=20,m=40,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch789 ns787 ns .. 792 nsper elem
peel, per differencebinary-u.127/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-ubatch625 ns621 ns .. 629 nsper elem
peel, per differencebinary-u.127/d=4,m=8,prefilter=false,batch=false,h2c=pornin-addendgf2_127-uper-element551 ns550 ns .. 553 nsper elem
peel, per differencebinary-u.127/d=4,m=8,prefilter=false,batch=true,h2c=pornin-addendgf2_127-ubatch510 ns509 ns .. 512 nsper elem
peel, per differencebinary-u.127/d=4,m=8,prefilter=true,batch=false,h2c=pornin-addendgf2_127-uper-element632 ns630 ns .. 634 nsper elem
peel, per differencebinary-u.127/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_127-ubatch589 ns588 ns .. 591 nsper elem
peel, per differencebinary-w.127/d=10000,m=20000,prefilter=false,batch=false,h2c=pornin-addendgf2_127-wper-element1.66 µs1.65 µs .. 1.66 µsper elem
peel, per differencebinary-w.127/d=10000,m=20000,prefilter=false,batch=true,h2c=pornin-addendgf2_127-wbatch1.42 µs1.41 µs .. 1.42 µsper elem
peel, per differencebinary-w.127/d=10000,m=20000,prefilter=true,batch=false,h2c=pornin-addendgf2_127-wper-element1.78 µs1.78 µs .. 1.78 µsper elem
peel, per differencebinary-w.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch1.65 µs1.65 µs .. 1.65 µsper elem
peel, per differencebinary-w.127/d=10000,m=20000,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wbatch1.40 µs1.40 µs .. 1.41 µsper elem
peel, per differencebinary-w.127/d=1350,m=2700,prefilter=false,batch=false,h2c=pornin-addendgf2_127-wper-element1.39 µs1.39 µs .. 1.39 µsper elem
peel, per differencebinary-w.127/d=1350,m=2700,prefilter=false,batch=true,h2c=pornin-addendgf2_127-wbatch1.16 µs1.16 µs .. 1.17 µsper elem
peel, per differencebinary-w.127/d=1350,m=2700,prefilter=true,batch=false,h2c=pornin-addendgf2_127-wper-element1.49 µs1.48 µs .. 1.49 µsper elem
peel, per differencebinary-w.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch1.36 µs1.36 µs .. 1.36 µsper elem
peel, per differencebinary-w.127/d=1350,m=2700,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wbatch1.12 µs1.12 µs .. 1.13 µsper elem
peel, per differencebinary-w.127/d=150,m=300,prefilter=false,batch=false,h2c=pornin-addendgf2_127-wper-element1.09 µs1.09 µs .. 1.10 µsper elem
peel, per differencebinary-w.127/d=150,m=300,prefilter=false,batch=true,h2c=pornin-addendgf2_127-wbatch861 ns856 ns .. 865 nsper elem
peel, per differencebinary-w.127/d=150,m=300,prefilter=true,batch=false,h2c=pornin-addendgf2_127-wper-element1.18 µs1.18 µs .. 1.18 µsper elem
peel, per differencebinary-w.127/d=150,m=300,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch1.04 µs1.04 µs .. 1.05 µsper elem
peel, per differencebinary-w.127/d=20,m=40,prefilter=false,batch=false,h2c=pornin-addendgf2_127-wper-element829 ns826 ns .. 831 nsper elem
peel, per differencebinary-w.127/d=20,m=40,prefilter=false,batch=true,h2c=pornin-addendgf2_127-wbatch668 ns664 ns .. 671 nsper elem
peel, per differencebinary-w.127/d=20,m=40,prefilter=true,batch=false,h2c=pornin-addendgf2_127-wper-element887 ns885 ns .. 888 nsper elem
peel, per differencebinary-w.127/d=20,m=40,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch794 ns791 ns .. 797 nsper elem
peel, per differencebinary-w.127/d=4,m=10,prefilter=true,batch=true,h2c=pornin-addend,proj=gf2_127,mapproj=gf2_127gf2_127-wbatch612 ns610 ns .. 615 nsper elem
peel, per differencebinary-w.127/d=4,m=8,prefilter=false,batch=false,h2c=pornin-addendgf2_127-wper-element551 ns548 ns .. 553 nsper elem
peel, per differencebinary-w.127/d=4,m=8,prefilter=false,batch=true,h2c=pornin-addendgf2_127-wbatch508 ns505 ns .. 510 nsper elem
peel, per differencebinary-w.127/d=4,m=8,prefilter=true,batch=false,h2c=pornin-addendgf2_127-wper-element626 ns624 ns .. 627 nsper elem
peel, per differencebinary-w.127/d=4,m=8,prefilter=true,batch=true,h2c=pornin-addendgf2_127-wbatch584 ns581 ns .. 587 nsper elem
peel, per differenceedwards.107/d=1350,m=2700,prefilter=true,batch=true,h2c=tiedwards107batch2.39 µs2.38 µs .. 2.40 µsper elem
peel, per differenceedwards.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiedwards127batch2.64 µs2.64 µs .. 2.65 µsper elem
peel, per differenceedwards.61x2/d=1350,m=2700,prefilter=true,batch=true,h2c=tiedwards61x2batch2.12 µs2.11 µs .. 2.12 µsper elem
peel, per differencetwisted.goldilocks2/d=1350,m=2700,prefilter=true,batch=true,h2c=titwisted-goldilocks2batch3.81 µs3.80 µs .. 3.82 µsper elem
peel, per differencetwisted.128/d=1350,m=2700,prefilter=true,batch=true,h2c=titwisted128batch3.64 µs3.63 µs .. 3.64 µsper elem
peel, per differencetwisted.61x2/d=1350,m=2700,prefilter=true,batch=true,h2c=titwisted61x2batch2.08 µs2.07 µs .. 2.08 µsper elem
peel, per differencetwisted.64x2/d=1350,m=2700,prefilter=true,batch=true,h2c=titwisted64x2batch2.51 µs2.50 µs .. 2.52 µsper elem
peel, per differenceweier.107/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier107batch2.67 µs2.66 µs .. 2.68 µsper elem
peel, per differenceweier-jacobian.107/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier107-jacobianbatch2.57 µs2.56 µs .. 2.58 µsper elem
peel, per differenceweier.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier127batch3.04 µs3.04 µs .. 3.05 µsper elem
peel, per differenceweier-jacobian.127/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier127-jacobianbatch2.81 µs2.80 µs .. 2.82 µsper elem
peel, per differenceweier.61x2/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier61x2batch2.45 µs2.44 µs .. 2.46 µsper elem
peel, per differenceweier-jacobian.61x2/d=1350,m=2700,prefilter=true,batch=true,h2c=tiweier61x2-jacobianbatch2.37 µs2.37 µs .. 2.38 µsper elem
peel, per differenceristretto255/d=1350,m=2700,prefilter=true,batch=trueristretto255batch9.13 µs9.11 µs .. 9.15 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=10xorper-element758 ns754 ns .. 764 nsper elem
rateless encode and decode, per differencexor-sha256.64/d=100xorper-element1.34 µs1.34 µs .. 1.35 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=1000xorper-element2.28 µs2.28 µs .. 2.29 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=10000xorper-element4.24 µs4.22 µs .. 4.26 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=100000xorper-element11.1 µs11.0 µs .. 11.1 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=20xorper-element921 ns917 ns .. 927 nsper elem
rateless encode and decode, per differencexor-sha256.64/d=40xorper-element1.06 µs1.06 µs .. 1.07 µsper elem
rateless encode and decode, per differencexor-sha256.64/d=50000xorper-element7.98 µs7.94 µs .. 8.03 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10xor-siphashper-element617 ns616 ns .. 619 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=10,map=mcg64xor-siphashper-element611 ns609 ns .. 613 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=100xor-siphashper-element1.15 µs1.15 µs .. 1.15 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100,map=mcg64xor-siphashper-element1.14 µs1.13 µs .. 1.15 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=1000xor-siphashper-element2.05 µs2.05 µs .. 2.06 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=1000,map=mcg64xor-siphashper-element1.99 µs1.99 µs .. 2.00 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000xor-siphashper-element3.88 µs3.87 µs .. 3.88 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000,map=chacha8xor-siphashper-element4.47 µs4.44 µs .. 4.50 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=10000,map=mcg64xor-siphashper-element3.88 µs3.87 µs .. 3.89 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000xor-siphashper-element10.7 µs10.7 µs .. 10.8 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000,map=chacha8xor-siphashper-element16.4 µs16.4 µs .. 16.4 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=100000,map=mcg64xor-siphashper-element10.6 µs10.6 µs .. 10.7 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=20xor-siphashper-element765 ns763 ns .. 768 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=20,map=mcg64xor-siphashper-element757 ns755 ns .. 759 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=40xor-siphashper-element893 ns891 ns .. 895 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=40,map=mcg64xor-siphashper-element894 ns892 ns .. 897 nsper elem
rateless encode and decode, per differencexor-siphash.64/d=50000xor-siphashper-element7.72 µs7.68 µs .. 7.76 µsper elem
rateless encode and decode, per differencexor-siphash.64/d=50000,map=mcg64xor-siphashper-element7.15 µs7.08 µs .. 7.23 µsper elem
rateless encode and decode, per differencebinary.109/d=10,h2c=porningf2_109per-element2.69 µs2.68 µs .. 2.69 µsper elem
rateless encode and decode, per differencebinary.109/d=1000,h2c=porningf2_109per-element5.53 µs5.52 µs .. 5.54 µsper elem
rateless encode and decode, per differencebinary.109/d=100000,h2c=porningf2_109per-element19.0 µs19.0 µs .. 19.1 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=10,h2c=pornin-addendgf2_109-lambdaper-element2.62 µs2.62 µs .. 2.63 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=1000,h2c=pornin-addendgf2_109-lambdaper-element5.47 µs5.46 µs .. 5.48 µsper elem
rateless encode and decode, per differencebinary-lambda.109/d=100000,h2c=pornin-addendgf2_109-lambdaper-element18.2 µs18.2 µs .. 18.2 µsper elem
rateless encode and decode, per differencebinary-u.109/d=10,h2c=pornin-addendgf2_109-uper-element2.55 µs2.55 µs .. 2.56 µsper elem
rateless encode and decode, per differencebinary-u.109/d=100,h2c=pornin-addendgf2_109-uper-element3.76 µs3.76 µs .. 3.77 µsper elem
rateless encode and decode, per differencebinary-u.109/d=1000,h2c=pornin-addendgf2_109-uper-element5.15 µs5.15 µs .. 5.16 µsper elem
rateless encode and decode, per differencebinary-u.109/d=10000,h2c=pornin-addendgf2_109-uper-element7.44 µs7.41 µs .. 7.46 µsper elem
rateless encode and decode, per differencebinary-u.109/d=100000,h2c=pornin-addendgf2_109-uper-element19.5 µs19.4 µs .. 19.8 µsper elem
rateless encode and decode, per differencebinary-u.109/d=20,h2c=pornin-addendgf2_109-uper-element2.95 µs2.95 µs .. 2.96 µsper elem
rateless encode and decode, per differencebinary-u.109/d=40,h2c=pornin-addendgf2_109-uper-element3.29 µs3.29 µs .. 3.30 µsper elem
rateless encode and decode, per differencebinary-u.109/d=50000,h2c=pornin-addendgf2_109-uper-element13.8 µs13.7 µs .. 13.9 µsper elem
rateless encode and decode, per differencebinary-w.109/d=10,h2c=pornin-addendgf2_109-wper-element2.63 µs2.62 µs .. 2.63 µsper elem
rateless encode and decode, per differencebinary-w.109/d=1000,h2c=pornin-addendgf2_109-wper-element5.46 µs5.45 µs .. 5.48 µsper elem
rateless encode and decode, per differencebinary-w.109/d=100000,h2c=pornin-addendgf2_109-wper-element18.1 µs18.0 µs .. 18.1 µsper elem
rateless encode and decode, per differencebinary.122/d=10,h2c=porningf2_122per-element2.05 µs2.05 µs .. 2.06 µsper elem
rateless encode and decode, per differencebinary.122/d=1000,h2c=porningf2_122per-element4.70 µs4.69 µs .. 4.71 µsper elem
rateless encode and decode, per differencebinary.122/d=100000,h2c=porningf2_122per-element18.3 µs18.2 µs .. 18.3 µsper elem
rateless encode and decode, per differencebinary.122-gls/d=10,h2c=porningf2_122-glsper-element2.03 µs2.03 µs .. 2.03 µsper elem
rateless encode and decode, per differencebinary.122-gls/d=1000,h2c=porningf2_122-glsper-element4.61 µs4.61 µs .. 4.62 µsper elem
rateless encode and decode, per differencebinary.122-gls/d=100000,h2c=porningf2_122-glsper-element18.0 µs18.0 µs .. 18.0 µsper elem
rateless encode and decode, per differencebinary-lambda.122-gls/d=10,h2c=pornin-addendgf2_122-gls-lambdaper-element1.99 µs1.99 µs .. 2.00 µsper elem
rateless encode and decode, per differencebinary-lambda.122-gls/d=1000,h2c=pornin-addendgf2_122-gls-lambdaper-element4.61 µs4.60 µs .. 4.62 µsper elem
rateless encode and decode, per differencebinary-lambda.122-gls/d=100000,h2c=pornin-addendgf2_122-gls-lambdaper-element17.9 µs17.8 µs .. 18.1 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=10,h2c=pornin-addendgf2_122-gls-uper-element1.93 µs1.93 µs .. 1.93 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=100,h2c=pornin-addendgf2_122-gls-uper-element2.98 µs2.98 µs .. 2.99 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=1000,h2c=pornin-addendgf2_122-gls-uper-element4.33 µs4.33 µs .. 4.34 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=10000,h2c=pornin-addendgf2_122-gls-uper-element6.85 µs6.83 µs .. 6.86 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=100000,h2c=pornin-addendgf2_122-gls-uper-element18.9 µs18.9 µs .. 19.0 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=20,h2c=pornin-addendgf2_122-gls-uper-element2.29 µs2.28 µs .. 2.31 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=40,h2c=pornin-addendgf2_122-gls-uper-element2.55 µs2.55 µs .. 2.56 µsper elem
rateless encode and decode, per differencebinary-u.122-gls/d=50000,h2c=pornin-addendgf2_122-gls-uper-element13.1 µs13.1 µs .. 13.2 µsper elem
rateless encode and decode, per differencebinary-w.122-gls/d=10,h2c=pornin-addendgf2_122-gls-wper-element2.00 µs2.00 µs .. 2.00 µsper elem
rateless encode and decode, per differencebinary-w.122-gls/d=1000,h2c=pornin-addendgf2_122-gls-wper-element4.65 µs4.64 µs .. 4.65 µsper elem
rateless encode and decode, per differencebinary-w.122-gls/d=100000,h2c=pornin-addendgf2_122-gls-wper-element18.1 µs18.0 µs .. 18.1 µsper elem
rateless encode and decode, per differencebinary-lambda.122/d=10,h2c=pornin-addendgf2_122-lambdaper-element2.01 µs2.00 µs .. 2.01 µsper elem
rateless encode and decode, per differencebinary-lambda.122/d=1000,h2c=pornin-addendgf2_122-lambdaper-element4.64 µs4.63 µs .. 4.66 µsper elem
rateless encode and decode, per differencebinary-lambda.122/d=100000,h2c=pornin-addendgf2_122-lambdaper-element18.0 µs18.0 µs .. 18.1 µsper elem
rateless encode and decode, per differencebinary-u.122/d=10,h2c=pornin-addendgf2_122-uper-element1.93 µs1.93 µs .. 1.93 µsper elem
rateless encode and decode, per differencebinary-u.122/d=100,h2c=pornin-addendgf2_122-uper-element2.97 µs2.96 µs .. 2.98 µsper elem
rateless encode and decode, per differencebinary-u.122/d=1000,h2c=pornin-addendgf2_122-uper-element4.33 µs4.32 µs .. 4.35 µsper elem
rateless encode and decode, per differencebinary-u.122/d=10000,h2c=pornin-addendgf2_122-uper-element6.70 µs6.69 µs .. 6.71 µsper elem
rateless encode and decode, per differencebinary-u.122/d=100000,h2c=pornin-addendgf2_122-uper-element17.5 µs17.5 µs .. 17.6 µsper elem
rateless encode and decode, per differencebinary-u.122/d=20,h2c=pornin-addendgf2_122-uper-element2.26 µs2.25 µs .. 2.26 µsper elem
rateless encode and decode, per differencebinary-u.122/d=40,h2c=pornin-addendgf2_122-uper-element2.54 µs2.53 µs .. 2.55 µsper elem
rateless encode and decode, per differencebinary-u.122/d=50000,h2c=pornin-addendgf2_122-uper-element12.5 µs12.5 µs .. 12.5 µsper elem
rateless encode and decode, per differencebinary-w.122/d=10,h2c=pornin-addendgf2_122-wper-element2.02 µs2.00 µs .. 2.04 µsper elem
rateless encode and decode, per differencebinary-w.122/d=1000,h2c=pornin-addendgf2_122-wper-element4.63 µs4.62 µs .. 4.64 µsper elem
rateless encode and decode, per differencebinary-w.122/d=100000,h2c=pornin-addendgf2_122-wper-element17.8 µs17.8 µs .. 17.9 µsper elem
rateless encode and decode, per differencebinary.127/d=10,h2c=porningf2_127per-element1.65 µs1.65 µs .. 1.66 µsper elem
rateless encode and decode, per differencebinary.127/d=10,h2c=pornin,map=mcg64gf2_127per-element1.65 µs1.64 µs .. 1.65 µsper elem
rateless encode and decode, per differencebinary.127/d=100,h2c=pornin,map=mcg64gf2_127per-element2.65 µs2.65 µs .. 2.66 µsper elem
rateless encode and decode, per differencebinary.127/d=1000,h2c=porningf2_127per-element4.14 µs4.13 µs .. 4.14 µsper elem
rateless encode and decode, per differencebinary.127/d=1000,h2c=pornin,map=mcg64gf2_127per-element4.05 µs4.04 µs .. 4.07 µsper elem
rateless encode and decode, per differencebinary.127/d=10000,h2c=pornin,map=chacha8gf2_127per-element7.71 µs7.67 µs .. 7.77 µsper elem
rateless encode and decode, per differencebinary.127/d=10000,h2c=pornin,map=mcg64gf2_127per-element6.58 µs6.50 µs .. 6.69 µsper elem
rateless encode and decode, per differencebinary.127/d=100000,h2c=porningf2_127per-element19.7 µs19.7 µs .. 19.8 µsper elem
rateless encode and decode, per differencebinary.127/d=100000,h2c=pornin,map=chacha8gf2_127per-element23.9 µs23.9 µs .. 24.0 µsper elem
rateless encode and decode, per differencebinary.127/d=100000,h2c=pornin,map=mcg64gf2_127per-element16.3 µs16.2 µs .. 16.3 µsper elem
rateless encode and decode, per differencebinary.127/d=20,h2c=pornin,map=mcg64gf2_127per-element1.94 µs1.94 µs .. 1.94 µsper elem
rateless encode and decode, per differencebinary.127/d=40,h2c=pornin,map=mcg64gf2_127per-element2.22 µs2.22 µs .. 2.23 µsper elem
rateless encode and decode, per differencebinary.127/d=50000,h2c=pornin,map=mcg64gf2_127per-element12.1 µs12.0 µs .. 12.1 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=10,h2c=pornin-addendgf2_127-lambdaper-element1.57 µs1.57 µs .. 1.57 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=100,h2c=pornin-addendgf2_127-lambdaper-element2.63 µs2.62 µs .. 2.63 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=1000,h2c=pornin-addendgf2_127-lambdaper-element4.05 µs4.04 µs .. 4.06 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=10000,h2c=pornin-addendgf2_127-lambdaper-element6.54 µs6.51 µs .. 6.58 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=100000,h2c=pornin-addendgf2_127-lambdaper-element17.5 µs17.5 µs .. 17.6 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=20,h2c=pornin-addendgf2_127-lambdaper-element1.89 µs1.88 µs .. 1.89 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=40,h2c=pornin-addendgf2_127-lambdaper-element2.17 µs2.17 µs .. 2.18 µsper elem
rateless encode and decode, per differencebinary-lambda.127/d=50000,h2c=pornin-addendgf2_127-lambdaper-element12.5 µs12.4 µs .. 12.6 µsper elem
rateless encode and decode, per differencebinary-u.127/d=10,h2c=pornin-addendgf2_127-uper-element1.53 µs1.53 µs .. 1.53 µsper elem
rateless encode and decode, per differencebinary-u.127/d=100,h2c=pornin-addendgf2_127-uper-element2.47 µs2.46 µs .. 2.47 µsper elem
rateless encode and decode, per differencebinary-u.127/d=1000,h2c=pornin-addendgf2_127-uper-element3.84 µs3.81 µs .. 3.90 µsper elem
rateless encode and decode, per differencebinary-u.127/d=10000,h2c=pornin-addendgf2_127-uper-element6.21 µs6.20 µs .. 6.23 µsper elem
rateless encode and decode, per differencebinary-u.127/d=100000,h2c=pornin-addendgf2_127-uper-element17.1 µs17.0 µs .. 17.3 µsper elem
rateless encode and decode, per differencebinary-u.127/d=20,h2c=pornin-addendgf2_127-uper-element1.81 µs1.80 µs .. 1.81 µsper elem
rateless encode and decode, per differencebinary-u.127/d=40,h2c=pornin-addendgf2_127-uper-element2.07 µs2.07 µs .. 2.07 µsper elem
rateless encode and decode, per differencebinary-u.127/d=50000,h2c=pornin-addendgf2_127-uper-element11.9 µs11.9 µs .. 12.0 µsper elem
rateless encode and decode, per differencebinary-w.127/d=10,h2c=pornin-addendgf2_127-wper-element1.58 µs1.57 µs .. 1.58 µsper elem
rateless encode and decode, per differencebinary-w.127/d=100,h2c=pornin-addendgf2_127-wper-element2.62 µs2.62 µs .. 2.62 µsper elem
rateless encode and decode, per differencebinary-w.127/d=1000,h2c=pornin-addendgf2_127-wper-element4.05 µs4.05 µs .. 4.06 µsper elem
rateless encode and decode, per differencebinary-w.127/d=10000,h2c=pornin-addendgf2_127-wper-element6.50 µs6.49 µs .. 6.51 µsper elem
rateless encode and decode, per differencebinary-w.127/d=100000,h2c=pornin-addendgf2_127-wper-element17.3 µs17.3 µs .. 17.4 µsper elem
rateless encode and decode, per differencebinary-w.127/d=20,h2c=pornin-addendgf2_127-wper-element1.89 µs1.89 µs .. 1.90 µsper elem
rateless encode and decode, per differencebinary-w.127/d=40,h2c=pornin-addendgf2_127-wper-element2.18 µs2.17 µs .. 2.18 µsper elem
rateless encode and decode, per differencebinary-w.127/d=50000,h2c=pornin-addendgf2_127-wper-element12.3 µs12.3 µs .. 12.4 µsper elem
rateless encode and decode, per differenceedwards.107/d=1000,h2c=tiedwards107per-element9.04 µs9.02 µs .. 9.07 µsper elem
rateless encode and decode, per differenceedwards.127/d=1000,h2c=tiedwards127per-element9.89 µs9.87 µs .. 9.91 µsper elem
rateless encode and decode, per differenceedwards.61x2/d=1000,h2c=tiedwards61x2per-element6.93 µs6.92 µs .. 6.95 µsper elem
rateless encode and decode, per differencetwisted.goldilocks2/d=1000,h2c=titwisted-goldilocks2per-element11.7 µs11.7 µs .. 11.7 µsper elem
rateless encode and decode, per differencetwisted.128/d=1000,h2c=titwisted128per-element11.2 µs11.1 µs .. 11.2 µsper elem
rateless encode and decode, per differencetwisted.61x2/d=1000,h2c=titwisted61x2per-element6.15 µs6.13 µs .. 6.18 µsper elem
rateless encode and decode, per differencetwisted.64x2/d=1000,h2c=titwisted64x2per-element7.46 µs7.44 µs .. 7.48 µsper elem
rateless encode and decode, per differenceweier.107/d=1000,h2c=tiweier107per-element8.14 µs8.12 µs .. 8.16 µsper elem
rateless encode and decode, per differenceweier-jacobian.107/d=1000,h2c=tiweier107-jacobianper-element7.72 µs7.70 µs .. 7.75 µsper elem
rateless encode and decode, per differenceweier.127/d=1000,h2c=tiweier127per-element9.39 µs9.37 µs .. 9.42 µsper elem
rateless encode and decode, per differenceweier-jacobian.127/d=1000,h2c=tiweier127-jacobianper-element8.62 µs8.61 µs .. 8.64 µsper elem
rateless encode and decode, per differenceweier.61x2/d=1000,h2c=tiweier61x2per-element7.42 µs7.41 µs .. 7.43 µsper elem
rateless encode and decode, per differenceweier-jacobian.61x2/d=1000,h2c=tiweier61x2-jacobianper-element7.21 µs7.20 µs .. 7.22 µsper elem
rateless encode and decode, per differenceristretto255/d=10ristretto255per-element17.8 µs17.8 µs .. 17.9 µsper elem
rateless encode and decode, per differenceristretto255/d=10,map=mcg64ristretto255per-element17.9 µs17.8 µs .. 17.9 µsper elem
rateless encode and decode, per differenceristretto255/d=100ristretto255per-element24.3 µs24.2 µs .. 24.4 µsper elem
rateless encode and decode, per differenceristretto255/d=100,map=mcg64ristretto255per-element24.3 µs24.2 µs .. 24.4 µsper elem
rateless encode and decode, per differenceristretto255/d=1000ristretto255per-element28.8 µs28.7 µs .. 28.9 µsper elem
rateless encode and decode, per differenceristretto255/d=1000,map=mcg64ristretto255per-element28.7 µs28.6 µs .. 28.8 µsper elem
rateless encode and decode, per differenceristretto255/d=10000ristretto255per-element33.9 µs33.8 µs .. 34.0 µsper elem
rateless encode and decode, per differenceristretto255/d=10000,map=chacha8ristretto255per-element36.3 µs36.1 µs .. 36.5 µsper elem
rateless encode and decode, per differenceristretto255/d=10000,map=mcg64ristretto255per-element34.2 µs33.6 µs .. 35.1 µsper elem
rateless encode and decode, per differenceristretto255/d=100000ristretto255per-element48.0 µs47.9 µs .. 48.1 µsper elem
rateless encode and decode, per differenceristretto255/d=100000,map=chacha8ristretto255per-element54.1 µs54.0 µs .. 54.3 µsper elem
rateless encode and decode, per differenceristretto255/d=100000,map=mcg64ristretto255per-element47.0 µs46.7 µs .. 47.4 µsper elem
rateless encode and decode, per differenceristretto255/d=20ristretto255per-element20.3 µs20.2 µs .. 20.3 µsper elem
rateless encode and decode, per differenceristretto255/d=20,map=mcg64ristretto255per-element20.2 µs20.1 µs .. 20.3 µsper elem
rateless encode and decode, per differenceristretto255/d=40ristretto255per-element22.2 µs22.2 µs .. 22.3 µsper elem
rateless encode and decode, per differenceristretto255/d=40,map=mcg64ristretto255per-element22.2 µs22.1 µs .. 22.3 µsper elem
rateless encode and decode, per differenceristretto255/d=50000ristretto255per-element43.3 µs43.2 µs .. 43.5 µsper elem
rateless encode and decode, per differenceristretto255/d=50000,map=mcg64ristretto255per-element42.2 µs42.1 µs .. 42.4 µsper elem
mapping, per indexchacha8/nextmappingper-element10.5 ns10.5 ns .. 10.5 nsper elem
mapping, per indexmcg64/nextmappingper-element4.09 ns4.08 ns .. 4.10 nsper elem
mapping, per indexsha256-ctr/nextmappingper-element22.6 ns22.5 ns .. 22.6 nsper elem
mapping, per indexxoshiro256pp/nextmappingper-element4.43 ns4.42 ns .. 4.43 nsper elem
mapping, per itemchacha8/item,m=12150mappingper-element216 ns215 ns .. 216 nsper elem
mapping, per itemchacha8/item,m=1350mappingper-element180 ns180 ns .. 181 nsper elem
mapping, per itemchacha8/item,m=150mappingper-element141 ns141 ns .. 141 nsper elem
mapping, per itemchacha8/item,m=20mappingper-element105 ns104 ns .. 105 nsper elem
mapping, per itemchacha8/item,m=5mappingper-element81.1 ns80.8 ns .. 81.4 nsper elem
mapping, per itemmcg64/item,m=12150mappingper-element157 ns157 ns .. 158 nsper elem
mapping, per itemmcg64/item,m=1350mappingper-element122 ns122 ns .. 122 nsper elem
mapping, per itemmcg64/item,m=150mappingper-element83.8 ns83.6 ns .. 83.9 nsper elem
mapping, per itemmcg64/item,m=20mappingper-element46.1 ns46.0 ns .. 46.2 nsper elem
mapping, per itemmcg64/item,m=5mappingper-element21.4 ns21.3 ns .. 21.4 nsper elem
mapping, per itemsha256-ctr/item,m=12150mappingper-element430 ns429 ns .. 431 nsper elem
mapping, per itemsha256-ctr/item,m=1350mappingper-element334 ns334 ns .. 335 nsper elem
mapping, per itemsha256-ctr/item,m=150mappingper-element237 ns236 ns .. 237 nsper elem
mapping, per itemsha256-ctr/item,m=20mappingper-element148 ns147 ns .. 148 nsper elem
mapping, per itemsha256-ctr/item,m=5mappingper-element89.9 ns89.7 ns .. 90.1 nsper elem
mapping, per itemxoshiro256pp/item,m=12150mappingper-element159 ns158 ns .. 159 nsper elem
mapping, per itemxoshiro256pp/item,m=1350mappingper-element124 ns123 ns .. 124 nsper elem
mapping, per itemxoshiro256pp/item,m=150mappingper-element86.0 ns85.9 ns .. 86.1 nsper elem
mapping, per itemxoshiro256pp/item,m=20mappingper-element49.0 ns49.0 ns .. 49.1 nsper elem
mapping, per itemxoshiro256pp/item,m=5mappingper-element26.4 ns26.4 ns .. 26.5 nsper elem
map digest of an IDprojection-fp127/digest of idmappingper-element13.6 ns13.6 ns .. 13.7 nsper elem
map digest of an IDprojection-fp130/digest of idmappingper-element26.0 ns26.0 ns .. 26.1 nsper elem
map digest of an IDprojection-gf2_127/digest of idmappingper-element9.67 ns9.65 ns .. 9.69 nsper elem
map digest of an IDsalted-sha256/digest of idmappingper-element51.4 ns51.3 ns .. 51.5 nsper elem
per-salt keysprojection-fp127/keysmappingper-element404 ns403 ns .. 406 nsper elem
per-salt keysprojection-fp130/keysmappingper-element406 ns406 ns .. 407 nsper elem
per-salt keysprojection-gf2_127/keysmappingper-element375 ns375 ns .. 376 nsper elem
per-salt keyssalted-sha256/keysmappingper-element127 ns127 ns .. 127 nsper elem
item IDsha256/idxorper-element50.2 ns50.0 ns .. 50.3 nsper elem
map digestsalted-sha256/digestmappingper-element51.8 ns51.7 ns .. 51.9 nsper elem

digest

Figure

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

11 benchmarks
operationbenchmarkfamilymodetime95% CIunit
digestxor-sha256xorper-element55.1 ns54.3 ns .. 55.9 nsper elem
digestgf2_109/batchgf2_109batch147 ns146 ns .. 147 nsper elem
digestgf2_122/batchgf2_122batch138 ns136 ns .. 139 nsper elem
digestgf2_122-gls/batchgf2_122-glsbatch136 ns135 ns .. 136 nsper elem
digestgf2_127/batchgf2_127batch127 ns127 ns .. 128 nsper elem
digestedwards107/batchedwards107batch961 ns958 ns .. 964 nsper elem
digestedwards127/batchedwards127batch1.24 µs1.23 µs .. 1.24 µsper elem
digestweier107/batchweier107batch937 ns933 ns .. 941 nsper elem
digestweier127/batchweier127batch1.21 µs1.21 µs .. 1.21 µsper elem
digestristretto255/streamingristretto255streaming6.18 µs6.16 µs .. 6.20 µsper elem
digestsecp256k1/try-and-increment + combine_keyssecp256k1batch6.34 µs6.32 µs .. 6.36 µsper elem

curve generation

Figure

Curve generation: a dot per seed for each family, a panel per stage, on log scales.Curve generation: a dot per seed for each family, a panel per stage, on log scales.

85 benchmarks
operationbenchmarkfamilymodetime95% CIunit
accept certificategf2_109/0gf2_109total74.4 µs74.2 µs .. 74.5 µsper iter
accept certificategf2_122/0gf2_122total70.1 µs69.9 µs .. 70.2 µsper iter
accept certificategf2_122-gls/0gf2_122-glstotal78.3 µs78.0 µs .. 78.6 µsper iter
accept certificategf2_127/0gf2_127total69.9 µs69.8 µs .. 70.1 µsper iter
accept certificateedwards107/0edwards107total78.4 µs78.1 µs .. 78.7 µsper iter
accept certificateedwards127/0edwards127total78.3 µs78.0 µs .. 78.7 µsper iter
accept certificateedwards61x2/0edwards61x2total82.6 µs82.3 µs .. 83.1 µsper iter
accept certificatetwisted-goldilocks2/0twisted-goldilocks2total83.5 µs82.9 µs .. 84.1 µsper iter
accept certificatetwisted128/0twisted128total87.5 µs87.3 µs .. 88.0 µsper iter
accept certificatetwisted61x2/0twisted61x2total80.7 µs80.5 µs .. 81.0 µsper iter
accept certificatetwisted64x2/0twisted64x2total86.9 µs86.4 µs .. 87.4 µsper iter
accept certificateweier107/0weier107total82.4 µs82.1 µs .. 82.8 µsper iter
accept certificateweier127/0weier127total91.2 µs91.0 µs .. 91.4 µsper iter
accept certificateweier61x2/0weier61x2total87.0 µs86.8 µs .. 87.2 µsper iter
verify certificategf2_109/198 rejections/0gf2_109total258 µs258 µs .. 259 µsper iter
verify certificategf2_122/4 rejections/0gf2_122total73.5 µs73.2 µs .. 73.9 µsper iter
verify certificategf2_122-gls/60 rejections/0gf2_122-glstotal147 µs147 µs .. 147 µsper iter
verify certificategf2_127/30 rejections/0gf2_127total84.5 µs84.3 µs .. 84.9 µsper iter
verify certificateedwards107/28 rejections/0edwards107total183 µs183 µs .. 184 µsper iter
verify certificateedwards127/56 rejections/0edwards127total307 µs299 µs .. 317 µsper iter
verify certificateedwards61x2/118 rejections/0edwards61x2total374 µs372 µs .. 376 µsper iter
verify certificatetwisted-goldilocks2/32 rejections/0twisted-goldilocks2total221 µs221 µs .. 222 µsper iter
verify certificatetwisted128/4 rejections/0twisted128total98.3 µs98.0 µs .. 98.7 µsper iter
verify certificatetwisted61x2/344 rejections/0twisted61x2total696 µs696 µs .. 697 µsper iter
verify certificatetwisted64x2/36 rejections/0twisted64x2total177 µs176 µs .. 177 µsper iter
verify certificateweier107/519 rejections/0weier107total475 µs474 µs .. 476 µsper iter
verify certificateweier127/125 rejections/0weier127total203 µs202 µs .. 205 µsper iter
verify certificateweier61x2/123 rejections/0weier61x2total193 µs192 µs .. 193 µsper iter
embedding-degree boundgf2_109/0gf2_109total43.6 µs43.4 µs .. 43.8 µsper iter
embedding-degree boundgf2_122/0gf2_122total43.2 µs42.9 µs .. 43.6 µsper iter
embedding-degree boundgf2_122-gls/0gf2_122-glstotal43.8 µs43.2 µs .. 44.2 µsper iter
embedding-degree boundgf2_127/0gf2_127total43.3 µs43.0 µs .. 43.6 µsper iter
embedding-degree boundedwards107/0edwards107total43.1 µs42.4 µs .. 43.5 µsper iter
embedding-degree boundedwards127/0edwards127total43.3 µs43.2 µs .. 43.4 µsper iter
embedding-degree boundedwards61x2/0edwards61x2total43.4 µs43.0 µs .. 44.0 µsper iter
embedding-degree boundtwisted-goldilocks2/0twisted-goldilocks2total42.1 µs42.0 µs .. 42.2 µsper iter
embedding-degree boundtwisted128/0twisted128total44.3 µs44.0 µs .. 44.5 µsper iter
embedding-degree boundtwisted61x2/0twisted61x2total43.7 µs43.4 µs .. 44.3 µsper iter
embedding-degree boundtwisted64x2/0twisted64x2total43.3 µs43.2 µs .. 43.4 µsper iter
embedding-degree boundweier107/0weier107total43.6 µs43.3 µs .. 43.7 µsper iter
embedding-degree boundweier127/0weier127total44.4 µs43.7 µs .. 45.1 µsper iter
embedding-degree boundweier61x2/0weier61x2total44.2 µs43.9 µs .. 44.4 µsper iter
find (Rust: AGM + sieve)gf2_127 agm+sieve/index 114/1gf2_127total24.8 ms24.7 ms .. 25.0 msper iter
find (Rust: AGM + sieve)gf2_127 agm+sieve/index 14/3gf2_127total2.49 ms2.49 ms .. 2.50 msper iter
find (Rust: AGM + sieve)gf2_127 agm+sieve/index 30/0gf2_127total4.92 ms4.90 ms .. 4.95 msper iter
find (Rust: AGM + sieve)gf2_127 agm+sieve/index 54/2gf2_127total12.2 ms12.2 ms .. 12.3 msper iter
certify (Rust: AGM + sieve + order witnesses)gf2_127 agm+sieve/index 114/1gf2_127total25.3 ms25.1 ms .. 25.4 msper iter
certify (Rust: AGM + sieve + order witnesses)gf2_127 agm+sieve/index 14/3gf2_127total2.63 ms2.62 ms .. 2.64 msper iter
certify (Rust: AGM + sieve + order witnesses)gf2_127 agm+sieve/index 30/0gf2_127total5.08 ms5.07 ms .. 5.10 msper iter
certify (Rust: AGM + sieve + order witnesses)gf2_127 agm+sieve/index 54/2gf2_127total12.4 ms12.4 ms .. 12.5 msper iter
point count (PARI)gf2_127gf2_127total3.53 ms3.51 ms .. 3.56 msper iter
point count (PARI)edwards127edwards127total77.0 ms76.9 ms .. 77.1 msper iter
point count (PARI)edwards61x2edwards61x2total64.1 ms64.0 ms .. 64.2 msper iter
point count (PARI)twisted-goldilocks2twisted-goldilocks2total79.1 ms78.8 ms .. 79.5 msper iter
point count (PARI)twisted61x2twisted61x2total70.4 ms70.2 ms .. 70.6 msper iter
point count (PARI)twisted64x2twisted64x2total84.7 ms84.5 ms .. 84.9 msper iter
point count (PARI)weier127weier127total87.9 ms87.7 ms .. 88.2 msper iter
point count (PARI)weier61x2weier61x2total61.6 ms61.5 ms .. 61.7 msper iter
point count (Rust AGM)ordergf2_127total484 µs482 µs .. 486 µsper iter
AGM stepstablesgf2_127total1.76 ms1.75 ms .. 1.77 msper iter
AGM stepstracegf2_127total491 µs489 µs .. 493 µsper iter
Z_q ring opmulgf2_127total2.45 µs2.44 µs .. 2.46 µsper iter
Z_q ring opsigmagf2_127total2.71 µs2.70 µs .. 2.73 µsper iter
Z_q ring opsigma_invgf2_127total2.50 µs2.49 µs .. 2.51 µsper iter
Z_q ring opsquaregf2_127total1.48 µs1.47 µs .. 1.48 µsper iter
sieve, one lgf2_127/11gf2_127total365 µs364 µs .. 366 µsper iter
sieve, one lgf2_127/13gf2_127total701 µs700 µs .. 702 µsper iter
sieve, one lgf2_127/3gf2_127total3.78 µs3.77 µs .. 3.79 µsper iter
sieve, one lgf2_127/5gf2_127total18.1 µs18.0 µs .. 18.2 µsper iter
sieve, one lgf2_127/7gf2_127total63.9 µs63.7 µs .. 64.0 µsper iter
sieve, one ledwards127/11edwards127total2.47 ms2.47 ms .. 2.48 msper iter
sieve, one ledwards127/13edwards127total4.79 ms4.78 ms .. 4.80 msper iter
sieve, one ledwards127/3edwards127total15.4 µs15.3 µs .. 15.4 µsper iter
sieve, one ledwards127/5edwards127total109 µs108 µs .. 109 µsper iter
sieve, one ledwards127/7edwards127total413 µs412 µs .. 414 µsper iter
sieve, one ledwards127/8edwards127total1.13 µs1.13 µs .. 1.14 µsper iter
sieve, one lweier127/11weier127total2.47 ms2.47 ms .. 2.48 msper iter
sieve, one lweier127/13weier127total4.79 ms4.78 ms .. 4.79 msper iter
sieve, one lweier127/2weier127total9.75 µs9.73 µs .. 9.76 µsper iter
sieve, one lweier127/3weier127total15.3 µs15.2 µs .. 15.3 µsper iter
sieve, one lweier127/5weier127total109 µs109 µs .. 109 µsper iter
sieve, one lweier127/7weier127total411 µs410 µs .. 411 µsper iter
sieve, per candidategf2_127/7gf2_127per-element42.8 µs42.8 µs .. 42.9 µsper elem
sieve, per candidateedwards127/13edwards127per-element1.70 ms1.70 ms .. 1.70 msper elem
sieve, per candidateweier127/13weier127per-element1.05 ms1.05 ms .. 1.05 msper 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
xorone at a timesha256 (XOR baseline)53.4 nsxor-sha256/xor 32B, 1 accumulator0.26 ns54.1 ns54.8 ns55.7 ns56.9 ns58.0 ns
gf2_109one at a timegf2_109/pornin map x1675 nsbinary.109/mode=throughput20.4 ns734 ns783 ns862 ns951 ns1.04 µs
gf2_109batchedgf2_109/pornin map x1, batched114 nsbinary.109/mode=throughput20.4 ns173 ns222 ns301 ns390 ns480 ns
gf2_109-lambdaone at a timegf2_109-lambda/pornin map x1 to (x, λ)655 nsbinary-lambda.109/mode=throughput18.9 ns710 ns755 ns829 ns911 ns994 ns
gf2_109-lambdabatchedgf2_109-lambda/pornin map x1 to (x, λ), batched105 nsbinary-lambda.109/mode=throughput18.9 ns159 ns205 ns278 ns361 ns444 ns
gf2_109-uone at a timegf2_109-u/pornin map x1 to (u, v)657 nsbinary-u.109/mode=throughput13.5 ns697 ns729 ns782 ns841 ns900 ns
gf2_109-ubatchedgf2_109-u/pornin map x1 to (u, v), batched110 nsbinary-u.109/mode=throughput13.5 ns149 ns181 ns234 ns293 ns352 ns
gf2_109-wone at a timegf2_109-w/pornin map x1 to (x, λ)652 nsbinary-w.109/mode=throughput18.9 ns707 ns752 ns826 ns909 ns992 ns
gf2_109-wbatchedgf2_109-w/pornin map x1 to (x, λ), batched104 nsbinary-w.109/mode=throughput18.9 ns159 ns204 ns278 ns361 ns444 ns
gf2_122one at a timegf2_122/pornin map x1392 nsbinary.122/mode=throughput19.9 ns449 ns497 ns575 ns662 ns750 ns
gf2_122batchedgf2_122/pornin map x1, batched103 nsbinary.122/mode=throughput19.9 ns161 ns208 ns286 ns373 ns461 ns
gf2_122-glsone at a timegf2_122-gls/pornin map x1394 nsbinary.122-gls/mode=throughput19.3 ns450 ns497 ns572 ns657 ns741 ns
gf2_122-glsbatchedgf2_122-gls/pornin map x1, batched101 nsbinary.122-gls/mode=throughput19.3 ns157 ns204 ns279 ns363 ns448 ns
gf2_122-gls-lambdaone at a timegf2_122-gls-lambda/pornin map x1 to (x, λ)385 nsbinary-lambda.122-gls/mode=throughput20.3 ns443 ns492 ns571 ns660 ns749 ns
gf2_122-gls-lambdabatchedgf2_122-gls-lambda/pornin map x1 to (x, λ), batched95.0 nsbinary-lambda.122-gls/mode=throughput20.3 ns154 ns202 ns281 ns370 ns459 ns
gf2_122-gls-uone at a timegf2_122-gls-u/pornin map x1 to (u, v)390 nsbinary-u.122-gls/mode=throughput13.7 ns429 ns462 ns516 ns576 ns636 ns
gf2_122-gls-ubatchedgf2_122-gls-u/pornin map x1 to (u, v), batched97.6 nsbinary-u.122-gls/mode=throughput13.7 ns137 ns170 ns224 ns284 ns344 ns
gf2_122-gls-wone at a timegf2_122-gls-w/pornin map x1 to (x, λ)385 nsbinary-w.122-gls/mode=throughput20.3 ns444 ns492 ns572 ns660 ns750 ns
gf2_122-gls-wbatchedgf2_122-gls-w/pornin map x1 to (x, λ), batched94.6 nsbinary-w.122-gls/mode=throughput20.3 ns154 ns202 ns281 ns370 ns459 ns
gf2_122-lambdaone at a timegf2_122-lambda/pornin map x1 to (x, λ)381 nsbinary-lambda.122/mode=throughput20.2 ns440 ns488 ns568 ns656 ns745 ns
gf2_122-lambdabatchedgf2_122-lambda/pornin map x1 to (x, λ), batched95.0 nsbinary-lambda.122/mode=throughput20.2 ns154 ns202 ns281 ns370 ns459 ns
gf2_122-uone at a timegf2_122-u/pornin map x1 to (u, v)391 nsbinary-u.122/mode=throughput14.3 ns432 ns467 ns523 ns585 ns648 ns
gf2_122-ubatchedgf2_122-u/pornin map x1 to (u, v), batched99.3 nsbinary-u.122/mode=throughput14.3 ns141 ns175 ns231 ns294 ns357 ns
gf2_122-wone at a timegf2_122-w/pornin map x1 to (x, λ)381 nsbinary-w.122/mode=throughput20.5 ns440 ns489 ns570 ns659 ns749 ns
gf2_122-wbatchedgf2_122-w/pornin map x1 to (x, λ), batched95.2 nsbinary-w.122/mode=throughput20.5 ns155 ns204 ns284 ns374 ns464 ns
gf2_127one at a timegf2_127/pornin map x1256 nsbinary.127/mode=throughput19.5 ns313 ns360 ns436 ns521 ns607 ns
gf2_127batchedgf2_127/pornin map x1, batched103 nsbinary.127/mode=throughput19.5 ns159 ns206 ns282 ns368 ns454 ns
gf2_127-lambdaone at a timegf2_127-lambda/pornin map x1 to (x, λ)245 nsbinary-lambda.127/mode=throughput17.6 ns296 ns338 ns407 ns484 ns562 ns
gf2_127-lambdabatchedgf2_127-lambda/pornin map x1 to (x, λ), batched92.7 nsbinary-lambda.127/mode=throughput17.6 ns144 ns186 ns255 ns332 ns409 ns
gf2_127-uone at a timegf2_127-u/pornin map x1 to (u, v)249 nsbinary-u.127/mode=throughput13.2 ns287 ns319 ns371 ns428 ns486 ns
gf2_127-ubatchedgf2_127-u/pornin map x1 to (u, v), batched98.0 nsbinary-u.127/mode=throughput13.2 ns136 ns168 ns219 ns277 ns335 ns
gf2_127-wone at a timegf2_127-w/pornin map x1 to (x, λ)244 nsbinary-w.127/mode=throughput17.7 ns295 ns337 ns406 ns484 ns562 ns
gf2_127-wbatchedgf2_127-w/pornin map x1 to (x, λ), batched92.8 nsbinary-w.127/mode=throughput17.7 ns144 ns186 ns255 ns333 ns411 ns
edwards107one at a timeedwards.107/mode=indep919 nsedwards.107/mode=throughput27.6 ns999 ns1.06 µs1.17 µs1.29 µs1.41 µs
edwards107batchededwards.107/mode=batch,n=1024916 nsedwards.107/mode=throughput27.6 ns996 ns1.06 µs1.17 µs1.29 µs1.41 µs
edwards127one at a timeedwards.127/mode=indep1.22 µsedwards.127/mode=throughput27.5 ns1.30 µs1.37 µs1.48 µs1.60 µs1.72 µs
edwards127batchededwards.127/mode=batch,n=10241.24 µsedwards.127/mode=throughput27.5 ns1.32 µs1.38 µs1.49 µs1.61 µs1.73 µs
edwards61x2one at a timeedwards.61x2/mode=indep707 nsedwards.61x2/mode=throughput25.8 ns781 ns843 ns944 ns1.06 µs1.17 µs
edwards61x2batchededwards.61x2/mode=batch,n=1024706 nsedwards.61x2/mode=throughput25.8 ns781 ns842 ns943 ns1.06 µs1.17 µs
twisted-goldilocks2one at a timetwisted.goldilocks2/mode=indep2.21 µstwisted.goldilocks2/mode=throughput28.7 ns2.30 µs2.37 µs2.48 µs2.60 µs2.73 µs
twisted-goldilocks2batchedtwisted.goldilocks2/mode=batch,n=10242.24 µstwisted.goldilocks2/mode=throughput28.7 ns2.32 µs2.39 µs2.50 µs2.63 µs2.75 µs
twisted128one at a timetwisted.128/mode=indep1.97 µstwisted.128/mode=throughput31.1 ns2.06 µs2.13 µs2.25 µs2.39 µs2.53 µs
twisted128batchedtwisted.128/mode=batch,n=10241.96 µstwisted.128/mode=throughput31.1 ns2.05 µs2.12 µs2.25 µs2.38 µs2.52 µs
twisted61x2one at a timetwisted.61x2/mode=indep706 nstwisted.61x2/mode=throughput24.9 ns778 ns838 ns935 ns1.04 µs1.15 µs
twisted61x2batchedtwisted.61x2/mode=batch,n=1024711 nstwisted.61x2/mode=throughput24.9 ns783 ns842 ns940 ns1.05 µs1.16 µs
twisted64x2one at a timetwisted.64x2/mode=indep1.00 µstwisted.64x2/mode=throughput33.3 ns1.10 µs1.18 µs1.31 µs1.45 µs1.60 µs
twisted64x2batchedtwisted.64x2/mode=batch,n=10241.00 µstwisted.64x2/mode=throughput33.3 ns1.10 µs1.18 µs1.31 µs1.46 µs1.60 µs
weier107one at a timeweier.107/mode=indep892 nsweier.107/mode=throughput48.6 ns1.03 µs1.15 µs1.34 µs1.55 µs1.76 µs
weier107batchedweier.107/mode=batch,n=1024901 nsweier.107/mode=throughput48.6 ns1.04 µs1.16 µs1.35 µs1.56 µs1.77 µs
weier107-jacobianone at a timeweier-jacobian.107/mode=indep886 nsweier-jacobian.107/mode=throughput44.1 ns1.01 µs1.12 µs1.29 µs1.49 µs1.68 µs
weier107-jacobianbatchedweier-jacobian.107/mode=batch,n=1024893 nsweier-jacobian.107/mode=throughput44.1 ns1.02 µs1.13 µs1.30 µs1.49 µs1.69 µs
weier127one at a timeweier.127/mode=indep1.16 µsweier.127/mode=throughput58.7 ns1.33 µs1.47 µs1.70 µs1.96 µs2.22 µs
weier127batchedweier.127/mode=batch,n=10241.17 µsweier.127/mode=throughput58.7 ns1.34 µs1.48 µs1.71 µs1.96 µs2.22 µs
weier127-jacobianone at a timeweier-jacobian.127/mode=indep1.15 µsweier-jacobian.127/mode=throughput48.1 ns1.29 µs1.41 µs1.60 µs1.81 µs2.02 µs
weier127-jacobianbatchedweier-jacobian.127/mode=batch,n=10241.16 µsweier-jacobian.127/mode=throughput48.1 ns1.30 µs1.41 µs1.60 µs1.81 µs2.02 µs
weier61x2one at a timeweier.61x2/mode=indep696 nsweier.61x2/mode=throughput50.6 ns842 ns963 ns1.16 µs1.38 µs1.60 µs
weier61x2batchedweier.61x2/mode=batch,n=1024698 nsweier.61x2/mode=throughput50.6 ns844 ns965 ns1.16 µs1.38 µs1.61 µs
weier61x2-jacobianone at a timeweier-jacobian.61x2/mode=indep702 nsweier-jacobian.61x2/mode=throughput50.2 ns847 ns967 ns1.16 µs1.38 µs1.60 µs
weier61x2-jacobianbatchedweier-jacobian.61x2/mode=batch,n=1024698 nsweier-jacobian.61x2/mode=throughput50.2 ns844 ns964 ns1.16 µs1.38 µs1.60 µs
ristretto255one at a timeristretto255/hash_from_bytes<Sha512>6.03 µsristretto255/+=, 8 accumulators116 ns6.37 µs6.65 µs7.10 µs7.60 µs8.11 µs

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

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

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

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

Families compared

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

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

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

Machine

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

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

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

Group benchmark plan

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

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

RIBLT benchmark plan

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

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

Insertion

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

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

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

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

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

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

Batching

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

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

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

Time per element against batch size.

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

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

Costs by lifetime

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

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

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

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

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

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

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

Group operations

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

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

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

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

Field operations

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

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

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

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

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

Coverage

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

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

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

All benchmarks

Every observation: a figure and a table per layer.

field

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

group ops

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

hash to curve

Figure

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

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

comparison maps

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

Figure

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

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

RIBLT workload

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

Figure

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

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

digest

Figure

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

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

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

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

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

Annotated literature

One entry per key in references.bib, stating why the work bears on the question this repository asks: how efficient an ECMH checksum for RIBLT cells can be made when the curve is derived from a short-lived public salt (or a shared secret), with 48–64-bit collision resistance and 16-byte identifiers. Within a section, entries are ordered by role: foundational results, attacks and bounds, methods used here, alternatives considered. The chapters cite works by key; in the book, each entry is headed by its citation as formatted from the bibliography, and each key cited links to its entry.

The entries keep four distinctions apart: an encoding, a hash indifferentiable from a random oracle, and a weak encoding with a collision-resistance reduction; a field primitive, a curve map, and a prepared accumulator operand; fixed-time and variable-time implementation; and setup reusable per field against setup per epoch. The module boundaries and the benchmark rows follow the same distinctions.

Curve generation, point counting, Weil descent and discrete-logarithm security

Generic discrete-logarithm bounds and attacks

  • [shoup-1997] V. Shoup. Lower Bounds for Discrete Logarithms and Related Problems. Advances in Cryptology – EUROCRYPT ’97, LNCS 1233, pp. 256–266, 1997. https://doi.org/10.1007/3-540-69053-0_18

    Any generic-group algorithm needs group operations to compute discrete logarithms in a group of prime order . The reference work factor for an -bit group is therefore tight for generic attacks, and every attack below it must use structure of the field, the curve or the map.

  • [pollard-1978] J. M. Pollard. Monte Carlo Methods for Index Computation (mod p). Mathematics of Computation 32(143), pp. 918–924, 1978. https://doi.org/10.1090/S0025-5718-1978-0491431-9

    The rho method: expected group operations and constant memory. The reference attack behind every “rho” figure in the report.

  • [van-oorschot-wiener-1999] P. C. van Oorschot, M. J. Wiener. Parallel Collision Search with Cryptanalytic Applications. Journal of Cryptology 12(1), pp. 1–28, 1999. https://doi.org/10.1007/PL00003816

    Parallel collision search with distinguished points: a linear speedup in the number of processors with negligible communication. It makes the generic cost a machine-time quantity, which is how the 48–64-bit target is to be read.

  • [wiener-zuccherato-1998] M. J. Wiener, R. J. Zuccherato. Faster Attacks on Elliptic Curve Cryptosystems. Selected Areas in Cryptography – SAC ’98, LNCS 1556, pp. 190–200, 1999. https://doi.org/10.1007/3-540-48892-8_15
    [duursma-gaudry-morain-1999] I. Duursma, P. Gaudry, F. Morain. Speeding up the Discrete Log Computation on Curves with Automorphisms. Advances in Cryptology – ASIACRYPT ’99, LNCS 1716, pp. 103–121, 1999. https://doi.org/10.1007/978-3-540-48000-6_10

    Rho runs faster with the negation map and faster on curves with an automorphism group of order (Koblitz curves, curves with efficiently computable endomorphisms). The report divides the reference work factor by these factors where they apply: by for every family, and by a further for the GLS family over , whose endomorphism group has order 4.

  • [bernstein-lange-schwabe-2011] D. J. Bernstein, T. Lange, P. Schwabe. On the Correct Use of the Negation Map in the Pollard rho Method. Public Key Cryptography – PKC 2011, LNCS 6571, pp. 128–146. https://doi.org/10.1007/978-3-642-19379-8_8

    How the negation map is used in practice (fruitless cycles and their cost); the source of the practical constant in the rho figures.

  • [bernstein-lange-2012] D. J. Bernstein, T. Lange. Computing Small Discrete Logarithms Faster. Progress in Cryptology – INDOCRYPT 2012, LNCS 7668, pp. 317–338. https://doi.org/10.1007/978-3-642-34931-7_19
    [bernstein-lange-2013] D. J. Bernstein, T. Lange. Non-uniform Cracks in the Concrete: The Power of Free Precomputation. Advances in Cryptology – ASIACRYPT 2013, Part II, LNCS 8270, pp. 321–340. https://doi.org/10.1007/978-3-642-42045-0_17

    With a precomputed table of size about , each further discrete logarithm in a group of size costs about operations. A fixed curve would let an attacker amortize this across epochs. Deriving the curve from the salt prevents direct reuse of curve-specific tables; field-level arithmetic and work on the candidate space remain reusable. These two papers motivate a curve per namespace.

  • [corrigan-gibbs-kogan-2018] H. Corrigan-Gibbs, D. Kogan. The Discrete-Logarithm Problem with Preprocessing. Advances in Cryptology – EUROCRYPT 2018, Part II, LNCS 10821, pp. 415–447. https://doi.org/10.1007/978-3-319-78375-8_14

    Lower bound for generic discrete-logarithm algorithms with bits of advice and online queries. It shows the Bernstein–Lange tradeoff is optimal and lets the report state exactly what a persistent curve would concede.

  • [menezes-okamoto-vanstone-1993] A. J. Menezes, T. Okamoto, S. A. Vanstone. Reducing Elliptic Curve Logarithms to Logarithms in a Finite Field. IEEE Transactions on Information Theory 39(5), pp. 1639–1646, 1993. https://doi.org/10.1109/18.259647
    [frey-rueck-1994] G. Frey, H.-G. Rück. A Remark Concerning m-Divisibility and the Discrete Logarithm in the Divisor Class Group of Curves. Mathematics of Computation 62(206), pp. 865–874, 1994. https://doi.org/10.1090/S0025-5718-1994-1218343-6

    The pairing reductions that move the discrete logarithm into when divides . They are why every certificate requires an embedding degree above (EMBEDDING_MIN in src/curvegen/number.rs).

  • [smart-1999] N. P. Smart. The Discrete Logarithm Problem on Elliptic Curves of Trace One. Journal of Cryptology 12(3), pp. 193–196, 1999. https://doi.org/10.1007/s001459900052

    Curves with have a polynomial-time discrete logarithm. The Weierstrass policy excludes ; the binary and cofactor families cannot be anomalous. One clause in the policy documentation.

  • [bos-et-al-2012] J. W. Bos, M. E. Kaihara, T. Kleinjung, A. K. Lenstra, P. L. Montgomery. Solving a 112-bit Prime Elliptic Curve Discrete Logarithm Problem on Game Consoles Using Sloppy Reduction. International Journal of Applied Cryptography 2(3), pp. 212–228, 2012. https://doi.org/10.1504/IJACT.2012.045590
    [wenger-wolfger-2014] E. Wenger, P. Wolfger. Solving the Discrete Logarithm of a 113-bit Koblitz Curve with an FPGA Cluster. Selected Areas in Cryptography – SAC 2014, LNCS 8781, pp. 363–379. https://doi.org/10.1007/978-3-319-13051-4_22
    [bernstein-et-al-2016] D. J. Bernstein, S. Engels, T. Lange, R. Niederhagen, C. Paar, P. Schwabe, R. Zimmermann. Faster Elliptic-Curve Discrete Logarithms on FPGAs. Cryptology ePrint Archive, Paper 2016/382. https://eprint.iacr.org/2016/382
    [bailey-et-al-2009-breaking] D. V. Bailey, L. Batina, D. J. Bernstein, P. Birkner, J. W. Bos, H.-C. Chen, C.-M. Cheng, G. van Damme, G. de Meulenaer, L. J. Dominguez Perez, J. Fan, T. Güneysu, F. Gürkaynak, T. Kleinjung, T. Lange, N. Mentens, R. Niederhagen, C. Paar, F. Regazzoni, P. Schwabe, L. Uhsadel, A. Van Herrewege, B.-Y. Yang. Breaking ECC2K-130. Cryptology ePrint Archive, Paper 2009/541. https://eprint.iacr.org/2009/541
    [certicom-1997] Certicom Research. The Certicom ECC Challenge. Certicom, 1997. Updated 2003; lists ECC2K-108 (GF(2^109), Koblitz) solved 4 April 2000 by R. Harley et al. https://www.certicom.com/content/dam/certicom/images/pdfs/cert_ecc_challenge.pdf
    [bailey-et-al-2009] D. V. Bailey, B. Baldwin, L. Batina, D. J. Bernstein, P. Birkner, J. W. Bos, G. van Damme, G. de Meulenaer, J. Fan, T. Güneysu, F. Gurkaynak, T. Kleinjung, T. Lange, N. Mentens, C. Paar, F. Regazzoni, P. Schwabe, L. Uhsadel. The Certicom Challenges ECC2-X. Cryptology ePrint Archive, Paper 2009/466; SHARCS 2009. https://eprint.iacr.org/2009/466

    The solved instances that calibrate the target: a 112-bit prime-field curve on about 215 PlayStation 3 consoles (2012), a 113-bit Koblitz curve on 18 FPGAs in an extrapolated 24 days (2014), the SECG curve sect113r2 and a 117.35-bit binary instance on FPGAs (2016), and the still-open ECC2K-130 effort with its cost analysis. They place to group operations within reach of a dedicated effort over months, the reference against which the 48–64-bit target is weighed.

  • [galbraith-gaudry-2016] S. D. Galbraith, P. Gaudry. Recent Progress on the Elliptic Curve Discrete Logarithm Problem. Designs, Codes and Cryptography 78(1), pp. 51–72, 2016. https://doi.org/10.1007/s10623-015-0146-7

    Survey of the elliptic-curve discrete logarithm problem: no subexponential algorithm is known for curves over prime fields or over with prime, and the state of index calculus over extension fields. Cited for the statement that generic attacks are the best known.

Weil descent and index calculus over extension fields

  • [frey-1998] G. Frey, H. Gangl. How to Disguise an Elliptic Curve (Weil Descent). Talk at ECC ’98, Waterloo. Slides dated 15 September 1998; the conference slides page lists the talk under Frey alone. https://web.archive.org/web/2005/http://cacr.math.uwaterloo.ca/conferences/1998/ecc98/slides.html

    The idea of Weil restriction as an attack: an elliptic curve over becomes an -dimensional abelian variety over .

  • [gaudry-hess-smart-2002] P. Gaudry, F. Hess, N. P. Smart. Constructive and Destructive Facets of Weil Descent on Elliptic Curves. Journal of Cryptology 15(1), pp. 19–46, 2002. Preprint: HP Labs Technical Report HPL-2000-10. https://doi.org/10.1007/s00145-001-0011-x

    The GHS construction: the descent gives a hyperelliptic curve over of genus about , the “magic number” determined by the minimal polynomial of under Frobenius. sage/ghs.sage computes for the binary families and the genus that results.

  • [menezes-qu-2001] A. Menezes, M. Qu. Analysis of the Weil Descent Attack of Gaudry, Hess and Smart. Topics in Cryptology – CT-RSA 2001, LNCS 2020, pp. 308–318. https://doi.org/10.1007/3-540-45353-9_23

    For prime in the GHS genus is too large for any attack. The degree 127 lies outside that range and is the exceptional small prime degree: 2 has order 7 modulo 127, so splits into degree-7 factors over and the minimal genus is , so the descent must be examined for .

  • [galbraith-hess-smart-2002] S. D. Galbraith, F. Hess, N. P. Smart. Extending the GHS Weil Descent Attack. Advances in Cryptology – EUROCRYPT 2002, LNCS 2332, pp. 29–44. ePrint 2001/054 is PostScript only. https://doi.org/10.1007/3-540-46035-7_3

    Isogenous curves have equal order and the attack transfers along isogenies, so the vulnerable set is a union of isogeny classes, not of curves. sage/ghs122.sage checks the class, and the statement counts classes.

  • [hess-2003] F. Hess. The GHS Attack Revisited. Advances in Cryptology – EUROCRYPT 2003, LNCS 2656, pp. 374–387. https://doi.org/10.1007/3-540-39200-9_23

    Generalizes GHS: with for in the span of a degree-7 factor’s kernel and , the descent still has genus 127 or 128. Over this reaches 4537 Frobenius classes, 65 of them of order and so admissible to the certificate, a heuristic of the admissible isogeny classes (Hess’s own estimate gives ). Accepted without a check: across epochs the probability is at most times this heuristic figure, and a descent compromises only its own epoch.

  • [hess-2005] F. Hess. Weil Descent Attacks. In: Advances in Elliptic Curve Cryptography, ed. I. F. Blake, G. Seroussi, N. P. Smart, London Mathematical Society Lecture Note Series 317, Cambridge University Press, pp. 151–180, 2005. https://doi.org/10.1017/CBO9780511546570.010

    Survey chapter covering the above; cited where the problem statement states the Weil-descent conclusion without the derivation.

  • [hankerson-karabina-menezes-2009] D. Hankerson, K. Karabina, A. Menezes. Analyzing the Galbraith–Lin–Scott Point Multiplication Method for Elliptic Curves over Binary Fields. IEEE Transactions on Computers 58(10), pp. 1411–1420, 2009. https://doi.org/10.1109/TC.2009.61

    Security analysis of GLS curves over : the GHS descent to and the index calculus leave the discrete logarithm at about , the rho cost. It is the reference for the family’s security statement.

  • [gaudry-2009] P. Gaudry. Index Calculus for Abelian Varieties of Small Dimension and the Elliptic Curve Discrete Logarithm Problem. Journal of Symbolic Computation 44(12), pp. 1690–1702, 2009. https://doi.org/10.1016/j.jsc.2008.08.005

    Index calculus for over in for fixed : at , which ties rho for every quadratic-extension family here (fp61x2, fp64x2, goldilocks2, and as ). The reason degree 2 is admissible and degree is not.

  • [diem-2011] C. Diem. On the Discrete Logarithm Problem in Elliptic Curves. Compositio Mathematica 147(1), pp. 75–104, 2011. https://doi.org/10.1112/S0010437X10005075

    The discrete logarithm over is subexponential when grows with within fixed bounds. It does not apply at or at prime ; cited to say so.

  • [joux-vitse-2012] A. Joux, V. Vitse. Cover and Decomposition Index Calculus on Elliptic Curves Made Practical. Advances in Cryptology – EUROCRYPT 2012, LNCS 7237, pp. 9–26. Full version subtitled “Application to a Previously Unreachable Curve over F_{p^6}”. https://doi.org/10.1007/978-3-642-29011-4_3

    Cover and decomposition attacks made practical for -type fields; the boundary case showing where composite-degree extensions become dangerous, and that is not among them.

  • [semaev-2004] I. Semaev. Summation Polynomials and the Discrete Logarithm Problem on Elliptic Curves. Cryptology ePrint Archive, Paper 2004/031. https://eprint.iacr.org/2004/031
    [faugere-et-al-2012] J.-C. Faugère, L. Perret, C. Petit, G. Renault. Improving the Complexity of Index Calculus Algorithms in Elliptic Curves over Binary Fields. Advances in Cryptology – EUROCRYPT 2012, LNCS 7237, pp. 27–44. https://doi.org/10.1007/978-3-642-29011-4_4
    [petit-quisquater-2012] C. Petit, J.-J. Quisquater. On Polynomial Systems Arising from a Weil Descent. Advances in Cryptology – ASIACRYPT 2012, LNCS 7658, pp. 451–466. https://doi.org/10.1007/978-3-642-34961-4_28

    Summation polynomials and the heuristic index calculus over , prime. The authors’ own estimate places the crossover with generic methods near ; the degrees used here are far below it, and the heuristics remain unconfirmed. Cited as the reason prime-degree binary fields are still considered generic-secure.

Point counting and curve generation

  • [schoof-1995] R. Schoof. Counting Points on Elliptic Curves over Finite Fields. Journal de Théorie des Nombres de Bordeaux 7(1), pp. 219–254, 1995. https://doi.org/10.5802/jtnb.142

    Schoof’s algorithm and the Elkies–Atkin improvements (SEA): polynomial-time point counting over any finite field. PARI’s ellsea runs it for the odd-field families, with the Elkies-prime early abort the pari module uses.

  • [satoh-2000] T. Satoh. The Canonical Lift of an Ordinary Elliptic Curve over a Finite Field and Its Point Counting. Journal of the Ramanujan Mathematical Society 15(4), pp. 247–270, 2000.
    [mestre-2000] J.-F. Mestre. Lettre adressée à Gaudry et Harley. Letter, December 2000. The arithmetic–geometric mean point-counting method; cited through [gaudry-2002] and [satoh-skjernaa-taguchi-2003].
    [gaudry-2002] P. Gaudry. A Comparison and a Combination of SST and AGM Algorithms for Counting Points of Elliptic Curves in Characteristic 2. Advances in Cryptology – ASIACRYPT 2002, LNCS 2501, pp. 311–327. https://doi.org/10.1007/3-540-36178-2_20

    Canonical lifts and Mestre’s AGM for characteristic 2: counting a curve over in milliseconds. The Rust agm counter is a canonical lift of this kind and PARI’s F2xq_ellcard is Harley’s variant of the AGM; gaudry-2002 is the comparison that established the method.

  • [satoh-skjernaa-taguchi-2003] T. Satoh, B. Skjernaa, Y. Taguchi. Fast Computation of Canonical Lifts of Elliptic Curves and its Application to Point Counting. Finite Fields and Their Applications 9(1), pp. 89–101, 2003. https://doi.org/10.1016/S1071-5797(02)00013-8

    The SST variant of the canonical lift, one of the methods gaudry-2002 compares; the method implemented is the AGM.

  • [lercier-lubicz-2003] R. Lercier, D. Lubicz. Counting Points on Elliptic Curves over Finite Fields of Small Characteristic in Quasi Quadratic Time. Advances in Cryptology – EUROCRYPT 2003, LNCS 2656, pp. 360–373. https://doi.org/10.1007/3-540-39200-9_22

    Quasi-quadratic point counting in small characteristic via canonical lifts. The asymptotic improvement does not establish a concrete gain at degree 127; this implementation uses the AGM.

  • [fouquet-gaudry-harley-2001] M. Fouquet, P. Gaudry, R. Harley. Finding Secure Curves with the Satoh-FGH Algorithm and an Early-Abort Strategy. Advances in Cryptology – EUROCRYPT 2001, LNCS 2045, pp. 14–29. https://doi.org/10.1007/3-540-44987-6_2

    The early-abort strategy: test small torsion before counting, since most candidates fail on the group order. The direct ancestor of curvegen::sieve, whose witnesses double as certificate rejections.

  • [rabin-1980] M. O. Rabin. Probabilistic Algorithm for Testing Primality. Journal of Number Theory 12(1), pp. 128–138, 1980. https://doi.org/10.1016/0022-314X(80)90084-0
    [arnault-1995] F. Arnault. Constructing Carmichael Numbers Which Are Strong Pseudoprimes to Several Bases. Journal of Symbolic Computation 20(2), pp. 151–161, 1995. https://doi.org/10.1006/jsco.1995.1042
    [albrecht-et-al-2018] M. R. Albrecht, J. Massimo, K. G. Paterson, J. Somorovsky. Prime and Prejudice: Primality Testing Under Adversarial Conditions. Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security (CCS ’18), pp. 281–298. https://doi.org/10.1145/3243734.3243787

    The Miller–Rabin test and the constructions of composites that pass it for fixed bases. The certificate accepts as a probable prime to 24 fixed bases; these papers are why the statement is conditional. The prover cannot skip an admissible candidate, since rejection witnesses exist only for inadmissible ones. For the accepted candidate the verifier takes from the prover and checks for the cofactor-cleared hashed point , the Hasse window, and the 24 Miller–Rabin bases; the order argument is conditional on being prime.

  • [bernstein-et-al-2015] D. J. Bernstein, T. Chou, C. Chuengsatiansup, A. Hülsing, E. Lambooij, T. Lange, R. Niederhagen, C. van Vredendaal. How to Manipulate Curve Standards: A White Paper for the Black Hat. Security Standardisation Research – SSR 2015, LNCS 9497, pp. 109–139. https://doi.org/10.1007/978-3-319-27152-1_6
    [flori-et-al-2015] J.-P. Flori, J. Plût, J.-R. Reinhard, M. Ekerå. Diversity and Transparency for ECC. Cryptology ePrint Archive, Paper 2015/659. https://eprint.iacr.org/2015/659
    [bos-et-al-2016] J. W. Bos, C. Costello, P. Longa, M. Naehrig. Selecting Elliptic Curves for Cryptography: An Efficiency and Security Analysis. Journal of Cryptographic Engineering 6(4), pp. 259–286, 2016. https://doi.org/10.1007/s13389-015-0097-y

    Why the curve is derived from a public seed with a verifiable certificate rather than taken from a standard: manipulable standards, transparent generation of many curves, and the efficiency/security tradeoffs of the selection procedure itself. flori-et-al-2015 is the closest prior work on generating a fresh curve per use.

  • [ansi-x9-62-1998] Accredited Standards Committee X9. Public Key Cryptography for the Financial Services Industry: The Elliptic Curve Digital Signature Algorithm (ECDSA). American National Standards Institute, ANSI X9.62-1998, 1999.
    [rfc5639] M. Lochter, J. Merkle. Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation. RFC 5639, 2010. https://doi.org/10.17487/RFC5639
    [baigneres-et-al-2015] T. Baignères, C. Delerablée, M. Finiasz, L. Goubin, T. Lepoint, M. Rivain. Trap Me If You Can – Million Dollar Curve. Cryptology ePrint Archive, Paper 2015/1249. https://eprint.iacr.org/2015/1249
    [lenstra-wesolowski-2017] A. K. Lenstra, B. Wesolowski. Trustworthy Public Randomness with Sloth, Unicorn, and Trx. International Journal of Applied Cryptography 3(4), pp. 330–343, 2017. https://eprint.iacr.org/2015/366

    Curves derived from public randomness. X9.62’s verifiably random curves and Brainpool’s verifiably pseudo-random ones hash a published seed, which bernstein-et-al-2015 shows still leaves the seed’s author a choice. The Million Dollar Curve takes its seed from several national lotteries and turns it into parameters by a deterministic filter, for one curve meant to replace P-256 and Curve25519. Lenstra and Wesolowski’s trx derives a stream of curves from the output of their beacon, unicorn: the first acceptable candidate in a fixed enumeration, with data to show that the earlier candidates fail, which is the shape of this repository’s certificate. Both provide curves for general use at the 128-bit level, where trx takes hours per curve; here a new beacon value selects a smaller curve for each namespace.

  • [safecurves] D. J. Bernstein, T. Lange. SafeCurves: Choosing Safe Curves for Elliptic-Curve Cryptography. Fields: https://safecurves.cr.yp.to/field.html. https://safecurves.cr.yp.to
    [bernstein-lange-2024] D. J. Bernstein, T. Lange. Safe curves for elliptic-curve cryptography. Cryptology ePrint Archive, Paper 2024/1265. https://eprint.iacr.org/2024/1265

    The rigidity criterion the selection satisfies by construction, and (paper, §4.4) the batched affine addition cost of about per step that an attacker’s rho implementation attains, which is the add cost the collision-resistance figures assume for the attacker.

  • [syta-et-al-2017] E. Syta, P. Jovanovic, E. Kokoris-Kogias, N. Gailly, L. Gasser, I. Khoffi, M. J. Fischer, B. Ford. Scalable Bias-Resistant Distributed Randomness. 2017 IEEE Symposium on Security and Privacy, pp. 444–460. https://doi.org/10.1109/SP.2017.45
    [kelsey-et-al-2019] J. Kelsey, L. T. A. N. Brandão, R. Peralta, H. Booth. A Reference for Randomness Beacons: Format and Protocol Version 2. NIST, NIST IR 8213 (draft), 2019. https://doi.org/10.6028/NIST.IR.8213-draft

    Randomness beacons: where an unpredictable public salt comes from, and the unpredictability requirement the precomputation argument depends on.

  • [bonneau-clark-goldfeder-2015] J. Bonneau, J. Clark, S. Goldfeder. On Bitcoin as a Public Randomness Source. Cryptology ePrint Archive, Paper 2015/1015. https://eprint.iacr.org/2015/1015

    Bitcoin block hashes as a beacon: a lower bound on each block’s min-entropy, and the cost to a miner of biasing the output by withholding blocks, which is the manipulation this study leaves to the protocol.

  • [koblitz-1991] N. Koblitz. CM-Curves with Good Cryptographic Properties. Advances in Cryptology – CRYPTO ’91, LNCS 576, pp. 279–287, 1992. https://doi.org/10.1007/3-540-46766-1_22
    [solinas-2000] J. A. Solinas. Efficient Arithmetic on Koblitz Curves. Designs, Codes and Cryptography 19(2–3), pp. 195–249, 2000. https://doi.org/10.1023/A:1008306223194

    Koblitz (subfield) curves: fast scalar multiplication, which the workload does not use, and a rho speedup, which it cannot afford. Excluded.

  • [sutherland-2012] A. V. Sutherland. Constructing elliptic curves over finite fields with prescribed torsion. Mathematics of Computation 81, pp. 1131–1147, 2012. https://doi.org/10.1090/S0025-5718-2011-02538-X

    Constructing curves with prescribed torsion through modular curves: an alternative sampler that would change the canonical candidate stream and its certificate. Not used.

  • [pari-gp] The PARI Group. PARI/GP. https://pari.math.u-bordeaux.fr/.
    [sagemath] The Sage Developers. SageMath, the Sage Mathematics Software System. https://www.sagemath.org/.

    The point-counting and primality oracle for fixtures and the pari feature, and the system in which the reference programs under sage/ are written; Sage counts points through PARI.

Hash-to-curve, encodings, ECMH and inversion

Security contract and foundational constructions

  • [bellare-micciancio-1997] M. Bellare, D. Micciancio. A New Paradigm for Collision-Free Hashing: Incrementality at Reduced Cost. Advances in Cryptology – EUROCRYPT ’97, LNCS 1233, pp. 163–192, 1997. https://doi.org/10.1007/3-540-69053-0_13

    Establishes the incremental multiset-hashing framework underlying ECMH. It supplies the algebraic security question for cell checksums; a fast map and group operation must be assessed within that question rather than by mapping speed alone.

  • [wegman-carter-1981] M. N. Wegman, J. L. Carter. New Hash Functions and Their Use in Authentication and Set Equality. Journal of Computer and System Sciences 22(3), pp. 265–279, 1981. https://doi.org/10.1016/0022-0000(81)90033-7

    Defines almost-universal hash families and applies them to authentication and to testing sets for equality under insertion and deletion. The salted projection of an item’s unsalted identifier is such a family: its collision bound holds for identifiers fixed before the salt, and after the salt the identifiers’ being hash outputs leaves only a generic search (Adversary).

  • [wagner-2002] D. Wagner. A Generalized Birthday Problem. Advances in Cryptology – CRYPTO 2002, LNCS 2442, pp. 288–304. https://doi.org/10.1007/3-540-45708-9_19

    The generalized birthday algorithm combines many independently chosen terms into an additive relation; for an -bit modulus and about lists it takes about operations, subexponential in . Its list-merging step needs a group representation in which partial sums can be matched on bits, as in or . Elliptic-curve groups have no such representation, so without discrete logarithms the -sum bound is not the attack cost for these checksums; with them, the checksum is AdHash modulo and the algorithm applies (Known weaknesses).

  • [meyer-2022] A. Meyer. Range-Based Set Reconciliation. arXiv:2212.13567 [cs.CR], 2022. Section numbers refer to the short version at https://github.com/AljoschaMeyer/rbsr_short. https://arxiv.org/abs/2212.13567

    Range-based set reconciliation with fingerprints combined in a monoid. Section V-B surveys fingerprint groups against an adversary who chooses items, and cites additive hashes of 2688 to 4160 bits for 128-bit security against Wagner’s algorithm and its successors (mihajloska-gligoroski-samardjiska-2015).

  • [mihajloska-gligoroski-samardjiska-2015] H. Mihajloska, D. Gligoroski, S. Samardjiska. Reviving the Idea of Incremental Cryptography for the Zettabyte Era Use Case: Incremental Hash Functions Based on SHA-3. Cryptology ePrint Archive, Paper 2015/1028. Also in International Workshop on Open Problems in Network Security (iNetSec 2015), Springer, pp. 97–111. https://eprint.iacr.org/2015/1028

    Incremental hash functions over SHAKE outputs combined by word-wise addition modulo , with output lengths chosen against Wagner’s algorithm: 2688 bits for 128-bit security when a relation has at most terms, 4160 bits without a bound. The security chapter compares these sizes with a checksum whose discrete logarithms are known.

  • [phan-wagner-2006] R. C.-W. Phan, D. Wagner. Security Considerations for Incremental Hash Functions Based on Pair Block Chaining. Computers & Security 25, pp. 131–136, 2006. https://doi.org/10.1016/j.cose.2005.12.006

    Collisions in randomize-then-combine hashes of pair-chained message blocks: repeated blocks, coinciding padding and cyclic chaining give distinct messages with equal hashes, in several cases with equal multisets of pair terms, so that modular addition fails as XOR does. They follow from the encoding of a message into terms, not from the combining operation; here each item is hashed whole to one term and the digest of a multiset is meant to be independent of order, so the attacks do not carry over. The paper also records a PCIHF variant proposed with its modulus raised from to in response to Wagner’s algorithm.

  • [maitin-shepard-et-al-2016] J. Maitin-Shepard, M. Tibouchi, D. F. Aranha. Elliptic Curve Multiset Hash. arXiv:1601.06502 [cs.CR]. Journal version: The Computer Journal, 2016, https://doi.org/10.1093/comjnl/bxw053. https://arxiv.org/abs/1601.06502

    Gives the binary-curve ECMH construction, its weak-encoding collision-security reduction and separate mapping, group-operation and batching measurements. It distinguishes a sufficient ECMH encoding from a hash indifferentiable from a random oracle; applying the reduction to this repository’s adapted map still requires establishing that map’s hypotheses and reduction loss.

  • [brier-et-al-2010] E. Brier, J.-S. Coron, T. Icart, D. Madore, H. Randriam, M. Tibouchi. Efficient Indifferentiable Hashing into Ordinary Elliptic Curves. Advances in Cryptology – CRYPTO 2010, LNCS 6223, pp. 237–254. https://doi.org/10.1007/978-3-642-14623-7_13

    Provides constructions and analysis for indifferentiable hashing into ordinary elliptic curves. It explains why a deterministic encoding and a random-oracle hash require different contracts, even when the implementations share mapping formulas.

  • [farashahi-pellikaan-sidorenko-2008] R. R. Farashahi, R. Pellikaan, A. Sidorenko. Extractors for Binary Elliptic Curves. Designs, Codes and Cryptography 49(1–3), pp. 171–186, 2008. https://doi.org/10.1007/s10623-008-9187-5

    Deterministic extraction of a subfield coefficient from uniformly distributed points on binary curves of even extension degree. It distinguishes randomness extraction from point encoding; it supplies no proof of the current -plus-sign codec or of the hash-to-curve distribution.

  • [shallue-van-de-woestijne-2006] A. Shallue, C. E. van de Woestijne. Construction of Rational Points on Elliptic Curves over Finite Fields. Algorithmic Number Theory (ANTS-VII), LNCS 4076, pp. 510–524, 2006. https://doi.org/10.1007/11792086_36

    Constructs rational points deterministically over finite fields and supplies the lineage of the SW maps used in later hashing work. Its relevance is the point-construction mechanism; the required output-distribution and ECMH-security arguments come from additional analysis.

  • [boneh-lynn-shacham-2001] D. Boneh, B. Lynn, H. Shacham. Short Signatures from the Weil Pairing. Advances in Cryptology – ASIACRYPT 2001, LNCS 2248, pp. 514–532. https://doi.org/10.1007/3-540-45682-1_30

    MapToGroup, an early reference for counter-based rejection sampling into a curve group. Here the shared driver curve::h2c samples digest-derived candidate encodings until decoding succeeds; the weak-encoding condition of maitin-shepard-et-al-2016, a sufficient route to collision resistance, may be established from each codec’s accepted preimages, including identity and torsion handling. The variable-time path is evaluated under the project’s public-input assumption.

  • [rfc9380] A. Faz-Hernández, S. Scott, N. Sullivan, R. S. Wahby, C. A. Wood. Hashing to Elliptic Curves. RFC 9380, 2023. https://doi.org/10.17487/RFC9380

    Specifies hash-to-field, domain separation, mappings and cofactor handling for hash-to-curve suites. It provides a reference decomposition for the implementation and benchmarks, while its standardized suites do not directly certify arbitrary ephemeral curves or the binary maps used here.

  • [bernstein-et-al-2013] D. J. Bernstein, M. Hamburg, A. Krasnova, T. Lange. Elligator: Elliptic-Curve Points Indistinguishable from Uniform Random Strings. Proceedings of the 2013 ACM SIGSAC Conference on Computer and Communications Security (CCS ’13), pp. 967–980. https://doi.org/10.1145/2508859.2516734

    Introduces Elligator and the distinction between curve-point encodings and uniform-looking bit strings. Elligator 2 is an applicable mapping reference for suitable odd-characteristic curves with rational two-torsion, but its encoding alone must not be labeled a full random-oracle hash.

  • [hamburg-2020] M. Hamburg. Indifferentiable Hashing from Elligator 2. Cryptology ePrint Archive, Paper 2020/1513. https://eprint.iacr.org/2020/1513

    Analyzes indifferentiable constructions from Elligator 2, including hash-twice-and-add. It supports the explicit separation of single-map and two-map interfaces and their costs; the argument must be matched to the actual map and target group.

Binary maps and their implementation

  • [aranha-et-al-2014] D. F. Aranha, P.-A. Fouque, C. Qian, M. Tibouchi, J.-C. Zapalowicz. Binary Elligator Squared. Selected Areas in Cryptography – SAC 2014, LNCS 8781. https://doi.org/10.1007/978-3-319-13051-4_2

    Optimizes the characteristic-two SW map through shared inversion and gives preimage analysis, quadratic-solving techniques and implementation measurements. It is a direct comparison for the repository’s binary mapping alternatives; the paper’s full Elligator Squared representation timing must not be mistaken for a single hash-to-point timing.

  • [maitin-shepard-2017] J. Maitin-Shepard. Optimal software-implemented Itoh–Tsujii inversion for F_{2^m}. Designs, Codes and Cryptography 82, pp. 301–318, 2017. https://doi.org/10.1007/s10623-016-0260-1

    Optimizes Itoh–Tsujii inversion chains jointly with multi-squaring tables using machine-specific measurements, including degree 127. It closes the gap between minimizing symbolic multiplication counts and minimizing the actual binary-map cost, subject to memory and timing constraints.

  • [fong-et-al-2004] K. Fong, D. Hankerson, J. López, A. Menezes. Field Inversion and Point Halving Revisited. IEEE Transactions on Computers 53(8), pp. 1047–1059, 2004. The open copy is the technical-report version. https://doi.org/10.1109/TC.2004.43

    Examines binary-field inversion, division and SIMD implementation costs. These primitives inform the affine/projective and decoding tradeoffs here, although its point-halving scalar-multiplication results do not measure arbitrary RIBLT-cell additions.

Odd-characteristic mapping alternatives

  • [chavez-saab-et-al-2022] J. Chávez-Saab, F. Rodríguez-Henríquez, M. Tibouchi. SwiftEC: Shallue–van de Woestijne Indifferentiable Function to Elliptic Curves. Journal of Cryptology 37, 2024. https://doi.org/10.1007/s00145-024-09529-y

    SwiftEC reduces full-point hashing to one square-root extraction on compatible odd-characteristic curves, with per-curve parameter construction and possible isogeny adaptation. For ephemeral curves, compatibility and setup amortization are part of the comparison; its -only output, of lower cost, is insufficient by itself for signed arbitrary additions.

  • [aranha-et-al-2023] D. F. Aranha, B. S. Hvass, B. Spitters, M. Tibouchi. Faster constant-time evaluation of the Kronecker symbol with application to elliptic curve hashing. ACM SIGSAC Conference on Computer and Communications Security (CCS 2023), pp. 3228–3238. https://doi.org/10.1145/3576915.3616597

    Gives faster constant-time character computation and concrete SwiftEC measurements. It is the comparison for the variable-time Jacobi and special-prime exponentiation paths used here, without transferring its larger-field speedups to the 48–64-bit collision-security configurations.

  • [koshelev-2024] D. Koshelev. Simultaneously Simple, Universal, and Indifferentiable Hashing to Elliptic Curves. Cryptology ePrint Archive, Paper 2024/085. https://eprint.iacr.org/2024/085

    Extends one-root indifferentiable hashing in characteristic greater than three and is a possible way to broaden SwiftEC’s applicability. Its relevance is conditional on checking the exact target-curve construction, exceptional inputs and setup cost; no speedup over the maps implemented here has been established.

  • [koshelev-2025] D. Koshelev. Hashing-friendly elliptic curves. Cryptology ePrint Archive, Paper 2025/1926, revised March 2026. https://eprint.iacr.org/2025/1926

    Studies batching root extraction on specially constructed hashing-friendly curves. It represents a joint curve-selection and hashing alternative, with distribution questions that require separate analysis, rather than an optimization already applicable to the repository’s current candidate stream.

Field primitives used by mapping and decoding

  • [bernstein-yang-2019] D. J. Bernstein, B.-Y. Yang. Fast constant-time gcd computation and modular inversion. IACR Transactions on Cryptographic Hardware and Embedded Systems 2019(3), pp. 340–398, 2019. https://doi.org/10.13154/tches.v2019.i3.340-398

    Supplies constant-time divsteps algorithms for integer and polynomial inversion. It provides alternatives to exponentiation-based inversion. Its benefit depends on the field size and batch size, since batching amortizes the inversion cost.

  • [adj-rodriguez-henriquez-2014] G. Adj, F. Rodríguez-Henríquez. Square Root Computation over Even Extension Fields. IEEE Transactions on Computers 63(11), pp. 2829–2841, 2014. https://doi.org/10.1109/TC.2013.145

    Uses extension-field structure to compute square roots and quadratic characters in odd-characteristic even-degree extensions. It applies to quadratic prime-field alternatives; “even extension” does not mean a binary field.

  • [bernstein-2001] D. J. Bernstein. Faster square roots in annoying finite fields. Preprint, 2001, retypeset 2022. https://cr.yp.to/papers/sqroot-20011123-retypeset20220327.pdf

    Gives precomputation/time tradeoffs for square roots when the field order minus one has high two-adicity. It explains a cost specific to Goldilocks-style alternatives, which is absent from the simple square-root exponentiation over the current Mersenne prime fields.

  • [pornin-2023-sqrt] T. Pornin. Optimized Discrete Logarithm Computation for Faster Square Roots in Finite Fields. Cryptology ePrint Archive, Paper 2023/828. https://eprint.iacr.org/2023/828

    Improves the subgroup discrete-logarithm stage of square-root extraction in high-two-adicity fields. It is a more recent alternative to assess alongside the preceding method when such fields are considered, including table/setup costs.

  • [bernstein-2005] D. J. Bernstein. The Poly1305-AES Message-Authentication Code. Fast Software Encryption – FSE 2005, LNCS 3557, pp. 32–49. https://doi.org/10.1007/11502760_3

    Poly1305 evaluates a message as a polynomial in a clamped key over , a field chosen for fast integer arithmetic, and bounds the differential probability by the polynomial’s degree. The projection of item identifiers evaluates a two-block message in the same way, unclamped and without the pad; its field is measured beside and , which are cheaper where their multiplications are (hash).

Field and group arithmetic, set reconciliation and baselines

Set reconciliation and the cell checksum

  • [yang-gilad-alizadeh-2024] L. Yang, Y. Gilad, M. Alizadeh. Practical Rateless Set Reconciliation. Proceedings of the ACM SIGCOMM 2024 Conference, pp. 595–612. https://doi.org/10.1145/3651890.3672219

    Rateless IBLTs: a coded-symbol stream whose communication overhead approaches 1.35 symbols per set difference, and the item-to-cell mapping src/riblt.rs implements. Each cell carries a checksum used to decide whether the cell holds exactly one item; the question of what that checksum must resist, raised in yangl1996/riblt#3, is the question this repository answers.

  • [goodrich-mitzenmacher-2011] M. T. Goodrich, M. Mitzenmacher. Invertible Bloom Lookup Tables. 49th Annual Allerton Conference on Communication, Control, and Computing, pp. 792–799, 2011. https://doi.org/10.1109/Allerton.2011.6120248
    [eppstein-et-al-2011] D. Eppstein, M. T. Goodrich, F. Uyeda, G. Varghese. What’s the Difference? Efficient Set Reconciliation without Prior Context. Proceedings of the ACM SIGCOMM 2011 Conference, pp. 218–229. https://doi.org/10.1145/2018436.2018462

    Invertible Bloom lookup tables and their use for set difference. They introduce the hash-sum field that decides purity and peeling, which RIBLT inherits and which an ECMH checksum replaces. Under a secret key a short keyed hash suffices; the ECMH checksum is needed when the salt is public and the items may be chosen against it.

  • [minsky-trachtenberg-zippel-2003] Y. Minsky, A. Trachtenberg, R. Zippel. Set Reconciliation with Nearly Optimal Communication Complexity. IEEE Transactions on Information Theory 49(9), pp. 2213–2218, 2003. https://doi.org/10.1109/TIT.2003.815784
    [dodis-et-al-2008] Y. Dodis, R. Ostrovsky, L. Reyzin, A. Smith. Fuzzy Extractors: How to Generate Strong Keys from Biometrics and Other Noisy Data. SIAM Journal on Computing 38(1), pp. 97–139, 2008. https://doi.org/10.1137/060651380
    [naumenko-et-al-2019] G. Naumenko, G. Maxwell, P. Wuille, A. Fedorova, I. Beschastnikh. Erlay: Efficient Transaction Relay for Bitcoin. Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security (CCS ’19), pp. 817–831. https://doi.org/10.1145/3319535.3354237

    Algebraic set reconciliation: characteristic-polynomial interpolation, the PinSketch BCH syndrome, and its use in Erlay (Minisketch), proposed for Bitcoin’s transaction relay and not deployed. Decoding is exact and needs no checksum, so the purity question does not arise, but decoding costs time quadratic in the difference and the capacity is fixed in advance. This is an alternative to rateless IBLTs; the case for RIBLTs rests on rateless, linear-time decoding.

  • [riblt-ecmh] D. Buchanan. riblt-ecmh: Go Implementation of Rateless IBLTs with Additional Security Hardening. GitHub repository, commit 11521a4c73ebbbfe80050ec99a4f976eb9ce7147, 2026. https://github.com/DavidBuchanan314/riblt-ecmh

    An independent Go implementation of RIBLT with an elliptic-curve multiset-hash checksum: the nearest prior implementation of the combination evaluated here.

  • [meyer-scherer-2024] A. Meyer, K. Scherer. Range-Based Set Reconciliation Without Homomorphic Hashing. Preprint, 2024. https://aljoscha-meyer.de/assets/landing/rbsr_nonhomomorphic.pdf

    Range-based set reconciliation over conventional hashes. It names censorship resistance, that a malicious party cannot generate sets which two honest nodes fail to reconcile, and universality, that a node’s main computation does not depend on its peer’s set; the adversary of Adversary is the one their first property resists. It observes that RIBLTs meet adversarial sets by randomizing the hash for each session, which repeats the hashing in every session; a salt shared by an epoch’s sessions amortizes that work.

  • [hoyte-2023] D. Hoyte. Range-Based Set Reconciliation. Web article, December 2023. Sections “Fingerprint Threat Model” and “Security of Incremental Hash Functions”. https://logperiodic.com/rbsr.html

    Range-based reconciliation as deployed in negentropy. Its fingerprint threat model is the third party of Adversary, who inserts crafted elements so that others fail to synchronize. It reports collisions of 256-bit XOR fingerprints in two seconds by Gaussian elimination and of sums modulo in about 28 hours with a -dimensional birthday solver, the kind of problem to which known discrete logarithms reduce the checksum (Known weaknesses), and judges ECMH collisions infeasible but ECMH slower, with a single reference implementation.

  • [corallo-2016] M. Corallo. Compact Block Relay. Bitcoin Improvement Proposal 152, 2016. https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki

    Compact block relay keys short transaction identifiers with SipHash under a hash of the block header and a nonce. The header commits to the transactions it identifies, so they cannot be chosen against the key. Items reconciled within an epoch can be, which is why a short keyed hash does not serve here although a block hash still bounds the epoch.

  • [krohn-freedman-mazieres-2004] M. N. Krohn, M. J. Freedman, D. Mazières. On-the-Fly Verification of Rateless Erasure Codes for Efficient Content Distribution. IEEE Symposium on Security and Privacy, pp. 226–240, 2004. https://doi.org/10.1109/SECPRI.2004.1301326
    [juels-et-al-2015] A. Juels, J. Kelley, R. Tamassia, N. Triandopoulos. Falcon Codes: Fast, Authenticated LT Codes (Or: Making Rapid Tornadoes Unstoppable). Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security, pp. 1032–1047, 2015. https://doi.org/10.1145/2810103.2813728
    [boneh-freeman-katz-waters-2009] D. Boneh, D. Freeman, J. Katz, B. Waters. Signing a Linear Subspace: Signature Schemes for Network Coding. Public Key Cryptography – PKC 2009, LNCS 5443, pp. 68–87. https://doi.org/10.1007/978-3-642-00468-1_5

    Integrity of coded data against corrupt symbols from participants: homomorphic hashes of a publisher’s blocks verify each block of a rateless erasure code on receipt, Falcon codes authenticate LT-coded symbols with a MAC under a key the sender and receiver share, and signatures on a linear subspace let the nodes of a random linear network code derive and verify signatures on combinations. The first uses a discrete-logarithm homomorphic hash, as the cell checksum does. Each authenticates data against a source or a key from which every legitimate symbol derives; the items of a reconciled set are authored by any party, the adversary included, and carry no such credential, so corrupt symbols from a participating peer remain outside the adversary of Adversary.

  • [bolt-7] Lightning Network specification contributors. BOLT #7: P2P Node and Channel Discovery. Basis of Lightning Technology. https://github.com/lightning/bolts/blob/master/07-routing-gossip.md
    [chen-et-al-2026] X. Chen, A. Sinha, D. Starobinski, A. Trachtenberg. Scaling the Lightning Network with Practical Set Reconciliation. arXiv:2608.15921, 2026. https://arxiv.org/abs/2608.15921

    Lightning gossip, a public set of channel and node announcements that any node can extend, and an evaluation of IBLT-based reconciliation for it, which leaves adversarial conditions to future work.

Multiset hashes in deployment, and fixed-group baselines

  • [van-der-wansem-2018] T. van der Wansem. ECMH: Elliptic Curve Multiset Hash for UTXO Commitments. Bitcoin Cash specification draft, 2018. https://github.com/tomasvdw/bips/blob/master/ecmh.mediawiki
    [wuille-2020] P. Wuille. MuHash3072: A Multiset Hash for the UTXO Set. Bitcoin Core pull request 19055 and BIP draft, 2020. https://github.com/bitcoin/bitcoin/pull/19055

    The deployed multiset hashes for UTXO-set commitments: ECMH on secp256k1 with try-and-increment, and MuHash3072 in the multiplicative group of a 3072-bit prime field. Both fix one group for all time at 128-bit security; they are the reference for why a curve rather than a modular group, and for what a fixed group costs at full size.

  • [certicom-2010] Certicom Research. SEC 2: Recommended Elliptic Curve Domain Parameters. Standards for Efficient Cryptography, version 2.0. 27 January 2010. https://www.secg.org/sec2-v2.pdf
    [libsecp256k1] Bitcoin Core contributors. libsecp256k1. GitHub repository. https://github.com/bitcoin-core/secp256k1

    secp256k1’s parameters and the library timed in benches/compare.rs (compressed-point parsing, ElligatorSwift decoding, Jacobian accumulation): the cost of ECMH on a fixed 256-bit curve.

  • [bernstein-2006] D. J. Bernstein. Curve25519: New Diffie-Hellman Speed Records. Public Key Cryptography – PKC 2006, LNCS 3958, pp. 207–228. https://doi.org/10.1007/11745853_14
    [hamburg-2015] M. Hamburg. Decaf: Eliminating Cofactors through Point Compression. Advances in Cryptology – CRYPTO 2015, Part I, LNCS 9215, pp. 705–723. https://doi.org/10.1007/978-3-662-47989-6_34
    [rfc9496] H. de Valence, J. Grigg, M. Hamburg, I. Lovecruft, G. Tankersley, F. Valsorda. The ristretto255 and decaf448 Groups. RFC 9496, December 2023. https://doi.org/10.17487/RFC9496
    [curve25519-dalek] I. Lovecruft, H. de Valence. curve25519-dalek. GitHub repository. https://github.com/dalek-cryptography/curve25519-dalek

    Curve25519, the Decaf quotient that removes its cofactor, the ristretto255 specification, and the implementation timed in benches/compare.rs: the second fixed 256-bit baseline. Decaf’s quotient, which removes a cofactor of 4, is the model for the twisted family’s encoding of , which removes only the 2-torsion point .

  • [fips-180-4] National Institute of Standards and Technology. Secure Hash Standard (SHS). NIST, FIPS PUB 180-4, 2015. https://doi.org/10.6028/NIST.FIPS.180-4
    [aumasson-bernstein-2012] J.-P. Aumasson, D. J. Bernstein. SipHash: A Fast Short-Input PRF. Progress in Cryptology – INDOCRYPT 2012, LNCS 7668, pp. 489–508. https://doi.org/10.1007/978-3-642-34931-7_28

    SHA-256, the digest behind src/hash.rs and every map, and SipHash. XOR of either is the non-adversarial baseline every curve is compared against.

Binary fields and their dependence on carry-less multiplication

  • [hankerson-menezes-vanstone-2004] D. Hankerson, A. Menezes, S. Vanstone. Guide to Elliptic Curve Cryptography. Springer, 2004. https://doi.org/10.1007/b97644

    Reference for arithmetic: the trace, the half-trace that solves in decoding and hashing, Itoh–Tsujii inversion, and the multiplication-by-constant cost model the operation counts in the module documentation use.

  • [taverne-et-al-2011] J. Taverne, A. Faz-Hernández, D. F. Aranha, F. Rodríguez-Henríquez, D. Hankerson, J. López. Software Implementation of Binary Elliptic Curves: Impact of the Carry-Less Multiplier on Scalar Multiplication. Cryptographic Hardware and Embedded Systems – CHES 2011, LNCS 6917, pp. 108–123. https://doi.org/10.1007/978-3-642-23951-9_8
    [bluhm-gueron-2015] M. Bluhm, S. Gueron. Fast Software Implementation of Binary Elliptic Curve Cryptography. Journal of Cryptographic Engineering 5(3), pp. 215–226, 2015. https://doi.org/10.1007/s13389-015-0094-1

    Binary-curve software built on PCLMULQDQ, with measurements of how far the carry-less multiplier decides speed. The binary families are fast only where PMULL or PCLMULQDQ is present; the bench-bins-generic runs time the portable backend that stands in when it is absent, which makes the hardware dependence a deployment condition stated with numbers.

  • [crrl] T. Pornin. crrl: Rust Library for Cryptographic Research. GitHub repository. https://github.com/pornin/crrl

    Pornin’s library: the backends (field::gf2_127) and the GLS254 code from which curve::binary127::map and the tower are adapted.

Binary curve models and addition formulas

  • [pornin-2022] T. Pornin. Efficient and Complete Formulas for Binary Curves. Cryptology ePrint Archive, Paper 2022/1325. https://eprint.iacr.org/2022/1325

    Complete formulas for ordinary binary curves with in coordinates, the extended accumulators of curve::binary::extended, the encoding of wcodec, and the mixed addition that unscaled reduces to by moving the curve constant into the addend, against for the implemented incomplete formula.

  • [pornin-2023] T. Pornin. Faster Complete Formulas for the GLS254 Binary Curve. Cryptology ePrint Archive, Paper 2023/1688. https://eprint.iacr.org/2023/1688

    The same formulas over (GLS254) and the map to the curve. The tower and the GLS family (binary.122-gls) test whether this shape transfers at half the size.

  • [pornin-2024] T. Pornin. A Prime-Order Group with Complete Formulas from Even-Order Elliptic Curves. IACR Communications in Cryptology 1(1), 2024. https://doi.org/10.62056/akmp-4c2h

    The general method: a prime-order group abstraction with complete formulas from any curve of even order, most efficient for . Both characteristics are covered, so it states once the structure the binary families () and the twisted quotient use.

  • [oliveira-et-al-2014] T. Oliveira, J. López, D. F. Aranha, F. Rodríguez-Henríquez. Two Is the Fastest Prime: Lambda Coordinates for Binary Elliptic Curves. Journal of Cryptographic Engineering 4(1), pp. 3–17, 2014. https://doi.org/10.1007/s13389-013-0069-z
    [oliveira-et-al-2013] T. Oliveira, J. López, D. F. Aranha, F. Rodríguez-Henríquez. Lambda Coordinates for Binary Elliptic Curves. Cryptographic Hardware and Embedded Systems – CHES 2013, LNCS 8086, pp. 311–330. ePrint 2013/131, version of 2013-07-31; later versions of 2013/131 are the journal version, [oliveira-et-al-2014]. https://doi.org/10.1007/978-3-642-40349-1_18

    -projective coordinates, with mixed addition and no curve constant: the curve::binary::lambda accumulators. On curves with a dense , where Pornin’s extended formulas need two full multiplications by , this costs less than the extended accumulator, at the price of incompleteness; the unscaled formulas, at , move into the addend and cost less than ’s for the addition itself.

  • [kim-kim-2007] K. H. Kim, S. I. Kim. A New Method for Speeding Up Arithmetic on Elliptic Curves over Binary Fields. Cryptology ePrint Archive, Paper 2007/181. https://eprint.iacr.org/2007/181

    PL-coordinates: López–Dahab with kept unreduced. Mixed addition of an affine and a PL point costs on curves (Theorem 2), in an accounting that counts a reduction modulo the field polynomial as a squaring and defers it. Not implemented: a comparison with the of the unscaled formulas requires the same accounting; the formulas as written cover the families (, ) and not the families over , where has trace 0.

  • [lopez-dahab-1998] J. López, R. Dahab. Improved Algorithms for Elliptic Curve Arithmetic in GF(2^n). Selected Areas in Cryptography – SAC ’98, LNCS 1556, pp. 201–212, 1999. https://doi.org/10.1007/3-540-48892-8_16

    López–Dahab projective coordinates, the earlier standard that -coordinates improve on; not implemented, and dominated by lambda for mixed addition.

  • [galbraith-lin-scott-2009] S. D. Galbraith, X. Lin, M. Scott. Endomorphisms for Faster Elliptic Curve Cryptography on a Large Class of Curves. Advances in Cryptology – EUROCRYPT 2009, LNCS 5479, pp. 518–535. https://doi.org/10.1007/978-3-642-01001-9_30

    GLS curves: over , quadratic twists of curves defined over , with an endomorphism , . For binary curves, and in , as in binary.122-gls. The endomorphism speeds scalar multiplication, which this workload does not perform; what the family gains here is a curve constant in , so each multiplication by it costs two word products instead of three. Its rho penalty is in the security section.

  • [bernstein-lange-farashahi-2008] D. J. Bernstein, T. Lange, R. Rezaeian Farashahi. Binary Edwards Curves. Cryptographic Hardware and Embedded Systems – CHES 2008, LNCS 5154, pp. 244–265. https://doi.org/10.1007/978-3-540-85053-3_16

    Binary Edwards curves: the complete model in characteristic 2. For every ordinary curve over is birationally equivalent to a complete binary Edwards curve (Theorem 4.3), so the model is available for every certified binary curve and the exclusion is one of cost. Mixed addition costs (projective ; for , with no mixed variant of lower cost) against for the unscaled formulas of pornin-2022. No direct map to the model with a demonstrated advantage was found, and generic projective equality costs about against to on the representations; neither is a lower bound for a cached or quotient representation. Excluded on these inspected operation counts under equal field arithmetic; not implemented or measured, so the exclusion is a prioritization, not a lower bound. The forms, of lower cost, have in the birational Weierstrass model, and so ; the certified binary curves, with and odd, require .

  • [kim-lee-negre-2014] K. H. Kim, C. O. Lee, C. Negre. Binary Edwards Curves Revisited. Progress in Cryptology – INDOCRYPT 2014, LNCS 8885, pp. 393–408. https://doi.org/10.1007/978-3-319-13039-2_23

    Revisits binary Edwards arithmetic and keeps completeness on complete curves (). For general , projective addition costs (the paper’s baseline for the 2008 formulas, from the EFD, is ), mixed addition and doubling . The forms (projective addition , mixed ) and the complete differential addition-and-doubling at exist exactly when the curve has a rational point of order 4 (Lemma 1), so not on the certified curves; the differential formulas also assume a fixed difference (and when ). Mixed addition stays near twice the of pornin-2022 with dense constants, and the differential result does not implement an arbitrary cell update.

  • [bernstein-2009] D. J. Bernstein. Batch Binary Edwards. Advances in Cryptology – CRYPTO 2009, LNCS 5677, pp. 317–336. https://doi.org/10.1007/978-3-642-03356-8_19
    [koziel-azarderakhsh-mozaffari-2015] B. Koziel, R. Azarderakhsh, M. Mozaffari-Kermani. Low-Resource and Fast Binary Edwards Curves Cryptography. Progress in Cryptology – INDOCRYPT 2015, LNCS 9462, pp. 347–369. https://doi.org/10.1007/978-3-319-26617-6_19
    [koziel-bec-small] B. Koziel, R. Azarderakhsh, M. Mozaffari-Kermani. BEC_Small: SageMath Verification of Binary Edwards Differential Addition. GitHub repository, commit f252fd653354466abfc36416dbf74379f11fce05. Companion to [koziel-azarderakhsh-mozaffari-2015]. https://github.com/briankoziel/BEC_Small
    [farias-albertini-barreto-2018] L. A. Farias, B. C. Albertini, P. S. L. M. Barreto. A Class of Safe and Efficient Binary Edwards Curves. Journal of Cryptographic Engineering 8(4), pp. 271–283, 2018. https://doi.org/10.1007/s13389-017-0174-5
    [loiseau-fournier-2018] A. Loiseau, J. J. A. Fournier. Binary Edwards Curves for Intrinsically Secure ECC Implementations for the IoT. Proceedings of the 15th International Joint Conference on e-Business and Telecommunications (SECRYPT 2018), pp. 625–631. https://doi.org/10.5220/0006831506250631
    [hajra-karati-sen-2026] R. Hajra, S. Karati, T. Sen. Binary Kummer Lines and Binary Edwards Curves: Efficient Two-way Vectorizations. ACM Asia Conference on Computer and Communications Security (ASIA CCS ’26), pp. 519–532, 2026. https://doi.org/10.1145/3779208.3807491

    The fast binary Edwards formulas are differential, in the coordinate , which identifies with : is computed from , and , as a Montgomery ladder supplies it. Batch Binary Edwards gives the mixed form at with chosen sparse so that multiplication by reduces to a few shifts and additions (bernstein-2009, section “Differential addition and doubling”); the later papers correct and re-cost these -formulas ( mixed, koziel-azarderakhsh-mozaffari-2015; koziel-bec-small is its Sage check), apply them with (farias-albertini-barreto-2018, Section 4), add the co-Z technique (loiseau-fournier-2018, Algorithm 2), and vectorize the ladder step with VPCLMULQDQ on a curve with sparse and cofactor 4 (hajra-karati-sen-2026, Table 2). A cell update adds an independent hashed point with no known difference, so none of these formulas applies to it; for generic dense parameters counts as a full , and the sparse-parameter specialization they rely on is not established for seed-derived curves.

  • [moloney-omahony-laurent-2010] R. Moloney, A. O’Mahony, P. Laurent. Efficient Implementation of Elliptic Curve Point Operations Using Binary Edwards Curves. Cryptology ePrint Archive, Paper 2010/208. https://eprint.iacr.org/2010/208

    The explicit birational maps between a Weierstrass curve and its complete binary Edwards curve, with their exceptional points (Section 3): the conversion a hashed Weierstrass or point would need to enter the model. The affine conversion uses rational functions; their denominators may be inverted in a batch or retained in projective coordinates. No conversion cost has been measured here.

  • [hirschfeld-batten-amain-2018] S. T. E. Hirschfeld, L. M. Batten, M. K. I. Amain. Efficiencies in Binary Elliptic Curves. Computational Science and Its Applications – ICCSA 2018, LNCS 10964, pp. 246–260. https://doi.org/10.1007/978-3-319-95174-4_21
    [li-et-al-2019] J. Li, S. Zhong, Z. Li, S. Cao, J. Zhang, W. Wang. Speed-Oriented Architecture for Binary Field Point Multiplication on Elliptic Curves. IEEE Access 7, pp. 32048–32060, 2019. https://doi.org/10.1109/ACCESS.2019.2903170

    A survey of binary-curve implementation choices that restates Theorem 4.3 and the operation-count comparison, and an FPGA Montgomery-ladder architecture for binary curves: the hardware side of the differential results, with no arbitrary-addition formula.

  • [kohel-2012] D. Kohel. Efficient Arithmetic on Elliptic Curves in Characteristic 2. Progress in Cryptology – INDOCRYPT 2012, LNCS 7668, pp. 378–398. https://doi.org/10.1007/978-3-642-34931-7_22
    [wu-tang-feng-2012] H. Wu, C. Tang, R. Feng. A New Model of Binary Elliptic Curves. Progress in Cryptology – INDOCRYPT 2012, LNCS 7668, pp. 399–411. https://doi.org/10.1007/978-3-642-34931-7_23
    [wu-2026] H. Wu. A New Characteristic-Uniform Model for Elliptic Curves – Theory, Arithmetic, and Applications. arXiv:2608.01675 [math.NT], 2026. https://doi.org/10.48550/arXiv.2608.01675

    Other binary normal forms considered: Kohel’s form (addition ) requires a rational 4-torsion point, which the certified curves of order lack; the Wu–Tang–Feng model is unified, not complete, at . The Wu 2026 preprint proposes a characteristic-uniform model; its addition counts were not evaluated here.

Odd-characteristic curve models and addition formulas

  • [edwards-2007] H. M. Edwards. A Normal Form for Elliptic Curves. Bulletin of the American Mathematical Society 44(3), pp. 393–422, 2007. https://doi.org/10.1090/S0273-0979-07-01153-6
    [bernstein-lange-2007] D. J. Bernstein, T. Lange. Faster Addition and Doubling on Elliptic Curves. Advances in Cryptology – ASIACRYPT 2007, LNCS 4833, pp. 29–50. https://doi.org/10.1007/978-3-540-76900-2_3

    The Edwards normal form and its complete addition law when is a non-square: the edwards family, with drawn per salt.

  • [bernstein-et-al-2008] D. J. Bernstein, P. Birkner, M. Joye, T. Lange, C. Peters. Twisted Edwards Curves. Progress in Cryptology – AFRICACRYPT 2008, LNCS 5023, pp. 389–405. https://doi.org/10.1007/978-3-540-68164-9_26
    [hisil-et-al-2008] H. Hisil, K. K.-H. Wong, G. Carter, E. Dawson. Twisted Edwards Curves Revisited. Advances in Cryptology – ASIACRYPT 2008, LNCS 5350, pp. 326–343. https://doi.org/10.1007/978-3-540-89255-7_20

    Twisted Edwards curves and extended coordinates. With a square, the addition is complete and a cached addend costs ; this is the twisted family’s accumulator, and the reason it requires .

  • [renes-costello-batina-2016] J. Renes, C. Costello, L. Batina. Complete Addition Formulas for Prime Order Elliptic Curves. Advances in Cryptology – EUROCRYPT 2016, LNCS 9665, pp. 403–428. https://doi.org/10.1007/978-3-662-49890-3_16

    Complete projective formulas for prime-order short Weierstrass curves, for mixed addition: the weier family’s accumulator, and the cost of completeness when the order has no cofactor to quotient away.

  • [efd] D. J. Bernstein, T. Lange. Explicit-Formulas Database. https://hyperelliptic.org/EFD/

    The Explicit-Formulas Database: the named formulas (madd-2007-bl, dbl-2001-b) in curve::weier::jacobian and the operation counts quoted in the module documentation.

  • [montgomery-1987] P. L. Montgomery. Speeding the Pollard and Elliptic Curve Methods of Factorization. Mathematics of Computation 48(177), pp. 243–264, 1987. https://doi.org/10.1090/S0025-5718-1987-0866113-7

    Montgomery curves and simultaneous inversion. The inversion method is field::batch, which every batch sum and batch normalization uses; the Montgomery model is the form in which edwards points travel and are summed in batches by the affine chord law.

  • [farashahi-fadavi-sabbaghian-2024] R. Rezaeian Farashahi, M. Fadavi, S. Sabbaghian. Faster Complete Addition Laws for Montgomery Curves. IACR Transactions on Cryptographic Hardware and Embedded Systems 2024(4), pp. 737–762, 2024. https://doi.org/10.46586/tches.v2024.i4.737-762
    [kim-et-al-2019] J. Kim, J. H. Park, D.-C. Kim, W.-H. Kim. Complete Addition Law for Montgomery Curves. Information Security and Cryptology – ICISC 2019, LNCS 11975, pp. 260–277, 2020. https://doi.org/10.1007/978-3-030-40921-0_16

    Complete addition on Montgomery curves: in 2019, then extended Montgomery coordinates with multiplication-free maps to and from extended twisted Edwards coordinates. The extended Montgomery laws correspond to twisted Edwards laws through these maps, so the model change alone gives no field-multiplication saving for the corresponding full additions. The remaining practical comparisons concern cached operands, preparation and conversion, and implementation scheduling.

  • [bernstein-lange-2007-inverted] D. J. Bernstein, T. Lange. Inverted Edwards Coordinates. Applied Algebra, Algebraic Algorithms and Error-Correcting Codes (AAECC-17), LNCS 4851, pp. 20–27, 2007. https://doi.org/10.1007/978-3-540-77224-8_4

    Inverted Edwards coordinates, superseded for addition by the extended coordinates of hisil-et-al-2008.

  • [goundar-joye-miyaji-2010] R. R. Goundar, M. Joye, A. Miyaji. Co-Z Addition Formulæ and Binary Ladders on Elliptic Curves. Cryptographic Hardware and Embedded Systems – CHES 2010, LNCS 6225, pp. 65–79. https://doi.org/10.1007/978-3-642-15031-9_5
    [kim-et-al-2020] K. H. Kim, J. Choe, S. Y. Kim, N. Kim, S. Hong. Speeding Up Regular Elliptic Curve Scalar Multiplication without Precomputation. Advances in Mathematics of Communications 14(4), pp. 703–726, 2020. https://doi.org/10.3934/amc.2020090

    Co-Z Jacobian formulas and Montgomery-ladder scalar multiplication on short Weierstrass curves over fields of characteristic other than 2 and 3, built on differential addition-and-doubling. Scalar multiplication, which the workload does not perform.

Prime fields

  • [scott-2024] M. Scott. Elliptic Curve Cryptography for the Masses: Simple and Fast Finite Field Arithmetic. Cryptology ePrint Archive, Paper 2024/779. https://eprint.iacr.org/2024/779

    Reduction for shaped primes: Mersenne (, , ), pseudo-Mersenne (, ) and generalized Mersenne (Goldilocks). Every odd field here has one of these shapes; the paper indicates what generated or assembly code could gain over the portable implementations timed.

  • [polygon-zero-2022] Polygon Zero Team. Plonky2: Fast Recursive Arguments with PLONK and FRI. Draft, plonky2 repository. 7 September 2022. https://github.com/0xPolygonZero/plonky2/blob/main/plonky2/plonky2.pdf
    [plonky3] Polygon. Plonky3: A Toolkit for Polynomial IOPs. GitHub repository. https://github.com/Plonky3/Plonky3

    The Goldilocks prime and the implementation field::goldilocks2 uses for its base field and binomial extension. Its 2-adicity of 32, chosen for FFTs, makes square roots slower than over ; the goldilocks2 rows measure that cost.

  • [bruestle-gafni-2023] J. Bruestle, P. Gafni, RISC Zero Team. RISC Zero zkVM: Scalable, Transparent Arguments of RISC-V Integrity. RISC Zero, draft. 11 August 2023. https://dev.risczero.com/proof-system-in-detail.pdf
    [haboeck-levit-papini-2024] U. Haböck, D. Levit, S. Papini. Circle STARKs. Cryptology ePrint Archive, Paper 2024/278. https://eprint.iacr.org/2024/278

    BabyBear and the Mersenne prime , the 31-bit fields of current STARK systems. Reaching points over a 31-bit prime needs an extension of degree 4, which admits the heuristic index-calculus asymptotic of gaudry-2009, below the generic . Group size alone therefore does not justify the target security, and these fields are excluded from the comparison.

Repository organization

  • Field arithmetic: representations, arithmetic backends, and batch inversion.
  • Curves: group laws, coordinate systems, hash maps, and encodings.
  • Group capabilities: the operations consumed by ECMH, the RIBLT workload, and the benchmarks.
  • Benchmarks and reporting tools.
  • results/: the published benchmark runs, each in the compact form described in Measurement methodology, from which the site renders one chapter per run. bench-runs/, where runs are recorded, is not under version control.
  • Tests: known-answer tests against the reference programs’ fixtures, point counts against PARI, and the certificate corpus. Every recorded fixture opens with how it was produced: the generated tests/common/*.rs with the Sage command that rewrites them, the corpus tests/fixtures/cert_corpus.txt with the test that records and checks it, and the report’s report/tests/fixtures/*.tsv with the run and derivation they come from, as far as these were recorded.
  • Nix: the pinned toolchains and the derivations for the package, checks, benchmark executables, reports, assembly listings, and this site; nix run .#validate-commits -- RANGE runs the checks at every commit of a range, as the continuous integration does for each commit a push or pull request adds.
  • Documents: the chapters; docs/index.md gives their order.
  • Reference programs: the known-answer-test generators and order proofs the Rust fixtures come from (kat*.sage, prove_orders.sage, agm_vectors.sage, sieve.sage, gf2_*.sage), and the surveys behind the choice of fields and curves: candidate field sizes (field_sizes.sage), GLS fields (gls_survey.sage), Weil descent (ghs.sage, ghs122.sage), and complete Edwards curves over pseudo-Mersenne primes (edwards_search.py).