1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
use blake2_rfc::blake2b::Blake2b; use blake2_rfc::blake2s::Blake2s; use sha2::{Sha256, Digest}; use jubjub::{JubjubEngine, ToUniform}; pub fn hash_to_scalar<E: JubjubEngine>(persona: &[u8], a: &[u8], b: &[u8]) -> E::Fs { let mut hasher = Blake2b::with_params(64, &[], &[], persona); hasher.update(a); hasher.update(b); let ret = hasher.finalize(); E::Fs::to_uniform(ret.as_ref()) } pub fn hash_to_scalar_s<E: JubjubEngine>(persona: &[u8], a: &[u8], b: &[u8]) -> E::Fs { let mut hasher = Blake2s::with_params(32, &[], &[], persona); hasher.update(a); hasher.update(b); let ret = hasher.finalize(); E::Fs::to_uniform_32(ret.as_ref()) } pub fn sha256_hash_to_scalar<E: JubjubEngine>(persona: &[u8], a: &[u8], b: &[u8]) -> E::Fs { let mut hasher = Sha256::new(); hasher.input(persona); hasher.input(a); hasher.input(b); let result = hasher.result(); E::Fs::to_uniform_32(result.as_slice()) }