Skip to content

Commit 471e3a1

Browse files
Merge #1800: sage: verify Eisenstein integer connection for GLV constants
29ac4d8 sage: verify Eisenstein integer connection for GLV constants (Justsomebuddy) Pull request description: ## Summary Add assertions to `gen_split_lambda_constants.sage` to verify that the GLV decomposition constants arise from the Eisenstein integer factorization of the group order N. Specifically: - `N = a^2 + a*b + b^2` (norm equation in Z[ω]) - `λ = b/a mod N` (eigenvalue from Z[ω]/(π) ≅ Z/NZ isomorphism) This addresses the suggestion in #1798 to document/verify the algebraic origin of these constants in the sage script rather than C comments. ## Details The group order N factors as N = π·π̄ in the Eisenstein integers Z[ω], where: - ω = (-1 + √-3)/2 is a primitive cube root of unity - π = a - b·ω is an Eisenstein prime with norm N(π) = a² + ab + b² The GLV constants (A1, B1) correspond to the Eisenstein factors (b, -a), and the endomorphism eigenvalue λ arises naturally as the image of ω under the quotient map Z[ω] → Z[ω]/(π) ≅ Z/NZ. Closes #1798 ACKs for top commit: real-or-random: utACK 29ac4d8 Tree-SHA512: 6c36dacac00baf513db447a14f49c91d434c80ed79f9282d080938e3e53d39f0b68d07d62900da648d817eba3777505e9ef9306bc129f4521f524b4c64bcda49
2 parents 4721e07 + 29ac4d8 commit 471e3a1

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

sage/gen_split_lambda_constants.sage

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@ assert (A1 + A2)/2 < sqrt(N)
8181
assert B1 < sqrt(N)
8282
assert B2 < sqrt(N)
8383

84+
# Verify connection to Eisenstein integers Z[w] where w = (-1 + sqrt(-3))/2.
85+
# The group order N factors as N = pi * conj(pi) in Z[w], where pi = A - B*w
86+
# is an Eisenstein prime with norm A^2 + A*B + B^2. The GLV endomorphism
87+
# eigenvalue LAMBDA equals B/A mod N, which is the image of w^2 under the
88+
# isomorphism Z[w]/(pi) -> Z/NZ (since w -> A/B and (A/B)^2 = B/A in Z/NZ).
89+
A_EIS, B_EIS = -B1, A1
90+
assert A_EIS**2 + A_EIS*B_EIS + B_EIS**2 == N
91+
assert Z(B_EIS / A_EIS) == LAMBDA
92+
8493
G1 = round((2**384)*B2/N)
8594
G2 = round((2**384)*(-B1)/N)
8695

0 commit comments

Comments
 (0)