|
2 | 2 | //! - [`prf`] - Pseudorandom function |
3 | 3 | //! - [`h`], [`g`] - Hash function |
4 | 4 | //! - [`Xof`] - Extendable output function |
5 | | -use sha3::{ |
6 | | - digest::{ExtendableOutput, Update, XofReader}, |
7 | | - Digest, Shake128, Shake256, |
8 | | -}; |
| 5 | +
|
| 6 | +use crate::hashes::sha3::{Sha3_256, Sha3_512, Shake128, Shake256}; |
9 | 7 |
|
10 | 8 | pub fn prf<const ETA: usize>(s: &[u8], b: u8) -> [u8; 64 * ETA] { |
11 | 9 | assert!(s.len() == 32); |
12 | 10 |
|
13 | | - let mut hasher = Shake256::default(); |
14 | | - hasher.update(&s); |
| 11 | + let mut hasher = Shake256::new(); |
| 12 | + hasher.update(s); |
15 | 13 | hasher.update(&[b]); |
16 | 14 | let mut res = [0u8; 64 * ETA]; |
17 | | - XofReader::read(&mut hasher.finalize_xof(), &mut res); |
| 15 | + hasher.squeeze(&mut res); |
18 | 16 | res |
19 | 17 | } |
20 | 18 |
|
21 | | -pub fn h(s: &[u8]) -> [u8; 32] { sha3::Sha3_256::digest(s).into() } |
| 19 | +pub fn h(s: &[u8]) -> [u8; 32] { |
| 20 | + let mut hasher = Sha3_256::new(); |
| 21 | + hasher.update(s); |
| 22 | + hasher.finalize() |
| 23 | +} |
22 | 24 |
|
23 | 25 | pub fn j(s: &[u8]) -> [u8; 32] { |
24 | | - let mut hasher = Shake256::default(); |
| 26 | + let mut hasher = Shake256::new(); |
25 | 27 | hasher.update(s); |
26 | | - let mut reader = hasher.finalize_xof(); |
27 | 28 | let mut res = [0u8; 32]; |
28 | | - XofReader::read(&mut reader, &mut res); |
| 29 | + hasher.squeeze(&mut res); |
29 | 30 | res |
30 | 31 | } |
31 | 32 |
|
32 | 33 | pub fn g(c: &[u8]) -> ([u8; 32], [u8; 32]) { |
33 | | - let res = sha3::Sha3_512::digest(c); |
34 | | - (res[..32].try_into().unwrap(), res[32..].try_into().unwrap()) |
| 34 | + let mut hasher = Sha3_512::new(); |
| 35 | + hasher.update(c); |
| 36 | + let res = hasher.finalize(); |
| 37 | + let (h0, h1) = res.split_at(32); |
| 38 | + (h0.try_into().unwrap(), h1.try_into().unwrap()) |
35 | 39 | } |
36 | 40 |
|
37 | 41 | pub struct Xof(Shake128); |
38 | 42 |
|
39 | 43 | impl Xof { |
40 | | - pub fn init() -> Self { Self(Shake128::default()) } |
| 44 | + pub fn init() -> Self { Self(Shake128::new()) } |
41 | 45 |
|
42 | | - pub fn absorb(mut self, input: &[u8]) -> impl XofReader { |
43 | | - self.0.update(input); |
44 | | - self.0.finalize_xof() |
45 | | - } |
| 46 | + pub fn absorb(&mut self, input: &[u8]) { self.0.update(input); } |
46 | 47 |
|
47 | | - pub fn squeeze(reader: &mut impl XofReader, output: &mut [u8]) { |
48 | | - XofReader::read(reader, output); |
49 | | - } |
| 48 | + pub fn squeeze(&mut self, output: &mut [u8]) { self.0.squeeze(output); } |
50 | 49 | } |
0 commit comments