core/crypto/sm3: odinfmt (NFC)

This commit is contained in:
Yawning Angel
2023-11-17 16:53:29 +09:00
parent 391b3090c9
commit 811132ccbd
+16 -8
View File
@@ -10,8 +10,8 @@ package sm3
Implementation of the SM3 hashing algorithm, as defined in <https://datatracker.ietf.org/doc/html/draft-sca-cfrg-sm3-02> Implementation of the SM3 hashing algorithm, as defined in <https://datatracker.ietf.org/doc/html/draft-sca-cfrg-sm3-02>
*/ */
import "core:os"
import "core:io" import "core:io"
import "core:os"
import "../util" import "../util"
@@ -141,14 +141,14 @@ final :: proc(ctx: ^Sm3_Context, hash: []byte) {
pad: [64]byte pad: [64]byte
pad[0] = 0x80 pad[0] = 0x80
if length % 64 < 56 { if length % 64 < 56 {
update(ctx, pad[0: 56 - length % 64]) update(ctx, pad[0:56 - length % 64])
} else { } else {
update(ctx, pad[0: 64 + 56 - length % 64]) update(ctx, pad[0:64 + 56 - length % 64])
} }
length <<= 3 length <<= 3
util.PUT_U64_BE(pad[:], length) util.PUT_U64_BE(pad[:], length)
update(ctx, pad[0: 8]) update(ctx, pad[0:8])
assert(ctx.bitlength == 0) assert(ctx.bitlength == 0)
util.PUT_U32_BE(hash[0:], ctx.state[0]) util.PUT_U32_BE(hash[0:], ctx.state[0])
@@ -189,12 +189,18 @@ block :: proc "contextless" (ctx: ^Sm3_Context, buf: []byte) {
for len(buf) >= 64 { for len(buf) >= 64 {
for i := 0; i < 16; i += 1 { for i := 0; i < 16; i += 1 {
j := i * 4 j := i * 4
w[i] = u32(buf[j]) << 24 | u32(buf[j + 1]) << 16 | u32(buf[j + 2]) << 8 | u32(buf[j + 3]) w[i] =
u32(buf[j]) << 24 | u32(buf[j + 1]) << 16 | u32(buf[j + 2]) << 8 | u32(buf[j + 3])
} }
for i := 16; i < 68; i += 1 { for i := 16; i < 68; i += 1 {
p1v := w[i - 16] ~ w[i - 9] ~ util.ROTL32(w[i - 3], 15) p1v := w[i - 16] ~ w[i - 9] ~ util.ROTL32(w[i - 3], 15)
// @note(zh): inlined P1 // @note(zh): inlined P1
w[i] = p1v ~ util.ROTL32(p1v, 15) ~ util.ROTL32(p1v, 23) ~ util.ROTL32(w[i - 13], 7) ~ w[i - 6] w[i] =
p1v ~
util.ROTL32(p1v, 15) ~
util.ROTL32(p1v, 23) ~
util.ROTL32(w[i - 13], 7) ~
w[i - 6]
} }
for i := 0; i < 64; i += 1 { for i := 0; i < 64; i += 1 {
wp[i] = w[i] ~ w[i + 4] wp[i] = w[i] ~ w[i + 4]
@@ -215,7 +221,8 @@ block :: proc "contextless" (ctx: ^Sm3_Context, buf: []byte) {
a, b, c, d = tt1, a, util.ROTL32(u32(b), 9), c a, b, c, d = tt1, a, util.ROTL32(u32(b), 9), c
// @note(zh): inlined P0 // @note(zh): inlined P0
e, f, g, h = (tt2 ~ util.ROTL32(tt2, 9) ~ util.ROTL32(tt2, 17)), e, util.ROTL32(u32(f), 19), g e, f, g, h =
(tt2 ~ util.ROTL32(tt2, 9) ~ util.ROTL32(tt2, 17)), e, util.ROTL32(u32(f), 19), g
} }
for i := 16; i < 64; i += 1 { for i := 16; i < 64; i += 1 {
@@ -230,7 +237,8 @@ block :: proc "contextless" (ctx: ^Sm3_Context, buf: []byte) {
a, b, c, d = tt1, a, util.ROTL32(u32(b), 9), c a, b, c, d = tt1, a, util.ROTL32(u32(b), 9), c
// @note(zh): inlined P0 // @note(zh): inlined P0
e, f, g, h = (tt2 ~ util.ROTL32(tt2, 9) ~ util.ROTL32(tt2, 17)), e, util.ROTL32(u32(f), 19), g e, f, g, h =
(tt2 ~ util.ROTL32(tt2, 9) ~ util.ROTL32(tt2, 17)), e, util.ROTL32(u32(f), 19), g
} }
state0 ~= a state0 ~= a