arnaucube
arnaucube/arkeddsaPublic Self-hosted repository
arkeddsa/src/lib.rs
src/lib.rsRaw
 1pub mod ed_on_bn254_twist;
 2pub mod eddsa;
 3pub mod poseidon;
 4pub mod signature;
 5
 6use ark_ff::PrimeField;
 7use digest::Digest;
 8pub use eddsa::*;
 9
10pub(crate) fn from_digest<F: PrimeField, D: Digest>(digest: D) -> F {
11    let bytes = digest.finalize();
12    F::from_le_bytes_mod_order(&bytes)
13}
14
15#[derive(Clone, Copy, Debug, Eq, PartialEq)]
16pub enum Error {
17    Verify,
18    BadOutputSize,
19    InvalidData,
20}
21
22#[cfg(test)]
23mod test {
24    use ark_crypto_primitives::sponge::Absorb;
25    use ark_ec::{twisted_edwards::TECurveConfig, AffineRepr};
26    use ark_ff::PrimeField;
27    use digest::Digest;
28    use rand_core::OsRng;
29
30    use crate::SigningKey;
31
32    fn run_test<A: AffineRepr, D: Digest>()
33    where
34        A::BaseField: Absorb + PrimeField,
35        A::Config: TECurveConfig,
36    {
37        let poseidon = crate::poseidon::poseidon_config(4, 8, 55);
38        let signing_key = SigningKey::<A>::generate::<D>(&mut OsRng).unwrap();
39        let message = b"xxx yyy <<< zzz >>> bunny";
40        let signature = signing_key.sign::<D, _>(&poseidon, &message[..]);
41        let public_key = signing_key.public_key();
42        public_key
43            .verify::<_>(&poseidon, &message[..], &signature)
44            .unwrap();
45    }
46
47    #[test]
48    fn test_eddsa() {
49        run_test::<ark_ed_on_bn254::EdwardsAffine, sha2::Sha512>();
50        run_test::<ark_ed_on_bn254::EdwardsAffine, blake2::Blake2b512>();
51        run_test::<crate::ed_on_bn254_twist::EdwardsAffine, sha2::Sha512>();
52        run_test::<ark_ed_on_bls12_381::EdwardsAffine, sha2::Sha512>();
53        run_test::<ark_ed_on_bls12_381_bandersnatch::EdwardsAffine, sha2::Sha512>();
54    }
55}