Skip to content

Commit b29057b

Browse files
authored
std.crypto.ghash: fix uninitialized polynomial use (#13527)
In the process of 'remaining blocks', the length of processed message can be from 1 to 79. The value of 'n-1' is ranged from 0 to 3. So, st.hx[i] must be initialized at least from st.hx[0] to st.hx[3]
1 parent 0b0292c commit b29057b

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

lib/std/crypto/ghash.zig

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub const Ghash = struct {
1818
pub const mac_length = 16;
1919
pub const key_length = 16;
2020

21-
const pc_count = if (builtin.mode != .ReleaseSmall) 16 else 2;
21+
const pc_count = if (builtin.mode != .ReleaseSmall) 16 else 4;
2222
const agg_2_treshold = 5;
2323
const agg_4_treshold = 22;
2424
const agg_8_treshold = 84;
@@ -42,14 +42,11 @@ pub const Ghash = struct {
4242

4343
var hx: [pc_count]Precomp = undefined;
4444
hx[0] = h;
45-
if (block_count >= agg_2_treshold) {
46-
hx[1] = gcmReduce(clsq128(hx[0])); // h^2
47-
}
45+
hx[1] = gcmReduce(clsq128(hx[0])); // h^2
46+
hx[2] = gcmReduce(clmul128(hx[1], h)); // h^3
47+
hx[3] = gcmReduce(clsq128(hx[1])); // h^4 = h^2^2
48+
4849
if (builtin.mode != .ReleaseSmall) {
49-
if (block_count >= agg_4_treshold) {
50-
hx[2] = gcmReduce(clmul128(hx[1], h)); // h^3
51-
hx[3] = gcmReduce(clsq128(hx[1])); // h^4 = h^2^2
52-
}
5350
if (block_count >= agg_8_treshold) {
5451
hx[4] = gcmReduce(clmul128(hx[3], h)); // h^5
5552
hx[5] = gcmReduce(clsq128(hx[2])); // h^6 = h^3^2

0 commit comments

Comments
 (0)