use libsecp256k1::{
sign as secp256k1_sign, verify as secp256k1_verify, Error, Message, PublicKey, RecoveryId,
SecretKey, Signature,
};
use crate::v1::sha256;
pub fn sign(sk: SecretKey, data: &[u8]) -> Result<(Signature, RecoveryId), Error> {
let h = sha256::hash(data);
let message = match Message::parse_slice(&h) {
Ok(m) => m,
Err(e) => return Err(e),
};
let (signature, recovery) = secp256k1_sign(&message, &sk);
Ok((signature, recovery))
}
pub fn verify(pk: PublicKey, data: &[u8], signature: Signature) -> Result<bool, Error> {
let h = sha256::hash(data);
let message = match Message::parse_slice(&h) {
Ok(m) => m,
Err(e) => return Err(e),
};
let res = secp256k1_verify(&message, &signature, &pk);
Ok(res)
}