JP5852594B2 - 多倍長整数演算装置、多倍長整数演算方法、プログラム - Google Patents
多倍長整数演算装置、多倍長整数演算方法、プログラム Download PDFInfo
- Publication number
- JP5852594B2 JP5852594B2 JP2013004777A JP2013004777A JP5852594B2 JP 5852594 B2 JP5852594 B2 JP 5852594B2 JP 2013004777 A JP2013004777 A JP 2013004777A JP 2013004777 A JP2013004777 A JP 2013004777A JP 5852594 B2 JP5852594 B2 JP 5852594B2
- Authority
- JP
- Japan
- Prior art keywords
- bit string
- register
- carry
- bit
- symbol
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Description
任意のビット列である第1から第4ビット列に対して、
演算記号addsを([第1ビット列+第2ビット列]r,carry)←[第1ビット列]r+[第2ビット列]rとし、
演算記号adcsを([第1ビット列+第2ビット列+carry]r,carry)←[第1ビット列]r+[第2ビット列]r+carryとし、
演算記号ldrを[ビット列]r=r*←ビット列とし、
演算記号strをビット列←r*=[ビット列]rとし、
演算記号vmovを[第1ビット列]r,[第2ビット列]r←[第1ビット列,第2ビット列]dとし、
演算記号vaddlを[[第1ビット列+第2ビット列]d,[第3ビット列+第4ビット列]d]q←[第1ビット列,第3ビット列]d+[第2ビット列,第4ビット列]dとし、
演算記号vaddwを[[第1ビット列+第2ビット列]d,[第3ビット列+第4ビット列]d]q←[[第1ビット列]d,[第3ビット列]d]q+[第2ビット列,第4ビット列]dとし、
演算記号vmullを[[第1ビット列×第2ビット列]d,[第3ビット列×第4ビット列]d]q←[第1ビット列,第3ビット列]d×[第2ビット列,第4ビット列]dとし、
演算記号vaddを[[第1ビット列+第2ビット列]d,[第3ビット列+第4ビット列]d]q←[[第1ビット列]d,[第3ビット列]d]q+[[第2ビット列]d,[第4ビット列]d]qとし、
演算記号vmovlを[[第1ビット列]d,[第2ビット列]d]q←[第1ビット列,第2ビット列]dとし、
演算記号vldを[ビット列]q=q*←ビット列とし、演算記号vstをビット列←q*=[ビット列]qとし、
記号s*,t*,s~*,t~*,s'*,t'*,s~'*,t~'*を、各32bitの一時変数とし、
mul_mul(di,dj+4,dj+8)は、
di=[a2i+1,a2i]d,dj+4=[b2j+1,b2j]d,dj+8=[b2j,b2j+1]dを入力とし、
q6←vmull di,dj+4
q7←vmull di,dj+8
を計算して、
q6=[a2i+1b2j+1,a2ib2j]q,q7=[a2i+1b2j,a2ib2j+1]qを出力する計算式を表すものとし、
shift_blk(q6,q7,q9)は、
q6=[a2i+1b2j+1,a2ib2j]q
q7=[a2i+1b2j,a2ib2j+1]q
q9=[[s2n+1,t2n+1]d[s2n,t2n]d]q
を入力とし、
q8←vaddw q9,d12
q9←vmovl d13
q10←vaddl d14,d15
を計算して、
q8=[[s'2n+1,t'2n+1]d,[s'2n,t'2n]d]q
q9=[[s'2n+3,t'2n+3]d,[s'2n+2,t'2n+2]d]q
q10=[[s~'2n+2,t~'2n+2]d,[s~'2n+1,t~'2n+1]d]q
を出力する計算式を表すものとし、
add_long(q6,q7,q8,q9,q10)は、
q6=[a2i+1b2j+1,a2ib2j]q
q7=[a2i+1b2j,a2ib2j+1]q
q8=[[s2n+1,t2n+1]d,[s2n,t2n]d]q
q9=[[s2n+3,t2n+3]d,[s2n+2,t2n+2]d]q
q10=[[s~2n+2,t~2n+2]d,[s~2n+1,t~2n+1]d]q
を入力とし、
q8←vaddw q8,d12
q9←vaddw q9,d13
q10←vaddw q10,d14
q10←vaddw q10,d15
を計算して、
q8=[[s'2n+1,t'2n+1]d,[s'2n,t'2n]d]q
q9=[[s'2n+3,t'2n+3]d,[s'2n+2,t'2n+2]d]q
q10=[[s~'2n+2,t~'2n+2]d,[s~'2n+1,t~'2n+1]d]q
を出力する計算式を表すものとし、
marge(q8,q9,q10)は、
q8=[[s2n+1,t2n+1]d,[s2n,t2n]d]q
q9=[[s2n+3,t2n+3]d,[s2n+2,t2n+2]d]q
q10=[[s~2n+2,t~2n+2]d,[s~2n+1,t~2n+1]d]q
を入力とし、
d17←vadd d17,d20
d18←vadd d18,d21
を計算して、
q8=[[s'2n+1,t'2n+1]d,[s'2n,t'2n]d]q
q9=[[s'2n+3,t'2n+3]d,[s'2n+2,t'2n+2]d]q
を出力する計算式を表すものとし、
add_str(q*,r4,carry)は、
q*=[[s2n+1,t2n+1]d,[s2n,t2n]d]q,r4,carry
を入力とし、
r1,r2←vmov d2*
c2n,carry←adcs r1,r4,carry
r3,r4←vmov d2*+1
c2n+1,carry←adcs r3,r2,carry
を計算して、
c2n,c2n+1,r4,carryを出力する計算式を表すものとし、
格納部は、q0-レジスタのd0-レジスタにa1,a0を、d1-レジスタにa3,a2を格納し、q1-レジスタのd2-レジスタにa5,a4を、d3-レジスタにa7,a6を格納し、q2-レジスタのd4-レジスタにb1,b0を、d5-レジスタにb3,b2を格納し、q3-レジスタのd6-レジスタにb5,b4を、d7-レジスタにb7,b6を格納する。置換部は、q4-レジスタのd8-レジスタに置換後のb0,b1を、d9-レジスタに置換後のb2,b3を、q5-レジスタのd10-レジスタに置換後のb4,b5を、d11-レジスタに置換後のb6,b7を格納する。繰り返し処理制御部は、n=0,1,2,3,…,N-2の範囲でnを設定し、n<N/2の条件下でi=0、j=nと設定し、n≧N/2の条件下で、i=n-N/2+1、j=N/2-1と設定し、乗算部および途中加算部の動作が1度実行されるたびに、iのインクリメント、jのデクリメントを実行し、i<N/2、j≧0のいずれかにおいて範囲外となった場合には、nをインクリメントする。乗算部は、q6,q7←mul_mul(dj,dj+4,dj+8)を実行する。途中加算部は、i=0,またはj=N/2-1の場合に、q8,q9,q10←shift_blk(q6,q7,q9)を実行し、それ以外の場合に、q8,q9,q10←add_long(q6,q7,q8,q9,q10)を実行する。マージ加算部は、q8,q9←marge(q8,q9,q10)を実行し、c2n,c2n+1,carry,r4←add_str(q8,r4,carry)を実行し、c*,c*+1の出力を行う。加算部は、c2N−2,c2N−1,carry,r4←add_str(q9,r4,carry)を実行し、c*,c*+1の出力を行う。
以下、実施例に用いられる記号、関数等の定義を行う。
通常環境では、x個の32bitレジスタ(r-レジスタ)が備え付けられており、各々のレジスタをr0,...,rx−1と表現する。ビット列a={0,1}32に対して、r-レジスタの表現を[a]rとする。a,bをメモリ上に保存された32bitの値とした場合、通常環境では下記の命令を持つ。
キャリー無加算adds:([a+b]r,carry)←[a]r+[b]r
キャリー有加算adcs:([a+b+carry]r,carry)←[a]r+[b]r+carry
ロードldr:[a]r=r*←a
ストアstr:a←r*=[a]r
ここでcarryはキャリービットであり、32bit加算で発生するオーバーフロー{0,1}が格納される。
SIMD環境では、y個の128bitレジスタ(q-レジスタ)が備え付けられており、各々のレジスタをq0,...,qy−1と表現する。q-レジスタは2y個の64bitレジスタ(d-レジスタ)としても利用可能であり、q-レジスタとd-レジスタの対応は図1の通りとなる。
[a]q=[[a32]d,[a10]d]q=[[a3,a2]d,[a1,a0]d]q
とする。a,bをメモリ上に保存された128bitの値とした場合、SIMD環境では下記の命令を持つ。なお、[ ]内に示すカンマ記号は、カンマ記号の両側に位置する各ビット列のビット長が互いに等しくなるように分割する記号とする。
SIMD環境から通常環境への値移動vmov:[a0]r,[a1]r←[a1,a0]d
Long加算vaddl:[[a1+b1]d,[a0+b0]d]q←[a1,a0]d+[b1,b0]d
Word加算vaddw:[[a32+b1]d,[a10+b0]d]q←[[a32]d,[a10]d]q+[b1,b0]d
乗算vmull:[[a1×b1]d,[a0×b0]d]q←[a1,a0]d×[b1,b0]d
加算vadd:[[a32+b32]d,[a10+b10]d]q←[[a32]d,[a10]d]q+[[b32]d,[b10]d]q
Long移動vmovl:[[a1]d,[a0]d]q←[a1,a0]d
ロードvld:[a]q=q*←a
ストアvst:a←q*=[a]q
上記の2種類の環境において、素体Fp上の多倍長整数a,bを入力とする乗算c=a×bを計算する。
1)乗算の計算回数の削減
通常環境での乗算mullは、入力レジスタ2個と出力レジスタ2個により32bit×32bit→64bitの計算を行う。一方、SIMD環境でのSIMD命令vmullは、32bit×32bit→64bitを2並列で計算可能となり、乗算命令の計算回数が1/2となる。またARMアーキテクチャにおいて、mullは3クロック、vmullは2クロックであり、実行サイクル自体も削減できる。
最大256bitの入力a,bをメモリからレジスタに格納する際、SIMD環境では、q-レジスタ4個で入力a,bを保持することが可能である。計算中は,これらのレジスタの内容変更を禁止することで、入力a,bのロード回数を削減できる。
乗算a×b=cの計算結果を下位のワードから順次計算することにより、中間結果のメモリとレジスタ間でのストア、ロードを除去できる。結果として、乗算結果のメモリへのストアを最小である2N回に削減できる。
通常命令では、2個の32bit入力の加算結果のオーバーフローはcarryとして制御レジスタに格納される。一方、SIMD命令では、64bit入力の加算を2並列で計算可能だが、計算結果のd-レジスタで64bitを超えた場合のオーバーフローは保存されない。提案アルゴリズムでは、計算途中では、32bit毎のキャリー部とボディ部に分割することで、途中加算部でのオーバーフローを防ぎ、最終的なキャリー部とボディ部の加算を通常環境のキャリー有加算を用いることで、SIMD環境のみでキャリー有加算を実現するよりも効率的な加算処理を実現した。
Claims (3)
- x,yをx≧5,y≧11を充たす整数とし、
128bitの記憶領域であるy個のq-レジスタq0,...,qy−1 をそれぞれ二つに分割した64bitの記憶領域である2y個のd-レジスタd0,...,d2y−1と、
32bitの記憶領域であるx個のr-レジスタr0,...,rx−1を備える多倍長整数演算装置であって、
pを256bit以下の素数とし、
Fpを素体とし、
a,bを素体Fp上の要素とし、
通常環境のワード長W、サイズN=┌(└log2p┘+1)=W┐により、
と表現されるものとし、
carryをキャリービットとし、32bit加算で発生するオーバーフロー{0,1}が格納されるものとし、
ビット列に対するq-レジスタの表現を[ビット列]qとし、
ビット列に対するd-レジスタの表現を[ビット列]dとし、
ビット列に対するr-レジスタの表現を[ビット列]rとし、
矢印記号は代入を意味するものとし、[ ]内に示すカンマ記号は、カンマ記号の両側に位置する各ビット列のビット長が互いに等しくなるように分割する記号とし、任意のビット列である第1から第4ビット列に対して、
演算記号addsを([第1ビット列+第2ビット列]r,carry)←[第1ビット列]r+[第2ビット列]rとし、
演算記号adcsを([第1ビット列+第2ビット列+carry]r,carry)←[第1ビット列]r+[第2ビット列]r+carryとし、
演算記号ldrを[ビット列]r=r*←ビット列とし、
演算記号strをビット列←r*=[ビット列]rとし、
演算記号vmovを[第1ビット列]r,[第2ビット列]r←[第1ビット列,第2ビット列]dとし、
演算記号vaddlを[[第1ビット列+第2ビット列]d,[第3ビット列+第4ビット列]d]q←[第1ビット列,第3ビット列]d+[第2ビット列,第4ビット列]dとし、
演算記号vaddwを[[第1ビット列+第2ビット列]d,[第3ビット列+第4ビット列]d]q←[[第1ビット列]d,[第3ビット列]d]q+[第2ビット列,第4ビット列]dとし、
演算記号vmullを[[第1ビット列×第2ビット列]d,[第3ビット列×第4ビット列]d]q←[第1ビット列,第3ビット列]d×[第2ビット列,第4ビット列]dとし、
演算記号vaddを[[第1ビット列+第2ビット列]d,[第3ビット列+第4ビット列]d]q←[[第1ビット列]d,[第3ビット列]d]q+[[第2ビット列]d,[第4ビット列]d]qとし、
演算記号vmovlを[[第1ビット列]d,[第2ビット列]d]q←[第1ビット列,第2ビット列]dとし、
演算記号vldを[ビット列]q=q*←ビット列とし、
演算記号vstをビット列←q*=[ビット列]qとし、
記号s*,t*,s~*,t~*,s'*,t'*,s~'*,t~'*を、各32bitの一時変数とし、
mul_mul(di,dj+4,dj+8)は、
di=[a2i+1,a2i]d,dj+4=[b2j+1,b2j]d,dj+8=[b2j,b2j+1]dを入力とし、
q6←vmull di,dj+4
q7←vmull di,dj+8
を計算して、
q6=[a2i+1b2j+1,a2ib2j]q,q7=[a2i+1b2j,a2ib2j+1]qを出力する計算式を表すものとし、
shift_blk(q6,q7,q9)は、
q6=[a2i+1b2j+1,a2ib2j]q
q7=[a2i+1b2j,a2ib2j+1]q
q9=[[s2n+1,t2n+1]d[s2n,t2n]d]q
を入力とし、
q8←vaddw q9,d12
q9←vmovl d13
q10←vaddl d14,d15
を計算して、
q8=[[s'2n+1,t'2n+1]d,[s'2n,t'2n]d]q
q9=[[s'2n+3,t'2n+3]d,[s'2n+2,t'2n+2]d]q
q10=[[s~'2n+2,t~'2n+2]d,[s~'2n+1,t~'2n+1]d]q
を出力する計算式を表すものとし、
add_long(q6,q7,q8,q9,q10)は、
q6=[a2i+1b2j+1,a2ib2j]q
q7=[a2i+1b2j,a2ib2j+1]q
q8=[[s2n+1,t2n+1]d,[s2n,t2n]d]q
q9=[[s2n+3,t2n+3]d,[s2n+2,t2n+2]d]q
q10=[[s~2n+2,t~2n+2]d,[s~2n+1,t~2n+1]d]q
を入力とし、
q8←vaddw q8,d12
q9←vaddw q9,d13
q10←vaddw q10,d14
q10←vaddw q10,d15
を計算して、
q8=[[s'2n+1,t'2n+1]d,[s'2n,t'2n]d]q
q9=[[s'2n+3,t'2n+3]d,[s'2n+2,t'2n+2]d]q
q10=[[s~'2n+2,t~'2n+2]d,[s~'2n+1,t~'2n+1]d]q
を出力する計算式を表すものとし、
marge(q8,q9,q10)は、
q8=[[s2n+1,t2n+1]d,[s2n,t2n]d]q
q9=[[s2n+3,t2n+3]d,[s2n+2,t2n+2]d]q
q10=[[s~2n+2,t~2n+2]d,[s~2n+1,t~2n+1]d]q
を入力とし、
d17←vadd d17,d20
d18←vadd d18,d21
を計算して、
q8=[[s'2n+1,t'2n+1]d,[s'2n,t'2n]d]q
q9=[[s'2n+3,t'2n+3]d,[s'2n+2,t'2n+2]d]q
を出力する計算式を表すものとし、
add_str(q*,r4,carry)は、
q*=[[s2n+1,t2n+1]d,[s2n,t2n]d]q,r4,carry
を入力とし、
r1,r2←vmov d2*
c2n,carry←adcs r1,r4,carry
r3,r4←vmov d2*+1
c2n+1,carry←adcs r3,r2,carry
を計算して、
c2n,c2n+1,r4,carryを出力する計算式を表すものとし、
q0-レジスタのd0-レジスタにa1,a0を、d1-レジスタにa3,a2を格納し、q1-レジスタのd2-レジスタにa5,a4を、d3-レジスタにa7,a6を格納し、q2-レジスタのd4-レジスタにb1,b0を、d5-レジスタにb3,b2を格納し、q3-レジスタのd6-レジスタにb5,b4を、d7-レジスタにb7,b6を格納する格納部と、
q4-レジスタのd8-レジスタに置換後のb0,b1を、d9-レジスタに置換後のb2,b3を、q5-レジスタのd10-レジスタに置換後のb4,b5を、d11-レジスタに置換後のb6,b7を格納する置換部と、
n=0,1,2,3,…,N-2の範囲でnを設定し、n<N/2の条件下でi=0、j=nと設定し、n≧N/2の条件下で、i=n-N/2+1、j=N/2-1と設定し、乗算部および途中加算部の動作が1度実行されるたびに、iのインクリメント、jのデクリメントを実行し、i<N/2、j≧0のいずれかにおいて範囲外となった場合には、nをインクリメントする繰り返し処理制御部と、
q6,q7←mul_mul(dj,dj+4,dj+8)を実行する乗算部と、
i=0,またはj=N/2-1の場合に、q8,q9,q10←shift_blk(q6,q7,q9)を実行し、
それ以外の場合に、q8,q9,q10←add_long(q6,q7,q8,q9,q10)を実行する途中加算部と、
q8,q9←marge(q8,q9,q10)を実行し、
c2n,c2n+1,carry,r4←add_str(q8,r4,carry)を実行し、c*,c*+1の出力を行うマージ加算部と、
c2N−2,c2N−1,carry,r4←add_str(q9,r4,carry)を実行し、c*,c*+1の出力を行う加算部と、
を含む多倍長整数演算装置。 - x,yをx≧5,y≧11を充たす整数とし、
128bitの記憶領域であるy個のq-レジスタq0,...,qy−1 をそれぞれ二つに分割した64bitの記憶領域である2y個のd-レジスタd0,...,d2y−1と、
32bitの記憶領域であるx個のr-レジスタr0,...,rx−1を備える多倍長整数演算装置が実行する多倍長整数演算方法であって、
pを256bit以下の素数とし、
Fpを素体とし、
a,bを素体Fp上の要素とし、
通常環境のワード長W、サイズN=┌(└log2p┘+1)=W┐により、
と表現されるものとし、
carryをキャリービットとし、32bit加算で発生するオーバーフロー{0,1}が格納されるものとし、
ビット列に対するq-レジスタの表現を[ビット列]qとし、
ビット列に対するd-レジスタの表現を[ビット列]dとし、
ビット列に対するr-レジスタの表現を[ビット列]rとし、
矢印記号は代入を意味するものとし、[ ]内に示すカンマ記号は、カンマ記号の両側に位置する各ビット列のビット長が互いに等しくなるように分割する記号とし、任意のビット列である第1から第4ビット列に対して、
演算記号addsを([第1ビット列+第2ビット列]r,carry)←[第1ビット列]r+[第2ビット列]rとし、
演算記号adcsを([第1ビット列+第2ビット列+carry]r,carry)←[第1ビット列]r+[第2ビット列]r+carryとし、
演算記号ldrを[ビット列]r=r*←ビット列とし、
演算記号strをビット列←r*=[ビット列]rとし、
演算記号vmovを[第1ビット列]r,[第2ビット列]r←[第1ビット列,第2ビット列]dとし、
演算記号vaddlを[[第1ビット列+第2ビット列]d,[第3ビット列+第4ビット列]d]q←[第1ビット列,第3ビット列]d+[第2ビット列,第4ビット列]dとし、
演算記号vaddwを[[第1ビット列+第2ビット列]d,[第3ビット列+第4ビット列]d]q←[[第1ビット列]d,[第3ビット列]d]q+[第2ビット列,第4ビット列]dとし、
演算記号vmullを[[第1ビット列×第2ビット列]d,[第3ビット列×第4ビット列]d]q←[第1ビット列,第3ビット列]d×[第2ビット列,第4ビット列]dとし、
演算記号vaddを[[第1ビット列+第2ビット列]d,[第3ビット列+第4ビット列]d]q←[[第1ビット列]d,[第3ビット列]d]q+[[第2ビット列]d,[第4ビット列]d]qとし、
演算記号vmovlを[[第1ビット列]d,[第2ビット列]d]q←[第1ビット列,第2ビット列]dとし、
演算記号vldを[ビット列]q=q*←ビット列とし、
演算記号vstをビット列←q*=[ビット列]qとし、
記号s*,t*,s~*,t~*,s'*,t'*,s~'*,t~'*を、各32bitの一時変数とし、
mul_mul(di,dj+4,dj+8)は、
di=[a2i+1,a2i]d,dj+4=[b2j+1,b2j]d,dj+8=[b2j,b2j+1]dを入力とし、
q6←vmull di,dj+4
q7←vmull di,dj+8
を計算して、
q6=[a2i+1b2j+1,a2ib2j]q,q7=[a2i+1b2j,a2ib2j+1]qを出力する計算式を表すものとし、
shift_blk(q6,q7,q9)は、
q6=[a2i+1b2j+1,a2ib2j]q
q7=[a2i+1b2j,a2ib2j+1]q
q9=[[s2n+1,t2n+1]d[s2n,t2n]d]q
を入力とし、
q8←vaddw q9,d12
q9←vmovl d13
q10←vaddl d14,d15
を計算して、
q8=[[s'2n+1,t'2n+1]d,[s'2n,t'2n]d]q
q9=[[s'2n+3,t'2n+3]d,[s'2n+2,t'2n+2]d]q
q10=[[s~'2n+2,t~'2n+2]d,[s~'2n+1,t~'2n+1]d]q
を出力する計算式を表すものとし、
add_long(q6,q7,q8,q9,q10)は、
q6=[a2i+1b2j+1,a2ib2j]q
q7=[a2i+1b2j,a2ib2j+1]q
q8=[[s2n+1,t2n+1]d,[s2n,t2n]d]q
q9=[[s2n+3,t2n+3]d,[s2n+2,t2n+2]d]q
q10=[[s~2n+2,t~2n+2]d,[s~2n+1,t~2n+1]d]q
を入力とし、
q8←vaddw q8,d12
q9←vaddw q9,d13
q10←vaddw q10,d14
q10←vaddw q10,d15
を計算して、
q8=[[s'2n+1,t'2n+1]d,[s'2n,t'2n]d]q
q9=[[s'2n+3,t'2n+3]d,[s'2n+2,t'2n+2]d]q
q10=[[s~'2n+2,t~'2n+2]d,[s~'2n+1,t~'2n+1]d]q
を出力する計算式を表すものとし、
marge(q8,q9,q10)は、
q8=[[s2n+1,t2n+1]d,[s2n,t2n]d]q
q9=[[s2n+3,t2n+3]d,[s2n+2,t2n+2]d]q
q10=[[s~2n+2,t~2n+2]d,[s~2n+1,t~2n+1]d]q
を入力とし、
d17←vadd d17,d20
d18←vadd d18,d21
を計算して、
q8=[[s'2n+1,t'2n+1]d,[s'2n,t'2n]d]q
q9=[[s'2n+3,t'2n+3]d,[s'2n+2,t'2n+2]d]q
を出力する計算式を表すものとし、
add_str(q*,r4,carry)は、
q*=[[s2n+1,t2n+1]d,[s2n,t2n]d]q,r4,carry
を入力とし、
r1,r2←vmov d2*
c2n,carry←adcs r1,r4,carry
r3,r4←vmov d2*+1
c2n+1,carry←adcs r3,r2,carry
を計算して、
c2n,c2n+1,r4,carryを出力する計算式を表すものとし、
q0-レジスタのd0-レジスタにa1,a0を、d1-レジスタにa3,a2を格納し、q1-レジスタのd2-レジスタにa5,a4を、d3-レジスタにa7,a6を格納し、q2-レジスタのd4-レジスタにb1,b0を、d5-レジスタにb3,b2を格納し、q3-レジスタのd6-レジスタにb5,b4を、d7-レジスタにb7,b6を格納する格納ステップと、
q4-レジスタのd8-レジスタに置換後のb0,b1を、d9-レジスタに置換後のb2,b3を、q5-レジスタのd10-レジスタに置換後のb4,b5を、d11-レジスタに置換後のb6,b7を格納する置換ステップと、
n=0,1,2,3,…,N-2の範囲でnを設定し、n<N/2の条件下でi=0、j=nと設定し、n≧N/2の条件下で、i=n-N/2+1、j=N/2-1と設定し、乗算ステップおよび途中加算ステップが1度実行されるたびに、iのインクリメント、jのデクリメントを実行し、i<N/2、j≧0のいずれかにおいて範囲外となった場合には、nをインクリメントする繰り返し処理制御ステップと、
q6,q7←mul_mul(dj,dj+4,dj+8)を実行する乗算ステップと、
i=0,またはj=N/2-1の場合に、q8,q9,q10←shift_blk(q6,q7,q9)を実行し、
それ以外の場合に、q8,q9,q10←add_long(q6,q7,q8,q9,q10)を実行する途中加算ステップと、
q8,q9←marge(q8,q9,q10)を実行し、
c2n,c2n+1,carry,r4←add_str(q8,r4,carry)を実行し、c*,c*+1の出力を行うマージステップと、
c2N−2,c2N−1,carry,r4←add_str(q9,r4,carry)を実行し、c*,c*+1の出力を行うキャリー有加算ステップと、
を含む多倍長整数演算方法。 - 請求項2に記載された多倍長整数演算方法の各ステップをコンピュータに実行させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013004777A JP5852594B2 (ja) | 2013-01-15 | 2013-01-15 | 多倍長整数演算装置、多倍長整数演算方法、プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013004777A JP5852594B2 (ja) | 2013-01-15 | 2013-01-15 | 多倍長整数演算装置、多倍長整数演算方法、プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014137415A JP2014137415A (ja) | 2014-07-28 |
JP5852594B2 true JP5852594B2 (ja) | 2016-02-03 |
Family
ID=51414965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013004777A Active JP5852594B2 (ja) | 2013-01-15 | 2013-01-15 | 多倍長整数演算装置、多倍長整数演算方法、プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5852594B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10848471B2 (en) | 2017-09-25 | 2020-11-24 | Ntt Communications Corporation | Communication apparatus, communication method, and program |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6656809B2 (ja) * | 2015-02-20 | 2020-03-04 | 宏興 王 | マイクロ波プラズマcvd装置 |
JP7383949B2 (ja) | 2019-09-20 | 2023-11-21 | 富士電機株式会社 | 情報処理装置及びプログラム |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7532720B2 (en) * | 2003-10-15 | 2009-05-12 | Microsoft Corporation | Utilizing SIMD instructions within montgomery multiplication |
JP4399280B2 (ja) * | 2004-01-22 | 2010-01-13 | 日本電信電話株式会社 | 剰余装置、剰余方法、プログラム及び記録媒体 |
JP5896756B2 (ja) * | 2012-01-20 | 2016-03-30 | 三菱電機株式会社 | 演算装置及びプログラム |
-
2013
- 2013-01-15 JP JP2013004777A patent/JP5852594B2/ja active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10848471B2 (en) | 2017-09-25 | 2020-11-24 | Ntt Communications Corporation | Communication apparatus, communication method, and program |
Also Published As
Publication number | Publication date |
---|---|
JP2014137415A (ja) | 2014-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Dai et al. | cuHE: A homomorphic encryption accelerator library | |
Bernstein et al. | TweetNaCl: A crypto library in 100 tweets | |
Chou | Sandy2x: New Curve25519 speed records | |
JP2017515195A (ja) | 断熱量子計算を介してデジタル論理制約問題を解く | |
US11164484B2 (en) | Secure computation system, secure computation device, secure computation method, and program | |
JP5907902B2 (ja) | 秘密計算による表の等結合システム、方法 | |
JP6732959B2 (ja) | 秘密計算方法、秘密計算システム、秘密計算装置、およびプログラム | |
Fang et al. | Secure function evaluation using an fpga overlay architecture | |
Alkım et al. | Compact and simple RLWE based key encapsulation mechanism | |
Akleylek et al. | On the efficiency of polynomial multiplication for lattice-based cryptography on GPUs using CUDA | |
Lim et al. | Bitsliced high-performance AES-ECB on GPUs | |
JP5852594B2 (ja) | 多倍長整数演算装置、多倍長整数演算方法、プログラム | |
Jalali et al. | NEON SIKE: Supersingular isogeny key encapsulation on ARMv7 | |
Baktir et al. | Highly-parallel montgomery multiplication for multi-core general-purpose microprocessors | |
Drucker et al. | Making AES great again: the forthcoming vectorized AES instruction | |
CN112256275A (zh) | 代码混淆方法、装置、电子设备及介质 | |
Pereira et al. | x-only point addition formula and faster compressed SIKE | |
Seo et al. | Optimized SIKE Round 2 on 64-bit ARM | |
Kim et al. | Crystals-dilithium on armv8 | |
KR102075848B1 (ko) | 다항식 연산 최적화 처리 장치, 다항식 연산 최적화 처리 방법 및 기록매체 | |
Kwak et al. | Parallel implementation of PIPO block cipher on 32-bit RISC-V processor | |
EP3483867A1 (en) | Secret computation system, secret computation device, secret computation method, and program | |
Keliris et al. | Investigating large integer arithmetic on Intel Xeon Phi SIMD extensions | |
US20140270152A1 (en) | Efficient hardware architecture for a s1 s-box in a zuc cipher | |
Oliveira et al. | Software implementation of Koblitz curves over quadratic fields |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20150213 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20150928 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20151006 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20151109 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20151201 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20151204 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5852594 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |