]> Cypherpunks repositories - gogost.git/commitdiff
One loop away
authorSergey Matveev <stargrave@stargrave.org>
Tue, 16 Jul 2024 12:28:54 +0000 (15:28 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Tue, 16 Jul 2024 12:40:11 +0000 (15:40 +0300)
internal/gost34112012/hash.go

index 699539db90bcbc2bed4b28a464067b72831c0a53..5f6b5ae812ee3a46f0b0210b1e1ba81345a289f5 100644 (file)
@@ -66,16 +66,6 @@ var (
                0x59, 0xa6, 0x74, 0xd2, 0xe6, 0xf4, 0xb4, 0xc0,
                0xd1, 0x66, 0xaf, 0xc2, 0x39, 0x4b, 0x63, 0xb6,
        }
-       tau [64]int = [64]int{
-               0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38,
-               0x01, 0x09, 0x11, 0x19, 0x21, 0x29, 0x31, 0x39,
-               0x02, 0x0a, 0x12, 0x1a, 0x22, 0x2a, 0x32, 0x3a,
-               0x03, 0x0b, 0x13, 0x1b, 0x23, 0x2b, 0x33, 0x3b,
-               0x04, 0x0c, 0x14, 0x1c, 0x24, 0x2c, 0x34, 0x3c,
-               0x05, 0x0d, 0x15, 0x1d, 0x25, 0x2d, 0x35, 0x3d,
-               0x06, 0x0e, 0x16, 0x1e, 0x26, 0x2e, 0x36, 0x3e,
-               0x07, 0x0f, 0x17, 0x1f, 0x27, 0x2f, 0x37, 0x3f,
-       }
        c [12][BlockSize]byte = [12][BlockSize]byte{
                {
                        0x07, 0x45, 0xa6, 0xf2, 0x59, 0x65, 0x80, 0xdd,
@@ -410,9 +400,85 @@ func (h *Hash) e(k, msg []byte) []byte {
 }
 
 func (h *Hash) ps(data []byte) []byte {
-       for i := 0; i < BlockSize; i++ {
-               h.psBuf[tau[i]] = pi[int(data[i])]
-       }
+       // Original clear code is:
+       // tau [64]int = [64]int{
+       //      0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38,
+       //      0x01, 0x09, 0x11, 0x19, 0x21, 0x29, 0x31, 0x39,
+       //      0x02, 0x0a, 0x12, 0x1a, 0x22, 0x2a, 0x32, 0x3a,
+       //      0x03, 0x0b, 0x13, 0x1b, 0x23, 0x2b, 0x33, 0x3b,
+       //      0x04, 0x0c, 0x14, 0x1c, 0x24, 0x2c, 0x34, 0x3c,
+       //      0x05, 0x0d, 0x15, 0x1d, 0x25, 0x2d, 0x35, 0x3d,
+       //      0x06, 0x0e, 0x16, 0x1e, 0x26, 0x2e, 0x36, 0x3e,
+       //      0x07, 0x0f, 0x17, 0x1f, 0x27, 0x2f, 0x37, 0x3f,
+       // }
+       // for i := 0; i < BlockSize; i++ {
+       //      h.psBuf[tau[i]] = pi[int(data[i])]
+       // }
+       // Below is sorted opened loop:
+       h.psBuf[0x00] = pi[int(data[0])]
+       h.psBuf[0x01] = pi[int(data[8])]
+       h.psBuf[0x02] = pi[int(data[16])]
+       h.psBuf[0x03] = pi[int(data[24])]
+       h.psBuf[0x04] = pi[int(data[32])]
+       h.psBuf[0x05] = pi[int(data[40])]
+       h.psBuf[0x06] = pi[int(data[48])]
+       h.psBuf[0x07] = pi[int(data[56])]
+       h.psBuf[0x08] = pi[int(data[1])]
+       h.psBuf[0x09] = pi[int(data[9])]
+       h.psBuf[0x0a] = pi[int(data[17])]
+       h.psBuf[0x0b] = pi[int(data[25])]
+       h.psBuf[0x0c] = pi[int(data[33])]
+       h.psBuf[0x0d] = pi[int(data[41])]
+       h.psBuf[0x0e] = pi[int(data[49])]
+       h.psBuf[0x0f] = pi[int(data[57])]
+       h.psBuf[0x10] = pi[int(data[2])]
+       h.psBuf[0x11] = pi[int(data[10])]
+       h.psBuf[0x12] = pi[int(data[18])]
+       h.psBuf[0x13] = pi[int(data[26])]
+       h.psBuf[0x14] = pi[int(data[34])]
+       h.psBuf[0x15] = pi[int(data[42])]
+       h.psBuf[0x16] = pi[int(data[50])]
+       h.psBuf[0x17] = pi[int(data[58])]
+       h.psBuf[0x18] = pi[int(data[3])]
+       h.psBuf[0x19] = pi[int(data[11])]
+       h.psBuf[0x1a] = pi[int(data[19])]
+       h.psBuf[0x1b] = pi[int(data[27])]
+       h.psBuf[0x1c] = pi[int(data[35])]
+       h.psBuf[0x1d] = pi[int(data[43])]
+       h.psBuf[0x1e] = pi[int(data[51])]
+       h.psBuf[0x1f] = pi[int(data[59])]
+       h.psBuf[0x20] = pi[int(data[4])]
+       h.psBuf[0x21] = pi[int(data[12])]
+       h.psBuf[0x22] = pi[int(data[20])]
+       h.psBuf[0x23] = pi[int(data[28])]
+       h.psBuf[0x24] = pi[int(data[36])]
+       h.psBuf[0x25] = pi[int(data[44])]
+       h.psBuf[0x26] = pi[int(data[52])]
+       h.psBuf[0x27] = pi[int(data[60])]
+       h.psBuf[0x28] = pi[int(data[5])]
+       h.psBuf[0x29] = pi[int(data[13])]
+       h.psBuf[0x2a] = pi[int(data[21])]
+       h.psBuf[0x2b] = pi[int(data[29])]
+       h.psBuf[0x2c] = pi[int(data[37])]
+       h.psBuf[0x2d] = pi[int(data[45])]
+       h.psBuf[0x2e] = pi[int(data[53])]
+       h.psBuf[0x2f] = pi[int(data[61])]
+       h.psBuf[0x30] = pi[int(data[6])]
+       h.psBuf[0x31] = pi[int(data[14])]
+       h.psBuf[0x32] = pi[int(data[22])]
+       h.psBuf[0x33] = pi[int(data[30])]
+       h.psBuf[0x34] = pi[int(data[38])]
+       h.psBuf[0x35] = pi[int(data[46])]
+       h.psBuf[0x36] = pi[int(data[54])]
+       h.psBuf[0x37] = pi[int(data[62])]
+       h.psBuf[0x38] = pi[int(data[7])]
+       h.psBuf[0x39] = pi[int(data[15])]
+       h.psBuf[0x3a] = pi[int(data[23])]
+       h.psBuf[0x3b] = pi[int(data[31])]
+       h.psBuf[0x3c] = pi[int(data[39])]
+       h.psBuf[0x3d] = pi[int(data[47])]
+       h.psBuf[0x3e] = pi[int(data[55])]
+       h.psBuf[0x3f] = pi[int(data[63])]
        return h.psBuf
 }