Updated SM2 MFMM (2) (markdown)

Sun Yimin 2024-02-23 10:09:29 +08:00
parent cd4cf536de
commit 4367f73041

@ -563,3 +563,56 @@ $T_2=T_1 \ast O=Y \ast O= Y \ast 2^{256}-(Y \ast 2^{32}) \ast 2^{192} - Y \ast 2
$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 + Y \ast 2^{256}-(Y \ast 2^{32}) \ast 2^{192} - Y \ast 2^{128} + (Y \ast O_1) \ast 2^{64} + (Y \ast O_0) $
$T_3=(t_4+Y) \ast 2^{256}+(t_3 - Y \ast 2^{32}) \ast 2^{192} + (t_2 - Y) \ast 2^{128} + (t_1 + Y \ast O_1) \ast 2^{64} + (t_0 + Y \ast O_0) $
先处理加法,后处理减法,后五个加法是带进位加法
$t_0=t_0 + Y \ast O_0$
$t_1=t_1 + Y \ast O_1$
$t_2=t_2 + 0$
$t_3=t_3 + 0$
$t_4=t_4 + t_0$
$t_5=0 + 0$
接着处理减法假定a<sub>0</sub>是 $Y \ast 2^{32}$ 的低64位a<sub>1</sub>是 $Y \ast 2^{32}$ 的高64位。后四个减法是带借位减法
$t_2=t_2 - Y$
$t_3=t_3 - a_0$
$t_4=t_4 - a_1$
$t_5=t_5 - 0$
伪代码:
```asm
// First reduction step
MOVQ acc0, AX
MULQ p256ordK0<>(SB)
MOVQ AX, t0
MOVQ p256ord<>+0x00(SB), AX
MULQ t0
ADDQ AX, acc0
ADCQ $0, DX
MOVQ DX, BX
MOVQ p256ord<>+0x08(SB), AX
MULQ t0
ADDQ BX, acc1
ADCQ $0, DX
ADDQ AX, acc1
ADCQ DX, acc2
ADCQ $0, acc3
ADCQ t0, acc4
ADCQ $0, acc5
MOVQ t0, AX
MOVQ t0, DX
SHLQ $32, AX
SHRQ $32, DX
SUBQ t0, acc2
SBBQ AX, acc3
SBBQ DX, acc4
SBBQ $0, acc5
```
乘法: 3
移位2
加法9
减法4