前提・実現したいこと
楕円曲線の楕円加算について研究しています
プログラミングでは
def ec_add
def ec_double
def ec_third
def Base
までは問題なく動きましたが最後のdefでエラーが発生しました
3進法で表しなおして数字が表れる?ごとに毎回def thirdを行い、bitが1の場合とbitが2の場合は追加操作を行うようにプログラミングを組みたいと思っています。
今回はbitが2とならないからエラーが出ているのでしょうか?
よろしくお願いします
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
File "<ipython-input-54-fd35ac9ee141>", line 38 else bit =="2": ^ SyntaxError: invalid syntax
該当のソースコード
#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 ec_double(A):#P=Qのとき l=(((3*A[0]**2)+a)*inv(2*A[1],p))%p x=(l**2-A[0]-A[0])%p y=(l*(A[0]-x)-A[1])%p return x,y def ec_add(A,B): l=((B[1]-A[1])*inv(B[0]-A[0],p))%p x=(l**2-A[0]-B[0])%p y=(l*(A[0]-x)-A[1])%p return x,y def ec_third(A): t=((3*A[0]**2+a)*inv(2*A[1],p))%p l=((2*A[1]-t*(3*A[0]-t**2))*inv((3*A[0]-t**2),p))%p 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_method(P,d): P=Q bin_str=Base_10_to_n(p,3) for bit in bin_str[1:]:#1番目の要素から最後の要素まで取得 Q=ec_third(Q) if bit =="1": Q=ec_add(Q,P) else bit =="2": P2=ec_double(P) Q=ec_add(Q,P2) return Q
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
他の方が作成したプログラミングを基に作っていて、def third_methodの最初のP=Qとかく意味があまり理解できていないので一緒に教えていただきたいです…
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/20 11:53