use rabe_bn::Fr;
use sha3::{
Digest,
Sha3_256
};
use crate::error::RabeError;
use std::ops::Mul;
pub fn sha3_hash<T: Mul<Fr, Output = T>>(
g: T,
data: &str
) -> Result<T, RabeError> {
let mut hasher = Sha3_256::new();
hasher.update(data.as_bytes());
match Fr::from_slice(&hasher.finalize()) {
Ok(fr) => Ok(g * fr),
Err(e) => Err(e.into())
}
}
pub fn sha3_hash_fr(
data: &str
) -> Result<Fr, RabeError> {
let mut hasher = Sha3_256::new();
hasher.update(data.as_bytes());
match Fr::from_slice(&hasher.finalize()) {
Ok(fr) => Ok(fr),
Err(e) => Err(e.into())
}
}