defuse_crypto/curve/
mod.rs

1#[cfg(feature = "ed25519")]
2mod ed25519;
3#[cfg(feature = "ed25519")]
4pub use self::ed25519::*;
5
6#[cfg(feature = "secp256k1")]
7mod secp256k1;
8#[cfg(feature = "secp256k1")]
9pub use self::secp256k1::*;
10
11#[cfg(feature = "p256")]
12mod p256;
13#[cfg(feature = "p256")]
14pub use self::p256::*;
15
16pub trait Curve {
17    type PublicKey;
18    type Signature;
19
20    /// Message that can be signed by this curve
21    type Message: AsRef<[u8]> + ?Sized;
22
23    /// Public key that should be known prior to verification
24    type VerifyingKey;
25}
26
27pub trait VerifiableCurve: Curve {
28    fn verify(
29        signature: &Self::Signature,
30        message: &Self::Message,
31        verifying_key: &Self::VerifyingKey,
32    ) -> Option<Self::PublicKey>;
33}