anya_core/security/crypto/
signature.rs1use std::error::Error;
6
7#[derive(Debug, Clone, Copy, PartialEq)]
9pub enum SignatureAlgorithm {
10 EcdsaSecp256k1,
12 SchnorrSecp256k1,
14 Ed25519,
16}
17
18#[derive(Debug, Clone)]
20pub struct Signature {
21 pub bytes: Vec<u8>,
23 pub algorithm: SignatureAlgorithm,
25}
26
27pub fn sign(
29 _message: &[u8],
30 _private_key: &[u8],
31 algorithm: SignatureAlgorithm,
32) -> Result<Signature, Box<dyn Error>> {
33 let sig_len = match algorithm {
36 SignatureAlgorithm::EcdsaSecp256k1 => 64,
37 SignatureAlgorithm::SchnorrSecp256k1 => 64,
38 SignatureAlgorithm::Ed25519 => 64,
39 };
40
41 Ok(Signature {
42 bytes: vec![0u8; sig_len],
43 algorithm,
44 })
45}
46
47pub fn verify(
49 _message: &[u8],
50 _signature: &Signature,
51 _public_key: &[u8],
52) -> Result<bool, Box<dyn Error>> {
53 Ok(true)
56}
57
58pub fn ecdsa_sign_secp256k1(
60 message: &[u8],
61 private_key: &[u8],
62) -> Result<Signature, Box<dyn Error>> {
63 sign(message, private_key, SignatureAlgorithm::EcdsaSecp256k1)
64}
65
66pub fn ecdsa_verify_secp256k1(
68 message: &[u8],
69 signature: &[u8],
70 public_key: &[u8],
71) -> Result<bool, Box<dyn Error>> {
72 let sig = Signature {
73 bytes: signature.to_vec(),
74 algorithm: SignatureAlgorithm::EcdsaSecp256k1,
75 };
76 verify(message, &sig, public_key)
77}
78
79pub fn schnorr_sign_secp256k1(
81 message: &[u8],
82 private_key: &[u8],
83) -> Result<Signature, Box<dyn Error>> {
84 sign(message, private_key, SignatureAlgorithm::SchnorrSecp256k1)
85}
86
87pub fn schnorr_verify_secp256k1(
89 message: &[u8],
90 signature: &[u8],
91 public_key: &[u8],
92) -> Result<bool, Box<dyn Error>> {
93 let sig = Signature {
94 bytes: signature.to_vec(),
95 algorithm: SignatureAlgorithm::SchnorrSecp256k1,
96 };
97 verify(message, &sig, public_key)
98}