frost/src/hash.rs

32 lines
723 B
Rust
Raw Normal View History

2019-12-03 19:54:31 -08:00
use blake2b_simd::{Params, State};
use crate::Scalar;
/// Provides H^star, the hash-to-scalar function used by RedJubjub.
pub struct HStar {
state: State,
}
impl Default for HStar {
fn default() -> Self {
let state = Params::new()
.hash_length(64)
.personal(b"Zcash_RedJubjubH")
.to_state();
Self { state }
}
}
impl HStar {
2019-12-03 19:19:36 -08:00
/// Add `data` to the hash, and return `Self` for chaining.
pub fn update(mut self, data: &[u8]) -> Self {
2019-12-03 19:54:31 -08:00
self.state.update(data);
2019-12-03 19:19:36 -08:00
self
2019-12-03 19:54:31 -08:00
}
/// Consume `self` to compute the hash output.
2019-12-04 11:59:31 -08:00
pub fn finalize(self) -> Scalar {
2019-12-03 19:54:31 -08:00
Scalar::from_bytes_wide(self.state.finalize().as_array())
}
}