liboxyd 0.1.4

Coldwire's cryptographic library
Documentation
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)
}