Updated SM2 MFMM (2) (markdown)

Sun Yimin 2024-02-22 14:21:53 +08:00
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