Updated SM4 with AESENCLAST (markdown)

Sun Yimin 2022-07-22 16:51:38 +08:00
parent dcc2985f40
commit 96d3ad4563

@ -25,7 +25,7 @@ sm4_box_aesenclast <-> sm4_box_aesbox_1 <-> sm4_box_aesbox_2 <-> sm4_box_aesbox_
**We note that each affine transform can be constructed from XOR of two 4x8-bit table lookups, which we implement with constant time byte shuffle instructions (each 16-entry table is in a single 128-bit register).** **We note that each affine transform can be constructed from XOR of two 4x8-bit table lookups, which we implement with constant time byte shuffle instructions (each 16-entry table is in a single 128-bit register).**
``` ```golang
sm4_box_aesenclast sm4_box_aesenclast
y := mm_and_si128(x, const_0f) y := mm_and_si128(x, const_0f)
y = mm_shuffle_epi8(a1l, y) y = mm_shuffle_epi8(a1l, y)
@ -91,8 +91,8 @@ sm4_box_aesbox_4
} }
``` ```
**How to calculate lookup table from M, C?** **How to calculate lookup table from M, C?**
``` ```golang
{Mi+C | i>=0 && i<256} // {Mi+C | i>=0 && i<256}
// Generate lookup table based on M matrix and C // Generate lookup table based on M matrix and C
func gen_lookup_table(m [8]byte, c byte) { func gen_lookup_table(m [8]byte, c byte) {
@ -113,7 +113,7 @@ func gen_lookup_table(m [8]byte, c byte) {
} }
``` ```
Below python code is more intuitive: Below python code is more intuitive:
``` ```python
from pyfinite import genericmatrix from pyfinite import genericmatrix
XOR = lambda x,y:x^y XOR = lambda x,y:x^y
@ -203,7 +203,7 @@ Below is sample
00111100 00111100
``` ```
``` ```golang
// Generate matrix based on lookup table // Generate matrix based on lookup table
func gen_matrix(lookup [256]byte) (m [8]byte) { func gen_matrix(lookup [256]byte) (m [8]byte) {
c := lookup[0] c := lookup[0]
@ -228,7 +228,7 @@ func gen_matrix(lookup [256]byte) (m [8]byte) {
} }
``` ```
Similar python code: Similar python code:
``` ```python
from pyfinite import genericmatrix from pyfinite import genericmatrix