From 814bd2002cfa0b0c49c5cb33290ab53740bdbd68 Mon Sep 17 00:00:00 2001 From: Sun Yimin Date: Wed, 23 Feb 2022 11:08:37 +0800 Subject: [PATCH] =?UTF-8?q?Updated=20Armv8.2=20SM3=E5=92=8CSM4=20(markdown?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Armv8.2-SM3和SM4.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Armv8.2-SM3和SM4.md b/Armv8.2-SM3和SM4.md index cc1e521..17e2e5d 100644 --- a/Armv8.2-SM3和SM4.md +++ b/Armv8.2-SM3和SM4.md @@ -111,6 +111,28 @@ WORD $0x0884c0ce // SM4E V0.S4, V8.S4 [代码](https://gist.github.com/emmansun/a3feef970cdf3ffe5db623f324550950) ## SM3 with SM3PARTW1 / SM3PARTW2 / SM3SS1 / SM3TT1A / SM3TT2A / SM3TT2A / SM3TT2B +``` + P1(X)= X XOR (X <<< 15) XOR (X <<< 23) + + P1(X1 XOR X2) +=(X1 XOR X2) XOR ((X1 XOR X2) <<< 15) XOR ((X1 XOR X2) <<< 23) +=X1 XOR X2 XOR (X1 <<< 15) XOR (X2 <<< 15) XOR (X1 <<< 23) XOR (X2 <<< 23) +=X1 XOR (X1 <<< 15) XOR (X1 <<< 23) XOR X2 XOR (X2 <<< 15) XOR (X2 <<< 23) +=P1(X1) XOR P1(X2) + +这里, 异或XOR运算满足: +交换律 +结合律 +并且假定(X1 XOR X2) <<< 15 = (X1 <<< 15) XOR (X2 <<< 15), 也就是说循环左移ROL对异或XOR运算满足分配律,这一点是不显然的。 + +SM3PARTW1中最后一个字: +Vd[3] = P1(C XOR (R1 <<< 15)), 这里 C 是另外两个字的异或结果, R1 是 X(4i+16)的一部分:X(4i+16) = R1 XOR R2 + +SM3PARTW2中的tmp.value[0]就是R2 + P1(C XOR (R1 <<< 15)) XOR P1(R2 <<< 15) = P1(C XOR (R1 <<< 15) XOR (R2 <<< 15)) = P1(C XOR ((R1 XOR R2) <<< 15)) +``` +所以,关键就是**循环位移对异或运算满足分配律成立**。 + [模拟代码](https://gist.github.com/emmansun/c05b5e2262997ae546950f806fcd0146) ## Reference