diff --git a/Cargo.toml b/Cargo.toml index 6367269..fc39e57 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,12 +12,13 @@ readme = "README.md" ff = {package="ff_ce", version= "0.11", features = ["derive"]} rand_new = {package="rand", version="0.8.5"} rand = "0.4.6" +# rand = "0.8" num = "0.4" num-bigint = {version = "0.4", features = ["rand"]} num-traits = "0.2.8" -blake2 = "0.10.6" -# blake-hash = {version="0.4.0", optional=true} -# blake = {version="2.0.1", optional=true} +# blake2 = "0.10.6" +blake-hash = {version="0.4.0", optional=true} +blake = {version="2.0.1", optional=true} generic-array = "0.14" poseidon-rs = "0.0.8" arrayref = "0.3.5" @@ -34,6 +35,6 @@ hex = "0.4" name = "bench_babyjubjub" harness = false -# [features] -# default = ["blake-hash"] -# aarch64 = ["blake"] +[features] +default = ["blake-hash"] +aarch64 = ["blake"] diff --git a/src/lib.rs b/src/lib.rs index e7c64e2..9946f70 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,15 +6,12 @@ use rand::ThreadRng; use std::{iter::Sum, ops::{Neg, AddAssign}, fmt::Error}; use num::Num; use std::fmt; -// use serde::{Serialize, ser::SerializeSeq, Deserialize}; use serde::{Serialize, ser::SerializeStruct, de::Visitor, de::MapAccess, Deserialize, Deserializer}; -// use bytes::{BytesMut, BufMut}; use poseidon_rs::Poseidon; pub type Fr = poseidon_rs::Fr; // alias extern crate rand_new; extern crate rand; -// #[macro_use] extern crate ff; // Create a new primefield for the subgroup defined by the base point, order Fl: @@ -25,13 +22,12 @@ pub struct Fl(FpRepr); use arrayref::array_ref; -// #[cfg(not(feature = "aarch64"))] -// use blake_hash::Digest; // compatible version with Blake used at circomlib +#[cfg(not(feature = "aarch64"))] +use blake_hash::Digest; // compatible version with Blake used at circomlib + +#[cfg(feature = "aarch64")] +extern crate blake; // compatible version with Blake used at circomlib -// #[cfg(feature = "aarch64")] -// extern crate blake; // compatible version with Blake used at circomlib -use blake2::{Blake2b512, Digest}; -// use hex_literal::hex; use std::{cmp::min, str::FromStr}; use num_bigint::{BigInt, RandBigInt, Sign, ToBigInt}; @@ -502,30 +498,29 @@ pub fn decompress_point(bb: [u8; 32]) -> Result { Ok(Point { x: x_fr, y: y_fr }) } -// #[cfg(not(feature = "aarch64"))] -// fn blh(b: &[u8]) -> Vec { -// println!("hashing {:?} {:?}", b.len(), b); -// let debugggggggggme = blake_hash::Blake512::digest(b); -// println!("debugging {:?}", debugggggggggme); +#[cfg(not(feature = "aarch64"))] +fn blh(b: &[u8]) -> Vec { + // println!("hashing {:?} {:?}", b.len(), b); + // let debugggggggggme = blake_hash::Blake512::digest(b); + // println!("debugging {:?}", debugggggggggme); + let hash = blake_hash::Blake512::digest(b); + hash.to_vec() +} -// let hash = blake_hash::Blake512::digest(b); -// hash.to_vec() -// } +#[cfg(feature = "aarch64")] +fn blh(b: &[u8]) -> Vec { + let mut hash = [0; 64]; + blake::hash(512, b, &mut hash).unwrap(); + hash.to_vec() +} -// #[cfg(feature = "aarch64")] -// fn blh(b: &[u8]) -> Vec { -// let mut hash = [0; 64]; -// blake::hash(512, b, &mut hash).unwrap(); -// hash.to_vec() +// pub fn blh(b: &[u8]) -> Vec { +// let mut h = Blake2b512::new(); +// h.update(b); +// let digest = h.finalize(); +// return digest[..].to_vec(); // } -pub fn blh(b: &[u8]) -> Vec { - let mut h = Blake2b512::new(); - h.update(b); - let digest = h.finalize(); - return digest[..].to_vec(); -} - #[derive(Debug, Clone, Serialize)] pub struct Signature { pub r_b8: Point,