mirror of
https://github.com/emmansun/gmsm.git
synced 2025-05-16 22:16:20 +08:00
Updated SM2 MFMM (2) (markdown)
parent
155cc0d85e
commit
b875c6696e
@ -193,3 +193,52 @@ $t_5=0 + 0$
|
||||
```
|
||||
乘法: 3
|
||||
加法:8
|
||||
|
||||
### 方案二:(移位、加法、减法)
|
||||
$T_2=T_1 \ast P=t_0 \ast P= t_0 \ast (2^{256}-(2^{32} \ast 2^{192} + 0 \ast 2^{128} + (2^{32} - 1) \ast 2^{64} + 1))$
|
||||
$T_2=t_0 \ast 2^{256} - t_0 \ast 2^{32} \ast 2^{192} - t_0 \ast (2^{32} - 1) \ast 2^{64} - t_0$
|
||||
|
||||
$T_3=T + T_2=t_4 \ast 2^{256} + t_3 \ast 2^{192} + t_2 \ast 2^{128} + t_1 \ast 2^{64} + t_0 \ast 2^{256} - t_0 \ast 2^{32} \ast 2^{192} - t_0 \ast (2^{32} - 1) \ast 2^{64} - t_0 $
|
||||
$T_3=(t_4+t_0) \ast 2^{256}+(t_3 - t_0 \ast 2^{32}) \ast 2^{192} + t_2 \ast 2^{128} + (t_1 + t_0 - t_0 \ast 2^{32}) \ast 2^{64} $
|
||||
|
||||
先处理加法,后处理减法,后四个加法是带进位加法
|
||||
$t_1=t_1 + t_0$
|
||||
$t_2=t_2 + 0$
|
||||
$t_3=t_3 + 0$
|
||||
$t_4=t_4 + t_0$
|
||||
$t_5=0 + 0$
|
||||
|
||||
显然,这里不像平方那样有溢出风险。
|
||||
|
||||
接着处理减法,假定a<sub>0</sub>是 $t_0 \ast 2^{32}$ 的低64位,a<sub>1</sub>是 $t_0 \ast 2^{32}$ 的高64位。后三个减法是带借位减法:
|
||||
$t_1=t_1 - a_0$
|
||||
$t_2=t_2 - a_1$
|
||||
$t_3=t_3 - a_0$
|
||||
$t_4=t_4 - a_1$
|
||||
$t_5=t_5 - 0$
|
||||
|
||||
伪代码:
|
||||
```asm
|
||||
// First reduction step
|
||||
MOVQ acc0, AX
|
||||
MOVQ acc0, DX
|
||||
SHLQ $32, AX
|
||||
SHRQ $32, DX
|
||||
|
||||
ADDQ acc0, acc1
|
||||
ADCQ $0, acc2
|
||||
ADCQ $0, acc3
|
||||
ADCQ acc0, acc4
|
||||
ADCQ $0, acc5
|
||||
|
||||
SUBQ AX, acc1
|
||||
SBBQ DX, acc2
|
||||
SBBQ AX, acc3
|
||||
SBBQ DX, acc4
|
||||
SBBQ $0, acc5
|
||||
```
|
||||
移位: 2
|
||||
加法:5
|
||||
减法:5
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user