mirror of
https://github.com/emmansun/gmsm.git
synced 2025-05-11 03:26:17 +08:00
Updated Armv8.2 SM3和SM4 (markdown)
parent
92dfdd7a37
commit
814bd2002c
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user