//go:build ignore // +build ignore package sm3 // block 未优化的参考实现 // t[i] = Tj << (j mod 32) var t = [64]uint32{ 0x79cc4519, 0xf3988a32, 0xe7311465, 0xce6228cb, 0x9cc45197, 0x3988a32f, 0x7311465e, 0xe6228cbc, 0xcc451979, 0x988a32f3, 0x311465e7, 0x6228cbce, 0xc451979c, 0x88a32f39, 0x11465e73, 0x228cbce6, 0x9d8a7a87, 0x3b14f50f, 0x7629ea1e, 0xec53d43c, 0xd8a7a879, 0xb14f50f3, 0x629ea1e7, 0xc53d43ce, 0x8a7a879d, 0x14f50f3b, 0x29ea1e76, 0x53d43cec, 0xa7a879d8, 0x4f50f3b1, 0x9ea1e762, 0x3d43cec5, 0x7a879d8a, 0xf50f3b14, 0xea1e7629, 0xd43cec53, 0xa879d8a7, 0x50f3b14f, 0xa1e7629e, 0x43cec53d, 0x879d8a7a, 0x0f3b14f5, 0x1e7629ea, 0x3cec53d4, 0x79d8a7a8, 0xf3b14f50, 0xe7629ea1, 0xcec53d43, 0x9d8a7a87, 0x3b14f50f, 0x7629ea1e, 0xec53d43c, 0xd8a7a879, 0xb14f50f3, 0x629ea1e7, 0xc53d43ce, 0x8a7a879d, 0x14f50f3b, 0x29ea1e76, 0x53d43cec, 0xa7a879d8, 0x4f50f3b1, 0x9ea1e762, 0x3d43cec5, } // Block functions the standerd algo, for compare test func blockRef(dig *digest, p []byte) { var a, b, c, d, e, f, g, h uint32 var w [16]uint32 for len(p) >= chunk { a = dig.h[0] b = dig.h[1] c = dig.h[2] d = dig.h[3] e = dig.h[4] f = dig.h[5] g = dig.h[6] h = dig.h[7] for i := 0; i < 16; i++ { j := i * 4 w[i] = uint32(p[j+3]) | uint32(p[j+2])<<8 | uint32(p[j+1])<<16 | uint32(p[j])<<24 } for i := 0; i < 16; i++ { x := (a<<12 | a>>20) ss1 := x + e + t[i] ss1 = ss1<<7 | ss1>>25 ss2 := ss1 ^ x tt1 := (a ^ b ^ c) + d + ss2 + (w[i] ^ w[(i+4)&15]) tt2 := (e ^ f ^ g) + h + ss1 + w[i] d = c c = b<<9 | b>>23 b = a a = tt1 h = g g = f<<19 | f>>13 f = e e = tt2 ^ (tt2<<9 | tt2>>23) ^ (tt2<<17 | tt2>>15) tw := w[i] ^ w[(i+7)&15] ^ (w[(i+13)&15]<<15 | w[(i+13)&15]>>17) w[i] = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w[(i+3)&15]<<7 | w[(i+3)&15]>>25) ^ w[(i+10)&15] } for i := 16; i < 64; i++ { x := (a<<12 | a>>20) ss1 := x + e + t[i] ss1 = ss1<<7 | ss1>>25 ss2 := ss1 ^ x tt1 := ((a & b) | (b & c) | (a & c)) + d + ss2 + (w[i&15] ^ w[(i+4)&15]) tt2 := ((e & f) | (^e & g)) + h + ss1 + w[i&15] d = c c = b<<9 | b>>23 b = a a = tt1 h = g g = f<<19 | f>>13 f = e e = tt2 ^ (tt2<<9 | tt2>>23) ^ (tt2<<17 | tt2>>15) tw := w[i&15] ^ w[(i+7)&15] ^ (w[(i+13)&15]<<15 | w[(i+13)&15]>>17) w[i&15] = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w[(i+3)&15]<<7 | w[(i+3)&15]>>25) ^ w[(i+10)&15] } p = p[chunk:] dig.h[0] ^= a dig.h[1] ^= b dig.h[2] ^= c dig.h[3] ^= d dig.h[4] ^= e dig.h[5] ^= f dig.h[6] ^= g dig.h[7] ^= h } }