Skip to content

Commit 9cc40ae

Browse files
authored
crypto.blake2b: use fixed arrays for block manipulations (#26751)
1 parent 99ac78e commit 9cc40ae

3 files changed

Lines changed: 23 additions & 19 deletions

File tree

vlib/crypto/blake2b/blake2b.v

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,17 @@ const iv = [
4949

5050
// message word schedule permutations
5151
const sigma = [
52-
[u8(0), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
53-
[u8(14), 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3],
54-
[u8(11), 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4],
55-
[u8(7), 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8],
56-
[u8(9), 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13],
57-
[u8(2), 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9],
58-
[u8(12), 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11],
59-
[u8(13), 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10],
60-
[u8(6), 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5],
61-
[u8(10), 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0],
62-
]
52+
[u8(0), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]!,
53+
[u8(14), 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3]!,
54+
[u8(11), 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4]!,
55+
[u8(7), 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8]!,
56+
[u8(9), 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13]!,
57+
[u8(2), 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9]!,
58+
[u8(12), 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11]!,
59+
[u8(13), 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10]!,
60+
[u8(6), 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5]!,
61+
[u8(10), 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0]!,
62+
]!
6363

6464
struct Digest {
6565
hash_size u8

vlib/crypto/blake2b/blake2b_block_generic.v

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import math.bits
1212

1313
// mixing function g
1414
@[direct_array_access; inline]
15-
fn g(mut v []u64, a u8, b u8, c u8, d u8, x u64, y u64) {
15+
fn g(mut v [16]u64, a u8, b u8, c u8, d u8, x u64, y u64) {
1616
v[a] = v[a] + v[b] + x
1717
v[d] = bits.rotate_left_64((v[d] ^ v[a]), nr1)
1818
v[c] = v[c] + v[d]
@@ -25,7 +25,7 @@ fn g(mut v []u64, a u8, b u8, c u8, d u8, x u64, y u64) {
2525

2626
// one complete mixing round with the function g
2727
@[direct_array_access; inline]
28-
fn (d Digest) mixing_round(mut v []u64, s []u8) {
28+
fn (d Digest) mixing_round(mut v [16]u64, s [16]u8) {
2929
g(mut v, 0, 4, 8, 12, d.m[s[0]], d.m[s[1]])
3030
g(mut v, 1, 5, 9, 13, d.m[s[2]], d.m[s[3]])
3131
g(mut v, 2, 6, 10, 14, d.m[s[4]], d.m[s[5]])
@@ -41,9 +41,11 @@ fn (d Digest) mixing_round(mut v []u64, s []u8) {
4141
@[direct_array_access]
4242
fn (mut d Digest) f(f bool) {
4343
// initialize the working vector
44-
mut v := []u64{len: 0, cap: 16}
45-
v << d.h[..8]
46-
v << iv[..8]
44+
mut v := [16]u64{}
45+
for i in 0 .. 8 {
46+
v[i] = d.h[i]
47+
v[i + 8] = iv[i]
48+
}
4749

4850
v[12] ^= d.t.lo
4951
v[13] ^= d.t.hi

vlib/crypto/blake2b/blake2b_block_test.v

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,11 @@ fn test_mixing_function_g() {
9191
f := true
9292

9393
// initialize the working vector from the digest and IV values
94-
mut v := []u64{len: 0, cap: 16}
95-
v << d.h[..8]
96-
v << iv[..8]
94+
mut v := [16]u64{}
95+
for i in 0 .. 8 {
96+
v[i] = d.h[i]
97+
v[i + 8] = iv[i]
98+
}
9799

98100
// fold in the 128-bit message length
99101
v[12] ^= d.t.lo

0 commit comments

Comments
 (0)