From b875c6696e22eb9ba52ebf520c15ec58d0b50046 Mon Sep 17 00:00:00 2001 From: Sun Yimin Date: Thu, 22 Feb 2024 14:21:53 +0800 Subject: [PATCH] Updated SM2 MFMM (2) (markdown) --- SM2-MFMM-(2).md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/SM2-MFMM-(2).md b/SM2-MFMM-(2).md index 647d1da..ca6c5c8 100644 --- a/SM2-MFMM-(2).md +++ b/SM2-MFMM-(2).md @@ -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$ + +显然,这里不像平方那样有溢出风险。 + +接着处理减法,假定a0是 $t_0 \ast 2^{32}$ 的低64位,a1是 $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 + +