You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.6 KiB

pub mod ed_on_bn254_twist;
pub mod eddsa;
pub mod poseidon;
pub mod signature;
use ark_ff::PrimeField;
use digest::Digest;
pub use eddsa::*;
pub(crate) fn from_digest<F: PrimeField, D: Digest>(digest: D) -> F {
let bytes = digest.finalize();
F::from_le_bytes_mod_order(&bytes)
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Error {
Verify,
BadOutputSize,
InvalidData,
}
#[cfg(test)]
mod test {
use ark_crypto_primitives::sponge::Absorb;
use ark_ec::{twisted_edwards::TECurveConfig, AffineRepr};
use ark_ff::PrimeField;
use digest::Digest;
use rand_core::OsRng;
use crate::SigningKey;
fn run_test<A: AffineRepr, D: Digest>()
where
A::BaseField: Absorb + PrimeField,
A::Config: TECurveConfig,
{
let poseidon = crate::poseidon::poseidon_config(4, 8, 55);
let signing_key = SigningKey::<A>::generate::<D>(&mut OsRng).unwrap();
let message = b"xxx yyy <<< zzz >>> bunny";
let signature = signing_key.sign::<D, _>(&poseidon, &message[..]);
let public_key = signing_key.public_key();
public_key
.verify::<_>(&poseidon, &message[..], &signature)
.unwrap();
}
#[test]
fn test_eddsa() {
run_test::<ark_ed_on_bn254::EdwardsAffine, sha2::Sha512>();
run_test::<ark_ed_on_bn254::EdwardsAffine, blake2::Blake2b512>();
run_test::<crate::ed_on_bn254_twist::EdwardsAffine, sha2::Sha512>();
run_test::<ark_ed_on_bls12_381::EdwardsAffine, sha2::Sha512>();
run_test::<ark_ed_on_bls12_381_bandersnatch::EdwardsAffine, sha2::Sha512>();
}
}