Point_addition_jacobi_mont.txt 1.89 KB
Newer Older
Aaisha Ghodekar's avatar
Aaisha Ghodekar committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
def Pointaddition_Jacobi_Mont(x1,y1,z1,x2,y2,z2,PRECISION):
r=(2^PRECISION).__xor__(n); rpoly = str_to_poly(r)
	r2poly = rpoly * rpoly; r2 = poly_to_str(r2poly)
	rinvpoly = rpoly^-1; rinv = poly_to_str(rinvpoly)

x1_poly = str_to_poly(x1)
y1_poly = str_to_poly(y1)
z1_poly = str_to_poly(b1)
x2_poly = str_to_poly(x2)
y2_poly = str_to_poly(y2)
z2_poly = str_to_poly(z2)

x1_poly_MD = x1_poly * r2poly * rinvpoly
y1_poly_MD = y1_poly * r2poly * rinvpoly
z1_poly_MD = z1_poly * r2poly * rinvpoly
x2_poly_MD = x2_poly * r2poly * rinvpoly
y2_poly_MD = y2_poly * r2poly * rinvpoly
z2_poly_MD = z2_poly * r2poly * rinvpoly

o1_poly_MD = z1_poly_MD * z1_poly_MD * rinvpoly
b_poly_MD = x2_poly_MD * o1_poly_MD * rinvpoly
c1_poly_MD = y2_poly_MD * o1_poly_MD * rinvpoly
d_poly_MD = c1_poly_MD * z1_poly_MD * rinvpoly

e_poly_MD = x1_poly_MD + b_poly_MD * rinvpoly
f_poly_MD = y1_poly_MD + d_poly_MD * rinvpoly
z3_poly_MD = e_poly_MD * z1_poly_MD * rinvpoly

c2_poly_MD = f_poly_MD * x2_poly_MD * rinvpoly
c3_poly_MD = z3_poly_MD * y2_poly_MD * rinvpoly
h_poly_MD = c2_poly_MD + c3_poly_MD  * rinvpoly
i_poly_MD = f_poly_MD + z3_poly_MD * rinvpoly
g_poly_MD = e_poly_MD + z1_poly_MD * rinvpoly
c4_poly_MD = a_poly_MD * g_poly_MD * rinvpoly
c5_poly_MD = f_poly_MD * i_poly_MD * rinvpoly
c6_poly_MD = e_poly_MD * e_poly_MD * rinvpoly
c9_poly_MD = c4_poly_MD + c5_poly_MD * rinvpoly
c10_poly_MD = c6_poly_MD * e_poly * rinvpoly
x3_poly_MD = c9_poly_MD + c10_poly_MD * rinvpoly

c7_poly_MD = i_poly_MD * x3_poly_MD * rinvpoly
c8_poly_MD = g_poly _MD* h_poly_MD * rinvpoly
y3_poly_MD = c7_poly_MD + c8_poly_MD * rinvpoly


print 'x3_MD=',poly_to_str(x3_poly_MD)
print 'y3_MD=',poly_to_str(y3_poly_MD)
print 'z3_MD=',poly_to_str(z3_poly_MD)


#formulas:
      #O1 = Z12
      #B = X2*O1
      #D = Y2*O1*Z1
      #E = X1+B
      #F = Y1+D
      #Z3 = E*Z1
      #H = F*X2+Z3*Y2
      #I = F+Z3
      #G = Z32
      #X3 = a2*G+F*I+E*E2
      #Y3 = I*X3+G*H