#!/usr/bin/env sage import sys import os from sage.all import * def dump_point(P): xy = P.xy() xyh = map(lambda v:hex(int(v))[2:-1], xy) return xyh[0] + " " + xyh[1] # PTWIST-168 prime curve p = 2**168 - 2**8 - 1 F = GF(p) b = 114301813541519167821195403070898020343878856329174 x = 2 y = 342581008510239659405023808572191026457361540109042 r = 374144419156711147060143343079555958890598677719703 E = EllipticCurve(F, [-3, b]) print E P = E.random_point() Q = E.random_point() s = F.random_element() cmd = "./ptwist168 " + dump_point(P) + " " + dump_point(Q) + " " + hex(int(s))[2:-1] print cmd os.system(cmd) P2 = 2*P PQ = P+Q for i in xrange(1000): P = int(s)*P print dump_point(P2) print dump_point(PQ) print dump_point(P)