質問編集履歴

3

コードミス

2021/01/14 05:23

投稿

kyamamama
kyamamama

スコア4

test CHANGED
File without changes
test CHANGED
@@ -18,9 +18,9 @@
18
18
 
19
19
  0の場合はec_third(Q)のみ
20
20
 
21
- 1の場合はec_third(Q)からec_add(Q,G),ec_third(Q)
21
+ 1の場合はec_third(Q)からec_add(Q,P),ec_third(Q)
22
22
 
23
- 2の場合はec_third(Q)からG2=ec_double(G),ec_add(Q,G2)
23
+ 2の場合はec_third(Q)からG2=ec_double(P),ec_add(Q,P)
24
24
 
25
25
 
26
26
 

2

追加の問題が発生したため

2021/01/14 05:23

投稿

kyamamama
kyamamama

スコア4

test CHANGED
File without changes
test CHANGED
@@ -18,9 +18,9 @@
18
18
 
19
19
  0の場合はec_third(Q)のみ
20
20
 
21
- 1の場合はec_add(Q,G),ec_third(Q)
21
+ 1の場合はec_third(Q)からec_add(Q,G),ec_third(Q)
22
22
 
23
- 2の場合はG2=ec_double(G),ec_add(Q,G2)
23
+ 2の場合はec_third(Q)からG2=ec_double(G),ec_add(Q,G2)
24
24
 
25
25
 
26
26
 
@@ -35,132 +35,6 @@
35
35
 
36
36
 
37
37
  ```ここに言語を入力
38
-
39
- Fp上のy-2=x^3+ax+yでの計算
40
-
41
- p,a,b=11,1,2
42
-
43
- G=(1,2)
44
-
45
- def inv(n,p):#inv(obj)objのビット単位反転を返す
46
-
47
- return pow(n,p-2,p)
48
-
49
-
50
-
51
- def div(c,w):
52
-
53
- return(c*inv(w,p))%p
54
-
55
-
56
-
57
- def ec_double(A):#P=Qのとき
58
-
59
- if A[0]==float("infinity"):
60
-
61
- x=float('infinity')
62
-
63
- y=float('infinity')
64
-
65
-
66
-
67
- else:
68
-
69
- l=div(3*A[0]**2+a,2*A[1])
70
-
71
- if l==0:
72
-
73
- x=float('infinity')
74
-
75
- y=float('infinity')
76
-
77
- else:
78
-
79
- x=(l**2-A[0]-A[0])%p
80
-
81
- y=(l*(A[0]-x)-A[1])%p
82
-
83
- return x,y
84
-
85
-
86
-
87
- def ec_add(A,B):
88
-
89
- if A[0]==B[0]:
90
-
91
- x=float('infinity')
92
-
93
- y=float('infinity')
94
-
95
-
96
-
97
- elif A[0]==float('infinity'):
98
-
99
- x=B[0]
100
-
101
- y=B[1]
102
-
103
-
104
-
105
- elif B[0]==float('infinity'):
106
-
107
- x=A[0]
108
-
109
- y=A[1]
110
-
111
-
112
-
113
- else:
114
-
115
- l=div(B[1]-A[1],B[0]-A[0])
116
-
117
- x=(l**2-A[0]-B[0])%p
118
-
119
- y=(l*(A[0]-x)-A[1])%p
120
-
121
- return x,y
122
-
123
-
124
-
125
- def ec_third(A):
126
-
127
- if A[0]==float('infinity'):
128
-
129
- x=float('infinity')
130
-
131
- y=float('infinity')
132
-
133
-
134
-
135
- elif A[1]==0:
136
-
137
- x=A[0]
138
-
139
- y=A[1]
140
-
141
-
142
-
143
- else:
144
-
145
- t=div(3*A[0]**2+a,2*A[1])
146
-
147
- l=div(2*A[1]-t*(3*A[0]-t**2),3*A[0]-t**2)
148
-
149
- if l==0:
150
-
151
- x=float('infinity')
152
-
153
- y=float('infinity')
154
-
155
- else:
156
-
157
- x=(l**2-t**2+A[0])%p
158
-
159
- y=(l*(2*t**2-3*A[0]-l**2)-(t*(3*A[0]-t**2)-A[1]))%p
160
-
161
- return x,y
162
-
163
-
164
38
 
165
39
  def Base_10_to_n(X,n):3進法に直す
166
40
 

1

コードミス

2021/01/14 05:21

投稿

kyamamama
kyamamama

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 楕円加算について研究しています.
1
+ > 楕円加算について研究しています.
2
2
 
3
3
  手計算では合っているのにプログラミングにすると違う答えが返ってきてしまいます
4
4
 
@@ -28,11 +28,13 @@
28
28
 
29
29
  おそらくbite=2のときが間違えているようです
30
30
 
31
+ G2の値は(10,0)が正解です
32
+
31
33
  ご回答宜しくお願い致します
32
34
 
33
35
 
34
36
 
35
-
37
+ ```ここに言語を入力
36
38
 
37
39
  Fp上のy-2=x^3+ax+yでの計算
38
40
 
@@ -174,9 +176,7 @@
174
176
 
175
177
  Q=P
176
178
 
177
- bin_str=Base_10_to_n(d,3)
178
-
179
- for bit in bin_str[1:]:#1番目の要素から最後の要素まで取得
179
+ for bit in Base_10_to_n(d,3)[1:]:#1番目の要素から最後の要素まで取得
180
180
 
181
181
  Q=ec_third(Q)
182
182
 
@@ -191,3 +191,5 @@
191
191
  Q=ec_add(Q,P)
192
192
 
193
193
  return Q
194
+
195
+ ```