Lecture 2 Group law on Edwards curves
ubuntu2404
Kernel: SageMath 10.7
For the sake of comparison we first give formulas for Weierstrass curves in projective coordinates; scroll down to see the formulas for Edwards curves
In [3]:
In [4]:
In [5]:
Out[5]:
Timing add_affine on random points...
7.23 µs ± 1.59 µs per loop (mean ± std. dev. of 7 runs, 30,000 loops each)
Timing add_add_affine on equal points...
10.5 µs ± 1.94 µs per loop (mean ± std. dev. of 7 runs, 30,000 loops each)
Testing dbl_affine...
9.55 µs ± 2.08 µs per loop (mean ± std. dev. of 7 runs, 30,000 loops each)
Timing add_projective on random points...
21.1 µs ± 2.33 µs per loop (mean ± std. dev. of 7 runs, 30,000 loops each)
Timing add_projective on equal points...
30.5 µs ± 7.94 µs per loop (mean ± std. dev. of 7 runs, 30,000 loops each)
Testing dbl_projective...
16.4 µs ± 3.64 µs per loop (mean ± std. dev. of 7 runs, 30,000 loops each)
Note that distinct triples of proejctive coordinates may define the same projective point. To compare points for equality we need to use the equal_projective function above (which also works for Edwards curves)
In [6]:
Out[6]:
R1 = (3700990568455897633934789149853022252800072324080687039310294227107402700990, 70850946943657941838890836291631900814810231276012538597562944485352533389078, 59481795999559089519607905122756226883070510618118212523034329942878579717382)
R2 = (69534562652037679164451800766965947145288869952365958328529963878041749287879, 2384606276835634959495753625187068583278711000434106770277313619796618599791, 13753757220934487278778684794062742515018431658328432844805928162270572271487)
R1 == R2: False
equal_projective(R1,R2): True
In [7]:
In [8]:
Out[8]:
Affine points on Edwards curve x^2 + y^2 = 1 + 3x^2y^2 over F_17
[0, 1]
[0, 16]
[1, 0]
[2, 5]
[2, 12]
[3, 4]
[3, 13]
[4, 3]
[4, 14]
[5, 2]
[5, 15]
[7, 7]
[7, 10]
[10, 7]
[10, 10]
[12, 2]
[12, 15]
[13, 3]
[13, 14]
[14, 4]
[14, 13]
[15, 5]
[15, 12]
[16, 0]
In [11]:
Out[11]:
Timing add_edwards on random points...
11.6 µs ± 1.68 µs per loop (mean ± std. dev. of 7 runs, 30,000 loops each)
Timing add_edwards on equal points...
9.24 µs ± 1.15 µs per loop (mean ± std. dev. of 7 runs, 30,000 loops each)
Timing dbl_edwards...
9.16 µs ± 1.67 µs per loop (mean ± std. dev. of 7 runs, 30,000 loops each)
In [0]: