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}