楕円加算について研究しています
local variable 'Q' referenced before assignmentと出てきてしまって困っています
def third_methodで初期値をbite=1ならばQ=P(=G)、bite=2ならばQ=P2=(G2)とするように組みたいと考えています
#Fp上のy-2=x^3+ax+yでの p,a,b=11,1,2 G=(1,2) def inv(n,p):#inv(obj)objのビット単位反転を返す return pow(n,p-2,p) def div(c,w): return(c*inv(w,p))%p def ec_double(A):#P=Qのとき if A[0]==float("infinity"): x=float('infinity') y=float('infinity') else: l=div(3*A[0]**2+a,2*A[1]) if l==0: x=float('infinity') y=float('infinity') else: x=(l**2-A[0]-A[0])%p y=(l*(A[0]-x)-A[1])%p return x,y def ec_add(A,B): if A[0]==B[0] and A[1]==B[1]: l=div(3*A[0]**2+a,2*A[1]) x=(l**2-A[0]-A[0])%p y=(l*(A[0]-x)-A[1])%p elif A[0]==B[0] and A[1]!=B[1]: x=float('infinity') y=float('infinity') elif A[0]==float('infinity'): x=B[0] y=B[1] elif B[0]==float('infinity'): x=A[0] y=A[1] else: l=div(B[1]-A[1],B[0]-A[0]) x=(l**2-A[0]-B[0])%p y=(l*(A[0]-x)-A[1])%p return x,y def ec_third(A): if A[0]==float('infinity'): x=float('infinity') y=float('infinity') elif A[1]==0: x=A[0] y=A[1] else: t=div(3*A[0]**2+a,2*A[1]) l=div(2*A[1]-t*(3*A[0]-t**2),3*A[0]-t**2) if l==0: x=float('infinity') y=float('infinity') else: x=(l**2-t**2+A[0])%p y=(l*(2*t**2-3*A[0]-l**2)-(t*(3*A[0]-t**2)-A[1]))%p return x,y def Base_10_to_n(X,n): if(int(X/n)): return Base_10_to_n(int(X/n),n)+str(X%n) return str(X%n) def third_mathod(P,d): if Base_10_to_n(d,3)[0]==1: Q=P for bit in Base_10_to_n(d,3)[1:]:#1番目の要素から最後の要素まで取得 Q=ec_third(Q) if bit =="1": Q=ec_add(Q,P) elif bit =="2": Q=ec_add(Q,P) Q=ec_add(Q,P) elif Base_10_to_n(d,3)[0]==2: P2=ec_double(P) Q=P2 for bit in Base_10_to_n(d,3)[1:]: Q=ec_third(Q) if bit=="1": Q=ec_add(Q,P) elif bit=="2": Q=ec_add(Q,P) Q=ec_add(Q,P) return Q G3=third_mathod(G,3) print(G3)
エラーコード
UnboundLocalError Traceback (most recent call last) <ipython-input-30-5fa6841430c9> in <module> ----> 1 G3=third_mathod(G,3) 2 print(G3) <ipython-input-29-93dfe3f2dd59> in third_mathod(P, d) 98 Q=ec_add(Q,P) 99 --> 100 return Q 101 UnboundLocalError: local variable 'Q' referenced before assignment
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/14 08:38
2021/01/15 03:10