|
1 | 1 | use crate::{
|
2 | 2 | generic_keccak::KeccakState,
|
3 |
| - traits::{Absorb, KeccakItem, Squeeze1}, |
| 3 | + traits::{Absorb, KeccakItem, Squeeze}, |
4 | 4 | };
|
5 | 5 |
|
6 | 6 | /// The internal keccak state that can also buffer inputs to absorb.
|
@@ -131,28 +131,24 @@ impl<const PARALLEL_LANES: usize, const RATE: usize, STATE: KeccakItem<PARALLEL_
|
131 | 131 | /// If `consumed > 0` is returned, `self.buf` contains a full block to be
|
132 | 132 | /// loaded.
|
133 | 133 | // Note: consciously not inlining this function to avoid using too much stack
|
134 |
| - #[hax_lib::requires(PARALLEL_LANES > 0 && self.buf_len < RATE)] |
135 | 134 | pub(crate) fn fill_buffer(&mut self, inputs: &[&[u8]; PARALLEL_LANES]) -> usize {
|
136 | 135 | let input_len = inputs[0].len();
|
137 |
| - |
138 |
| - // Nothing buffered, buffer full, or no input |
139 |
| - if self.buf_len == 0 || self.buf_len >= RATE || input_len == 0 { |
140 |
| - return 0; |
141 |
| - } |
142 |
| - |
143 |
| - // Remaining space to complete a full block |
144 |
| - let need = RATE - self.buf_len; |
145 |
| - if input_len < need { |
146 |
| - return 0; |
147 |
| - } |
148 |
| - |
149 |
| - let end = RATE; // buf_len + need == RATE |
150 |
| - #[allow(clippy::needless_range_loop)] |
151 |
| - for i in 0..PARALLEL_LANES { |
152 |
| - self.buf[i][self.buf_len..end].copy_from_slice(&inputs[i][..need]); |
| 136 | + let mut consumed = 0; |
| 137 | + if self.buf_len > 0 { |
| 138 | + // There's something buffered internally to consume. |
| 139 | + if self.buf_len + input_len >= RATE { |
| 140 | + // We have enough data when combining the internal buffer and |
| 141 | + // the input. |
| 142 | + consumed = RATE - self.buf_len; |
| 143 | + |
| 144 | + #[allow(clippy::needless_range_loop)] |
| 145 | + for i in 0..PARALLEL_LANES { |
| 146 | + self.buf[i][self.buf_len..].copy_from_slice(&inputs[i][..consumed]); |
| 147 | + } |
| 148 | + self.buf_len += consumed; |
| 149 | + } |
153 | 150 | }
|
154 |
| - self.buf_len = end; |
155 |
| - need |
| 151 | + consumed |
156 | 152 | }
|
157 | 153 |
|
158 | 154 | /// Absorb a final block.
|
@@ -187,7 +183,7 @@ impl<const RATE: usize, STATE: KeccakItem<1>> KeccakXofState<1, RATE, STATE> {
|
187 | 183 | #[inline(always)]
|
188 | 184 | pub(crate) fn squeeze(&mut self, out: &mut [u8])
|
189 | 185 | where
|
190 |
| - KeccakState<1, STATE>: Squeeze1<STATE>, |
| 186 | + KeccakState<1, STATE>: Squeeze<STATE>, |
191 | 187 | {
|
192 | 188 | if self.sponge {
|
193 | 189 | // If we called `squeeze` before, call f1600 first.
|
|
0 commit comments