Updated MFMM (markdown)

Sun Yimin 2021-12-20 08:46:49 +08:00
parent ec0cbbad90
commit eac7bf7499

@ -43,6 +43,7 @@ acc0, acc1, acc2, acc3, acc4, acc5是64位寄存器
=acc4 * 2^192 + (acc0 * p3 + acc3) * 2^128 + acc2 * 2^64 + acc1 + acc0* 2^32 =acc4 * 2^192 + (acc0 * p3 + acc3) * 2^128 + acc2 * 2^64 + acc1 + acc0* 2^32
=acc4 * 2^192 + (acc0 * p3 + acc3) * 2^128 + (acc2 + H(acc0* 2^32))* 2^64 + acc1 + L(acc0* 2^32) =acc4 * 2^192 + (acc0 * p3 + acc3) * 2^128 + (acc2 + H(acc0* 2^32))* 2^64 + acc1 + L(acc0* 2^32)
amd64 汇编表示为: amd64 汇编表示为:
MOVQ acc0, AX MOVQ acc0, AX
MOVQ acc0, t1 MOVQ acc0, t1
@ -55,6 +56,7 @@ acc0, acc1, acc2, acc3, acc4, acc5是64位寄存器
ADCQ DX, acc4 // (carry4, acc4) = carry3 + acc4 + H(acc0 * p3) ADCQ DX, acc4 // (carry4, acc4) = carry3 + acc4 + H(acc0 * p3)
ADCQ $0, acc5 // acc5 = carry4 ADCQ $0, acc5 // acc5 = carry4
XORQ acc0, acc0 // acc0 = 0 XORQ acc0, acc0 // acc0 = 0
结果用五个64位寄存器表示(acc5, acc4, acc3, acc2, acc1)
arm64 汇编表示为: arm64 汇编表示为:
ADDS acc0<<32, acc1, acc1 // (carry1, acc1) = acc1 + L(acc0 * 2^32) ADDS acc0<<32, acc1, acc1 // (carry1, acc1) = acc1 + L(acc0 * 2^32)
@ -64,6 +66,7 @@ acc0, acc1, acc2, acc3, acc4, acc5是64位寄存器
ADCS t0, acc2 // (carry2, acc2) = carry1 + acc2 + H(acc0 * 2^32) ADCS t0, acc2 // (carry2, acc2) = carry1 + acc2 + H(acc0 * 2^32)
ADCS t1, acc3 // (carry3, acc3) = carry2 + acc3 + L(acc0 * p3) ADCS t1, acc3 // (carry3, acc3) = carry2 + acc3 + L(acc0 * p3)
ADC $0, acc0 // acc0 = carry3 + H(acc0 * p3), arm64的实现((acc0, acc4), acc3, acc2, acc1)表示第一次reduction的结果, 不像amd64那样使用acc5, acc4, acc3, acc2, acc1 ADC $0, acc0 // acc0 = carry3 + H(acc0 * p3), arm64的实现((acc0, acc4), acc3, acc2, acc1)表示第一次reduction的结果, 不像amd64那样使用acc5, acc4, acc3, acc2, acc1
结果也用五个64位寄存器表示(acc4, acc3, acc2, acc1) (acc0, 0, 0, 0)
SM2曲线 SM2曲线
p = 0x fffffffeffffffff ffffffffffffffff ffffffff00000000 ffffffffffffffff p = 0x fffffffeffffffff ffffffffffffffff ffffffff00000000 ffffffffffffffff