Skip to content

Commit d751568

Browse files
authored
sha2: improve soft-compact backend by using circular buffer (#712)
1 parent 24850fe commit d751568

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

sha2/src/sha256/soft_compact.rs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,30 @@
11
use crate::consts::K32;
22

3-
fn compress_u32(state: &mut [u32; 8], block: [u32; 16]) {
3+
fn compress_u32(state: &mut [u32; 8], mut block: [u32; 16]) {
44
let [mut a, mut b, mut c, mut d, mut e, mut f, mut g, mut h] = *state;
55

6-
let mut w = [0; 64];
7-
w[..16].copy_from_slice(&block);
8-
9-
for i in 16..64 {
10-
let w15 = w[i - 15];
11-
let s0 = (w15.rotate_right(7)) ^ (w15.rotate_right(18)) ^ (w15 >> 3);
12-
let w2 = w[i - 2];
13-
let s1 = (w2.rotate_right(17)) ^ (w2.rotate_right(19)) ^ (w2 >> 10);
14-
w[i] = w[i - 16]
15-
.wrapping_add(s0)
16-
.wrapping_add(w[i - 7])
17-
.wrapping_add(s1);
18-
}
19-
206
for i in 0..64 {
7+
let w = if i < 16 {
8+
block[i]
9+
} else {
10+
let w15 = block[(i - 15) % 16];
11+
let s0 = (w15.rotate_right(7)) ^ (w15.rotate_right(18)) ^ (w15 >> 3);
12+
let w2 = block[(i - 2) % 16];
13+
let s1 = (w2.rotate_right(17)) ^ (w2.rotate_right(19)) ^ (w2 >> 10);
14+
let new_w = block[(i - 16) % 16]
15+
.wrapping_add(s0)
16+
.wrapping_add(block[(i - 7) % 16])
17+
.wrapping_add(s1);
18+
block[i % 16] = new_w;
19+
new_w
20+
};
21+
2122
let s1 = e.rotate_right(6) ^ e.rotate_right(11) ^ e.rotate_right(25);
2223
let ch = (e & f) ^ ((!e) & g);
2324
let t1 = s1
2425
.wrapping_add(ch)
2526
.wrapping_add(K32[i])
26-
.wrapping_add(w[i])
27+
.wrapping_add(w)
2728
.wrapping_add(h);
2829
let s0 = a.rotate_right(2) ^ a.rotate_right(13) ^ a.rotate_right(22);
2930
let maj = (a & b) ^ (a & c) ^ (b & c);

0 commit comments

Comments
 (0)