A test vector for pedersen hash

This commit is contained in:
Aurélien Nicolas 2018-07-31 10:32:31 +02:00 committed by Jack Grigg
parent 2ee7b108af
commit f5dfe07355
No known key found for this signature in database
GPG Key ID: 9E8255172BBF9898
2 changed files with 44 additions and 0 deletions

View File

@ -306,6 +306,7 @@ impl<E: JubjubEngine, Subgroup> Point<E, Subgroup> {
}
}
/// Convert to affine coordinates
pub fn to_xy(&self) -> (E::Fr, E::Fr) {
let zinv = self.z.inverse().unwrap();

View File

@ -105,3 +105,46 @@ where
result
}
#[cfg(test)]
mod test {
use pairing::bls12_381::{Bls12, Fr};
use super::*;
#[test]
fn test_pedersen_hash_points() {
let params = &JubjubBls12::new();
let bytes = b"Salut monde!";
let num_bits = bytes.len() * 8;
let bits: Vec<bool> = (0..num_bits).map(
|i| ((bytes[i / 8] >> (7 - (i % 8))) & 1) == 1
).collect();
let xy = pedersen_hash::<Bls12, _>(
Personalization::NoteCommitment,
bits.clone().into_iter(),
params,
).to_xy();
println!("bytes = {:?}", bytes);
let bits_int: Vec<u8> = bits.iter().map(|&i| i as u8).collect();
println!("bits = {:?}", bits_int);
println!("x = {}", xy.0);
println!("y = {}", xy.1);
// For bits=[]
//assert_eq!(xy.0.to_string(), "Fr(0x06b1187c11ca4fb4383b2e0d0dbbde3ad3617338b5029187ec65a5eaed5e4d0b)");
//assert_eq!(xy.1.to_string(), "Fr(0x3ce70f536652f0dea496393a1e55c4e08b9d55508e16d11e5db40d4810cbc982)");
// For bits=[0]
// assert_eq!(xy.0.to_string(), "Fr(0x2fc3bc454c337f71d4f04f86304262fcbfc9ecd808716b92fc42cbe6827f7f1a)");
// assert_eq!(xy.1.to_string(), "Fr(0x46d0d25bf1a654eedc6a9b1e5af398925113959feac31b7a2c036ff9b9ec0638)");
// For bits = "Salut monde!" in ASCII
assert_eq!(xy.0.to_string(), "Fr(0x676f78fa89da7c64502f790a99dfe177756867006809a6f174dcb427b345cd7c)");
assert_eq!(xy.1.to_string(), "Fr(0x1a6994a999a0abf83afc6ec5fe0ee8c8336a171653218cbfdf269689d5cfd3aa)");
}
}