Skip to content

Commit 4a83456

Browse files
authored
crypto.blake3: use fixed arrays for block manipulation (#26754)
1 parent 987c1d3 commit 4a83456

3 files changed

Lines changed: 20 additions & 17 deletions

File tree

vlib/crypto/blake3/blake3.v

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ 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(2), 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8],
54-
[u8(3), 4, 10, 12, 13, 2, 7, 14, 6, 5, 9, 0, 11, 15, 8, 1],
55-
[u8(10), 7, 12, 9, 14, 3, 13, 15, 4, 0, 11, 2, 5, 8, 1, 6],
56-
[u8(12), 13, 9, 11, 15, 10, 14, 8, 7, 2, 5, 3, 0, 1, 6, 4],
57-
[u8(9), 14, 11, 5, 8, 12, 15, 1, 13, 3, 0, 10, 2, 6, 4, 7],
58-
[u8(11), 15, 5, 0, 1, 9, 8, 6, 14, 10, 2, 12, 3, 4, 7, 13],
59-
]
52+
[u8(0), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]!,
53+
[u8(2), 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8]!,
54+
[u8(3), 4, 10, 12, 13, 2, 7, 14, 6, 5, 9, 0, 11, 15, 8, 1]!,
55+
[u8(10), 7, 12, 9, 14, 3, 13, 15, 4, 0, 11, 2, 5, 8, 1, 6]!,
56+
[u8(12), 13, 9, 11, 15, 10, 14, 8, 7, 2, 5, 3, 0, 1, 6, 4]!,
57+
[u8(9), 14, 11, 5, 8, 12, 15, 1, 13, 3, 0, 10, 2, 6, 4, 7]!,
58+
[u8(11), 15, 5, 0, 1, 9, 8, 6, 14, 10, 2, 12, 3, 4, 7, 13]!,
59+
]!
6060

6161
// internal flags
6262
enum Flags as u32 {

vlib/crypto/blake3/blake3_block_generic.v

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@
88

99
module blake3
1010

11-
import arrays
1211
import math.bits
1312

1413
// mixing function g
1514
@[direct_array_access; inline]
16-
fn g(mut v []u32, a u8, b u8, c u8, d u8, x u32, y u32) {
15+
fn g(mut v [16]u32, a u8, b u8, c u8, d u8, x u32, y u32) {
1716
v[a] = v[a] + v[b] + x
1817
v[d] = bits.rotate_left_32((v[d] ^ v[a]), nr1)
1918
v[c] = v[c] + v[d]
@@ -26,7 +25,7 @@ fn g(mut v []u32, a u8, b u8, c u8, d u8, x u32, y u32) {
2625

2726
// one complete mixing round with the function g
2827
@[direct_array_access; inline]
29-
fn mixing_round(mut v []u32, m []u32, s []u8) {
28+
fn mixing_round(mut v [16]u32, m []u32, s [16]u8) {
3029
g(mut v, 0, 4, 8, 12, m[s[0]], m[s[1]])
3130
g(mut v, 1, 5, 9, 13, m[s[2]], m[s[3]])
3231
g(mut v, 2, 6, 10, 14, m[s[4]], m[s[5]])
@@ -41,11 +40,15 @@ fn mixing_round(mut v []u32, m []u32, s []u8) {
4140
// compression function f
4241
@[direct_array_access]
4342
fn f(h []u32, m []u32, counter u64, input_bytes u32, flags u32) []u32 {
44-
mut v := []u32{len: 16}
43+
mut v := [16]u32{}
4544

4645
// initialize the working vector
47-
arrays.copy[u32](mut v, h[..8])
48-
arrays.copy[u32](mut v[8..], iv[..4])
46+
for i in 0 .. 8 {
47+
v[i] = h[i]
48+
}
49+
for i in 0 .. 4 {
50+
v[i + 8] = iv[i]
51+
}
4952
v[12] = u32(counter)
5053
v[13] = u32(counter >> 32)
5154
v[14] = input_bytes
@@ -70,5 +73,5 @@ fn f(h []u32, m []u32, counter u64, input_bytes u32, flags u32) []u32 {
7073
v[i + 8] ^= h[i]
7174
}
7275

73-
return v
76+
return v[..]
7477
}

vlib/crypto/blake3/blake3_block_test.v

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module blake3
1111
fn test_mixing_function_g() {
1212
mut v := [u32(0xfc8acca9), 0xf912414a, 0x35d175e3, 0xe9ed298f, 0xbe57eb01, 0x60ea4e71, 0x66decd93,
1313
0xba6def8c, 0x0ba8bc5e, 0xec33f9fc, 0x6a2a29c9, 0x85c54e27, 0x3b719f82, 0x4a59df4a,
14-
0x0585477e, 0xf77a2e5a]
14+
0x0585477e, 0xf77a2e5a]!
1515

1616
v_result := [u32(0xfc8acca9), 0x0b9ea76f, 0x35d175e3, 0xe9ed298f, 0xbe57eb01, 0x60ea4e71,
1717
0x5a44ad65, 0xba6def8c, 0x0ba8bc5e, 0xec33f9fc, 0x6a2a29c9, 0xcd574ab5, 0x53f80752,
@@ -35,7 +35,7 @@ fn test_mixing_function_g() {
3535
fn test_mixing_round_function() {
3636
mut v := [u32(0xeb9ebdcd), 0x7b78363e, 0xcdb63957, 0x4da2219b, 0x4120ce20, 0x8e7f2c43, 0x08d57788,
3737
0x582d61ae, 0x96a4b4a3, 0xea904642, 0x92d806eb, 0x1fac731f, 0x74ccfd6d, 0x40f3ddcc,
38-
0x311ee8c0, 0x7936b8d3]
38+
0x311ee8c0, 0x7936b8d3]!
3939

4040
m := [u32(0x20202020), 0x20202020, 0x22202020, 0x4e4f433c, 0x54584554, 0x6e5c5d3e, 0x0a3b2922,
4141
0x20202020, 0x65722020, 0x6e727574, 0x0a3b3020, 0x20202020, 0x6c65207d, 0x69206573,

0 commit comments

Comments
 (0)