As far I understand it correctly, GF(Integer)
is used to declare a finite field which can for example be used for declaring an elliptic curve (this is what I want to do).
But why using a very large composite number (2 or 3 thousands bits long) like :
GF(12092909088188237225393433017559174875623137613219078327682045681675023350320878590139619158941453632724570634378148379186020109423506557278061404249513976103803771139954000579995199902828634263992330574392218791796266323480026479977659504287064359209036331389750395884727865805793574046154686347934603866375769645860851559671200189106819576945533990794197558448169154800495832790107673176422796675256499746815795625450299074794144048526198146639914021389804755241528331708078456200260597013666698340612446162656471808349941941036242500801205678881620332591272087635015318077794473705628671572713897714140224506269671672327501746902155512482220944778556374239955378577691861316356789180373125486706142640931817968722234080019888921817141837856053156323850750365255047978587780912486395587404967932864588640269696396456375831408999624015664858331115319294937654521467886227817728683577618500683880562054279134724944161)
seems to take too much time to be feasible ? What’s the workaround to declare a dummy elliptic curve using a finite‑field without using GF()
?
The underlying operation I want to do is to E_extend()
a point to the new curve which I thus need to declare using the EllipticCurve()
constructor where the finite field become the modulus. I don’t know the formula nor any language library that allows to do this outside SageMath.
3
This is an unfortunate consequence of the default constructor for finite fields. Because your field is a degree 12 extension of a prime field with large characteristic, Sage spends an insane amount of time to look for an irreducible polynomial of degree 12 with special properties (called a “pseudo-Conway polynomial” in Sage).
The workaround is to choose the modulus yourself, e.g., like this:
n = 12092909088188237225393433017559174875623137613219078327682045681675023350320878590139619158941453632724570634378148379186020109423506557278061404249513976103803771139954000579995199902828634263992330574392218791796266323480026479977659504287064359209036331389750395884727865805793574046154686347934603866375769645860851559671200189106819576945533990794197558448169154800495832790107673176422796675256499746815795625450299074794144048526198146639914021389804755241528331708078456200260597013666698340612446162656471808349941941036242500801205678881620332591272087635015318077794473705628671572713897714140224506269671672327501746902155512482220944778556374239955378577691861316356789180373125486706142640931817968722234080019888921817141837856053156323850750365255047978587780912486395587404967932864588640269696396456375831408999624015664858331115319294937654521467886227817728683577618500683880562054279134724944161
k = GF(n.prime_divisors()[0])
m = k['z'].irreducible_element(12)
K.<z> = k.extension(m)
8