Group Hash
Elligator can be applied to map a field element to a curve point. The map can be applied once to derive a curve point suitable for use with computational Diffie-Hellman (CDH) challenges, and twice to derive a curve point indistinguishable from random.
In the following section, and are the curve parameters as described here. is a constant and sqrt_ratio_zeta(v_1,v_2)
is a function, both defined in the Inverse Square Roots section.
The Elligator map is applied as follows to a field element :
-
.
-
.
-
.
-
sqrt_ratio_zeta
where is a boolean indicating whether or not a square root exists for the provided input. -
If a square root for does not exist, then and . Else, and is unchanged.
-
.
-
.
-
If ( and is true) or ( and is false) then .
The Jacobi quartic representation of the resulting point is given by . The resulting point can be converted from its Jacobi quartic representation to extended projective coordinates via:
For single-width hash-to-group (encode_to_curve
), we apply the above map once. For double-width (hash_to_curve
) we apply the map to two field elements and add the resulting curve points.