Skip to content

Commit 72949d4

Browse files
committed
Remove mutable
1 parent 819d299 commit 72949d4

File tree

1 file changed

+34
-31
lines changed

1 file changed

+34
-31
lines changed

src/EllipticCurves.jl

+34-31
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ struct EllipticCurve
66
end
77

88

9-
mutable struct EllipticPoint
9+
struct EllipticPoint
1010
x::BigInt
1111
y::BigInt
1212
end
@@ -17,17 +17,17 @@ function isInfinityPoint(P::EllipticPoint)
1717
end
1818

1919

20-
function double(P::EllipticPoint, E::EllipticCurve)
20+
function double(P::EllipticPoint, E::EllipticCurve)::EllipticPoint
2121
if isInfinityPoint(P)
2222
return P
2323
end
2424

2525
g::BigInt, inv::BigInt, _ = gcdx(2 * P.y, E.n)
26-
if g != 1
27-
return g
28-
elseif g == E.n
29-
return InfinityPoint()
30-
end
26+
# if g != 1
27+
# return g
28+
# elseif g == E.n
29+
# return InfinityPoint()
30+
# end
3131

3232
lambda::BigInt = mod((3 * P.x^2 + E.a) * inv, E.n)
3333
new_x::BigInt = mod(lambda^2 - 2 * P.x, E.n)
@@ -37,7 +37,7 @@ function double(P::EllipticPoint, E::EllipticCurve)
3737
end
3838

3939

40-
function add(P::EllipticPoint, Q::EllipticPoint, E::EllipticCurve)
40+
function add(P::EllipticPoint, Q::EllipticPoint, E::EllipticCurve)::EllipticPoint
4141
if isInfinityPoint(P)
4242
return Q
4343
elseif isInfinityPoint(Q)
@@ -48,18 +48,18 @@ function add(P::EllipticPoint, Q::EllipticPoint, E::EllipticCurve)
4848
return double(P, E)
4949
end
5050

51-
delta_x = mod(Q.x - P.x, E.n)
52-
g, inv, _ = gcdx(delta_x, E.n)
53-
if 1 < g < E.n
54-
return g
55-
elseif g == E.n
56-
return InfinityPoint()
57-
end
51+
@time delta_x = mod(Q.x - P.x, E.n)
52+
@time g::BigInt, inv::BigInt, _ = gcdx(delta_x, E.n)
53+
# if 1 < g < E.n
54+
# return g
55+
# elseif g == E.n
56+
# return InfinityPoint()
57+
# end
5858

59-
delta_y = mod(Q.y - P.y, E.n)
60-
lambda = mod(delta_y * inv, E.n)
61-
new_x = mod(lambda^2 - P.x - Q.x, E.n)
62-
new_y = mod(lambda * (P.x - new_x) - P.y, E.n)
59+
@time delta_y = mod(Q.y - P.y, E.n)
60+
@time lambda = mod(delta_y * inv, E.n)
61+
@time new_x = mod(lambda^2 - P.x - Q.x, E.n)
62+
@time new_y = mod(lambda * (P.x - new_x) - P.y, E.n)
6363

6464
return EllipticPoint(new_x, new_y)
6565
end
@@ -71,19 +71,19 @@ function InfinityPoint()
7171
end
7272

7373

74-
function multiply(k::BigInt, P::EllipticPoint, E::EllipticCurve)
74+
function multiply(k::BigInt, P::EllipticPoint, E::EllipticCurve)::EllipticPoint
7575
Q = InfinityPoint()
7676

77-
for b in string(k, base = 2)
77+
@inbounds for b in string(k, base = 2)
7878
Q = double(Q, E)
79-
if typeof(Q) != EllipticPoint
80-
return Q
81-
end
79+
# if typeof(Q) != EllipticPoint
80+
# return Q
81+
# end
8282
if b == '1'
8383
Q = add(Q, P, E)
84-
if typeof(Q) != EllipticPoint
85-
return Q
86-
end
84+
# if typeof(Q) != EllipticPoint
85+
# return Q
86+
# end
8787
end
8888
end
8989
return Q
@@ -101,9 +101,12 @@ function test_add()
101101
gy = big"36134250956749795798585127919587881956611106672985015071877198253568414405109"
102102
P = EllipticPoint(gx, gy)
103103

104-
for i=1:100000
105-
P = add(P, P, E)
106-
end
104+
P = add(P, P, E)
105+
P = add(P, P, E)
106+
P = add(P, P, E)
107+
# for i=1:100000
108+
# P = add(P, P, E)
109+
# end
107110
end
108111

109112

@@ -128,4 +131,4 @@ end
128131
# 21.950572 seconds (112.61 M allocations: 2.961 GiB, 12.85% gc time)
129132

130133
@time test_add()
131-
@time test_mult()
134+
# @time test_mult()

0 commit comments

Comments
 (0)