1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
extern crate secp256k1 as libsecp256k1; pub fn sign(message: &[u8; 32], secret_key: &[u8; 32]) -> Result<[u8; 64], ()> { let msg = libsecp256k1::Message::parse(message); match libsecp256k1::SecretKey::parse(secret_key) { Ok(sk) => match libsecp256k1::sign(&msg, &sk) { Ok((sig, _)) => Ok(sig.serialize()), Err(_) => Err(()) }, Err(_) => Err(()) } } pub fn verify(message: &[u8; 32], signature: &[u8; 64], public_key: &[u8; 65]) -> Result<bool, ()> { let msg = libsecp256k1::Message::parse(message); let sig = libsecp256k1::Signature::parse(signature); match libsecp256k1::PublicKey::parse(public_key) { Ok(pk) => Ok(libsecp256k1::verify(&msg, &sig, &pk)), Err(_) => Err(()) } }