p=randomprime(2^100) a=Mod(17,p); a^(p-1) \\ exponentiation a.mod lift(a) \\lift to Z P=ffinit(13,2) polisirreducible(P) a=ffgen(P,'a) a=ffgen(13^2,'a); b = a^2+3*a+2 b.pol b.mod [b.p, b.f] ffgen(b) c = ffgen(3^8,'c); d = random(c) \\random element in the field issquare(d) trace(d) \\over F_3 norm(d) minpoly(d^82) factor(x^5+x^3+c) R=polrootsmod(x^7+x+c) subst(x^7+x+c,x,R) fforder(c) z = ffprimroot(c) fforder(z) n = fflog(c,z) z^n d = ffgen([3,24],'d) Mcd = ffembed(c,d); \\calcul un plongement de c dans b ffembed(d,c) c2 = ffmap(Mcd,c^5+c+1) \\applique le plongement F = fffrobenius(d,8); \\8-éme puissance du Frobenius ffmap(F, d) == d^(3^8) ffmap(F, c2) == c2 T = x^3+d*x+1; polisirreducible(T) [e,Mde] = ffextend(d, T, 'e); e.f fforder(e) ffmap(Mde, d) Mce = ffcompomap(Mde,Mcd); ffmap(Mce, c) == ffmap(Mde, ffmap(Mcd, c)) ffcompomap(F,Mcd) == Mcd ffcompomap(F,F) == fffrobenius(d,16) Mdc = ffinvmap(Mcd); ffmap(Mdc, ffmap(Mcd, c^3+c+1)) Mec = ffcompomap(Mdc, ffinvmap(Mde)); ffmap(Mec, ffmap(Mce, c)) ffinvmap(fffrobenius(c,3)) == fffrobenius(c,5) ffmap(Mdc, d) rd = ffmaprel(Mdc, d) sd = ffmaprel(Mdc, d^4+1) trace(rd) norm(rd) [norm(norm(rd)), norm(d)] minpoly(rd) minpoly(sd) nf = nfinit(y^8-2*y^7+9*y^6-2*y^5+38*y^4-34*y^3\ +31*y^2-6*y+1); pr = idealprimedec(nf,2)[2]; [pr.e,pr.f] modpr = nfmodprinit(nf,pr,'z); \\ calcule le morphisme vers F2[z] g = nfmodpr(nf,y,modpr) nfmodpr(nf,y^2+1,modpr) nfmodprlift(nf,g+1,modpr) \\trouve une préimage E=ellinit([a4,a6]); E=ellinit([a1,a2,a3,a4,a6]); u = ffgen([101,2],'u); E = ellinit([10,81*u+94],u); ellcard(E) \\ cardinal de E(F_q) P = random(E) \\ point aléatoire sur E(F_q) Q = random(E) \\ Un autr epoint aléatoire sur E(F_q) ellisoncurve(E, P) \\ vérifie que le point est sur la courbe elladd(E, P, Q) \\ P+Q dans E ellmul(E, P, 100) \\ 100.P dans E ellorder(E,P) \\ordre de P [d1,d2]=ellgroup(E) \\ structure de E(F_q) [G1,G2] = ellgenerators(E) ellorder(E,G1) w = ellweilpairing(E,G1,G2,d1) fforder(w) t = elltatepairing(E,G2,G1,d2)^((101^2-1)/d2) fforder(t) e = random(d1); S = ellmul(E,P,e) elllog(E,S,P) e Et = elltwist(E); Et[1..5] \\ retourne le twist non-trivial ellap(E) ellap(Et) P3 = ellmul(E,G1,d1/3); ellorder(E,P3) [eq,iso] = ellisogeny(E,P3); eq iso G1q = ellisogenyapply(iso, G1) Eq = ellinit(eq); ellorder(Eq, G1q)