Processing math: 100%

First time here? Check out the FAQ!

Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

asked 7 years ago

Shalec gravatar image

How to defining a twist on an elliptic curve

Hey, I would like to do map points of the ellitptic curve E(Fpk) to its twist. I am able to define the twist on a mathematical way, but it returns always errors. I will give you a M(n)WE:

Aim: Get a generator of a r-torsion subgroup of E, lift that to E16 and twist it down to E4, to get a r-torsion subgroup-generator of E4.

MWE

Mathematical definition:

E(Fp16):y2=x3+x and its quartic twist E(Fp4):y2=x3+21/4x. The point mapping is defined as ψ:EE,(x,y,z)(21/2x,23/4y,z).

Define the fields and curves

p= 13
r=5
R=GF(p)
_.<x> = PolynomialRing(R)
R4.<x> = R.extension(x^4 - 2, 'x')
_.<y> = PolynomialRing(R)
R16.<y> = R.extension(y^16 -2, 'y')
_.<z> = PolynomialRing(R4)
R16_over_R4.<z> = R4.extension(z^4-x, 'z')

E = EllipticCurve(R, [1,0]) # y^2 = x^3+x
E4 = EllipticCurve(R4, [x,0])
E16 = EllipticCurve(R16, [1,0])

Defining the point and pre-computations

k= ZZ(E.order()/r) # since E.order()*P = (0:1:0), we can trick with that
b=R16(2^(-1)); b= sqrt(sqrt(2)) #the twisting parameter, that is a square in R4 and R16
P= E.gens()[0]
Q=k*P # check if Q != E((0,1,0)), if yes its a r-torsion point. 
Q16 = E16(Q) #raise Q

The not working twist

#twist
E4( (Q16[0]*b^2, Q16[1]*b^3))

How to defining a twist on an elliptic curve

Hey, I would like to do map points of the ellitptic curve E(Fpk) to its twist. I am able to define the twist on a mathematical way, but it returns always errors. I will give you a M(n)WE:

Aim: Get a generator of a r-torsion subgroup of E, lift that to E16 and twist it down to E4, to get a r-torsion subgroup-generator of E4.

MWE

Mathematical definition:

E(Fp16):y2=x3+x and its quartic twist E(Fp4):y2=x3+21/4x. The point mapping is defined as ψ:EE,(x,y,z)(21/2x,23/4y,z).

Define the fields and curves

p= 13
r=5
R=GF(p)
_.<x> = PolynomialRing(R)
R4.<x> = R.extension(x^4 - 2, 'x')
_.<y> = PolynomialRing(R)
R16.<y> = R.extension(y^16 -2, 'y')
_.<z> = PolynomialRing(R4)
R16_over_R4.<z> = R4.extension(z^4-x, 'z')

E = EllipticCurve(R, [1,0]) # y^2 = x^3+x
E4 = EllipticCurve(R4, [x,0])
E16 = EllipticCurve(R16, [1,0])

Defining the point and pre-computations

k= ZZ(E.order()/r) # since E.order()*P = (0:1:0), we can trick with that
b=R16(2^(-1)); b= sqrt(sqrt(2)) #the twisting parameter, that is a square in R4 and R16
P= E.gens()[0]
Q=k*P # check if Q != E((0,1,0)), if yes its a r-torsion point. 
Q16 = E16(Q) #raise Q

The not working twist

#twist
E4( (Q16[0]*b^2, Q16[1]*b^3))

Sage is able to compute the quartic twist of its own, but I do not recieve the right twist, that I had computed by hand ( E ). Using

E4.quartic_twist(v^-1)
click to hide/show revision 3
retagged

updated 6 years ago

FrédéricC gravatar image

How to defining a twist on an elliptic curve

Hey, I would like to do map points of the ellitptic curve E(Fpk) to its twist. I am able to define the twist on a mathematical way, but it returns always errors. I will give you a M(n)WE:

Aim: Get a generator of a r-torsion subgroup of E, lift that to E16 and twist it down to E4, to get a r-torsion subgroup-generator of E4.

MWE

Mathematical definition:

E(Fp16):y2=x3+x and its quartic twist E(Fp4):y2=x3+21/4x. The point mapping is defined as ψ:EE,(x,y,z)(21/2x,23/4y,z).

Define the fields and curves

p= 13
r=5
R=GF(p)
_.<x> = PolynomialRing(R)
R4.<x> = R.extension(x^4 - 2, 'x')
_.<y> = PolynomialRing(R)
R16.<y> = R.extension(y^16 -2, 'y')
_.<z> = PolynomialRing(R4)
R16_over_R4.<z> = R4.extension(z^4-x, 'z')

E = EllipticCurve(R, [1,0]) # y^2 = x^3+x
E4 = EllipticCurve(R4, [x,0])
E16 = EllipticCurve(R16, [1,0])

Defining the point and pre-computations

k= ZZ(E.order()/r) # since E.order()*P = (0:1:0), we can trick with that
b=R16(2^(-1)); b= sqrt(sqrt(2)) #the twisting parameter, that is a square in R4 and R16
P= E.gens()[0]
Q=k*P # check if Q != E((0,1,0)), if yes its a r-torsion point. 
Q16 = E16(Q) #raise Q

The not working twist

#twist
E4( (Q16[0]*b^2, Q16[1]*b^3))

Sage is able to compute the quartic twist of its own, but I do not recieve the right twist, that I had computed by hand ( E ). Using

E4.quartic_twist(v^-1)