From 00de066e4ff69a1e0674b6955530ee13591612dd Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Tue, 16 Jul 2024 15:28:54 +0300 Subject: [PATCH] One loop away --- internal/gost34112012/hash.go | 92 ++++++++++++++++++++++++++++++----- 1 file changed, 79 insertions(+), 13 deletions(-) diff --git a/internal/gost34112012/hash.go b/internal/gost34112012/hash.go index 699539d..5f6b5ae 100644 --- a/internal/gost34112012/hash.go +++ b/internal/gost34112012/hash.go @@ -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 } -- 2.48.1