Skip to content

Commit 9b4fd53

Browse files
committed
chore: split off reading hash out of state
1 parent c146030 commit 9b4fd53

File tree

1 file changed

+28
-23
lines changed

1 file changed

+28
-23
lines changed

src/keccak256.nr

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -41,27 +41,7 @@ pub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32] {
4141
let state = apply_keccak_permutations(block_array, real_max_blocks);
4242

4343
//3. sponge_squeeze
44-
let mut result = [0; 32];
45-
unroll_loop!(
46-
0u32,
47-
4u32,
48-
|i: u32| {
49-
quote {
50-
let lane = state[$i] as Field;
51-
let lane_le: [u8; 8] = lane.to_le_bytes();
52-
result[8 * $i] = lane_le[0];
53-
result[8 * $i + 1] = lane_le[1];
54-
result[8 * $i + 2] = lane_le[2];
55-
result[8 * $i + 3] = lane_le[3];
56-
result[8 * $i + 4] = lane_le[4];
57-
result[8 * $i + 5] = lane_le[5];
58-
result[8 * $i + 6] = lane_le[6];
59-
result[8 * $i + 7] = lane_le[7];
60-
}
61-
},
62-
);
63-
64-
result
44+
read_hash_from_state(state)
6545
}
6646

6747
fn convert_to_u64_array<let N: u32>(input: [u8; N]) -> [u64; N / WORD_SIZE] {
@@ -132,7 +112,8 @@ fn apply_keccak_permutations<let N: u32>(
132112
for i in 1..max_blocks {
133113
let mut previous_state = intermediate_states[i - 1];
134114
for j in 0..LIMBS_PER_BLOCK {
135-
previous_state[j] = previous_state[j] ^ flattened_blocks_array[i * LIMBS_PER_BLOCK + j];
115+
previous_state[j] =
116+
previous_state[j] ^ flattened_blocks_array[i * LIMBS_PER_BLOCK + j];
136117
}
137118
intermediate_states[i] = keccakf1600(previous_state);
138119
}
@@ -162,8 +143,32 @@ pub(crate) fn apply_keccak_padding<let BLOCK_BYTES: u32>(
162143
}
163144
}
164145

146+
fn read_hash_from_state(state: [u64; NUM_KECCAK_LANES]) -> [u8; 32] {
147+
let mut result = [0; 32];
148+
unroll_loop!(
149+
0u32,
150+
4u32,
151+
|i: u32| {
152+
quote {
153+
let lane = state[$i] as Field;
154+
let lane_le: [u8; 8] = lane.to_le_bytes();
155+
result[8 * $i] = lane_le[0];
156+
result[8 * $i + 1] = lane_le[1];
157+
result[8 * $i + 2] = lane_le[2];
158+
result[8 * $i + 3] = lane_le[3];
159+
result[8 * $i + 4] = lane_le[4];
160+
result[8 * $i + 5] = lane_le[5];
161+
result[8 * $i + 6] = lane_le[6];
162+
result[8 * $i + 7] = lane_le[7];
163+
}
164+
},
165+
);
166+
167+
result
168+
}
169+
165170
comptime fn unroll_loop(start: u32, end: u32, body: fn(u32) -> Quoted) -> Quoted {
166-
let mut iterations: [Quoted] = @[];
171+
let mut iterations: [Quoted] = &[];
167172
for i in start..end {
168173
iterations = iterations.push_back(body(i));
169174
}

0 commit comments

Comments
 (0)