Fast subgroup checks used by EIP-2537
Fast subgroup checks used by EIP-2537
Fields and Groups
Field Fp is defined as the finite field of size p
with elements represented as integers between 0 and p-1 (both inclusive).
Field Fp2 is defined as Fp[X]/(X^2-nr2)
with elements el = c0 + c1 * v
, where v
is the formal square root of nr2
represented as integer pairs (c0,c1)
.
Group G1 is defined as a set of Fp pairs (points) (x,y)
such that either (x,y)
is (0,0)
or x,y
satisfy the curve Fp equation.
Group G2 is defined as a set of Fp2 pairs (points) (x', y')
such that either (x', y')
is (0,0)
or (x', y')
satisfy the curve Fp2 equation.
Curve parameters
The set of parameters used by fast subgroup checks:
|x| (seed) = 15132376222941642752
x is negative = true
Cube root of unity modulo p - Beta = 793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350
r = 4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437 * v
s = 2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530 + 1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257 * v
Helper function to compute the conjugate over Fp2 - conjugate
conjugate(c0 + c1 * v) := c0 - c1 * v
G1 endomorphism - phi
The endomorphism phi
transform the point from (x,y)
to (Beta*x,y)
where Beta
is a precomputed cube root of unity modulo p
given above in parameters sections:
phi((x,y)) := (Beta*x,y)
G2 endomorphism - psi
psi((x,y)) := (conjugate(x)*r,conjugate(y)*s)
The G1 case
Before accepting a point P
as input that purports to be a member of G1 subject the input to the following endomorphism test: phi(P) + x^2*P = 0
The G2 case
Before accepting a point P
as input that purports to be a member of G2 subject the input to the following endomorphism test: psi(P) + x*P = 0
Resources
- https://eprint.iacr.org/2021/1130.pdf, sec.4
- https://eprint.iacr.org/2022/352.pdf, sec. 4.2