Ask Your Question

I want to find a generator set of the $l$-torsion points of an elliptic curve defined over a finite field $F_q$

asked 2021-07-13 21:39:58 +0200

M.Tawfik gravatar image

updated 2021-08-11 14:08:08 +0200

FrédéricC gravatar image

I have the elliptic curve $E: y^2=x^3+x$ defined over a field $F_q$ with $q=p^2$ for a certain prime $p$, and want to calculate the $l$-torsion points, or in other words $E[l]$, for an integer $l$ (probably a prime different from $p$.)

edit retag flag offensive close merge delete


Welcome to Ask Sage. Thank you for your question.

slelievre gravatar imageslelievre ( 2021-07-13 23:17:03 +0200 )edit

Ideally, provide a minimal concrete example, with code to define the objects, that can be copied and pasted in a fresh Sage session, leaving only the final step to answer.

slelievre gravatar imageslelievre ( 2021-07-13 23:18:13 +0200 )edit

p=18446744073709551667E = EllipticCurve(GF(p^2),[1,0]) E is an Elliptic Curve defined by y^2 = x^3 + x over Finite Field in z2 of size 18446744073709551667^2 and I want to find generators $P$ and $Q$ for $E[4999]$, but I can't find a suitable code.

M.Tawfik gravatar imageM.Tawfik ( 2021-07-14 15:09:05 +0200 )edit

use sage: p=E.torsion_polynomial(4999) maybe ?

FrédéricC gravatar imageFrédéricC ( 2021-07-14 19:59:49 +0200 )edit

1 Answer

Sort by » oldest newest most voted

answered 2021-07-15 22:27:25 +0200

M.Tawfik gravatar image

updated 2021-07-15 22:33:37 +0200

An answer could be as follows: 'p=18446744073709551667' then define the field 'K . < a >=GF(p^2)' over which we define the curve 'E = EllipticCurve(K,[1,0])'. Now use the code 'E.cardinality().factor()' to get the cardinality of $E$, which is $2^4 * 4999^2 * 922521708027083^2$. Use the code 'pts = E.gens()' to find the generators which turn out to be ${(3967812587828368975a + 7437411822947458617 : 16672546567636985011a + 14299206839437184441 : 1), (8681109523785822829a + 7072963597633280041 : 15515941078240688329a + 11174851755365315891 : 1)}$.

Let $P_1$ be the first point, that is 'P1=E(13308581970510900443a + 15361864644717267429, 12035351063104026383a + 6630581890190451124)' and use the code 'P1.order().factor()' to get the order of $P_1$, which is $2^2 * 4999 * 922521708027083$. Now, let 'Q1=2^2 * 922521708027083 * P1', then $Q_1$ is of the required order. We can repeat this with the other point.

edit flag offensive delete link more


To display blocks of code or error messages in Ask Sage, skip a line above and below, and do one of the following (all give the same result):

  • indent all code lines with 4 spaces
  • select all code lines and click the "code" button (the icon with '101 010')
  • select all code lines and hit ctrl-K

For instance, typing

If we define `f` by

    def f(x, y, z):
        return x * y * z

then `f(2, 3, 5)` returns `30` but `f(2*3*5)` gives:

    TypeError: f() takes exactly 3 arguments (1 given)


If we define f by

def f(x, y, z):
    return x * y * z

then f(2, 3, 5) returns 30 but f(2*3*5) gives:

TypeError: f() takes exactly 3 arguments (1 given)

You can edit your answer to do that.

slelievre gravatar imageslelievre ( 2021-07-17 23:50:22 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2021-07-13 21:38:36 +0200

Seen: 254 times

Last updated: Jul 15 '21