ironfish_primitives/
keys.rs1use blake2b_simd::{Hash as Blake2bHash, Params as Blake2bParams};
2
3pub const PRF_EXPAND_PERSONALIZATION: &[u8; 16] = b"Zcash_ExpandSeed";
4
5pub fn prf_expand(sk: &[u8], t: &[u8]) -> Blake2bHash {
7 prf_expand_vec(sk, &[t])
8}
9
10pub fn prf_expand_vec(sk: &[u8], ts: &[&[u8]]) -> Blake2bHash {
11 let mut h = Blake2bParams::new()
12 .hash_length(64)
13 .personal(PRF_EXPAND_PERSONALIZATION)
14 .to_state();
15 h.update(sk);
16 for t in ts {
17 h.update(t);
18 }
19 h.finalize()
20}
21
22#[derive(Clone, Copy, Debug, PartialEq)]
24pub struct OutgoingViewingKey(pub [u8; 32]);