claw-vcs-crypto 0.1.1

Capsule signing, verification, and encryption primitives for Claw VCS.
Documentation
use ed25519_dalek::{Signature, Verifier, VerifyingKey};

use crate::CryptoError;

/// Verifies raw Ed25519 signature bytes for the provided message.
pub fn verify(
    public_key_bytes: &[u8; 32],
    data: &[u8],
    signature: &[u8],
) -> Result<bool, CryptoError> {
    let verifying_key = VerifyingKey::from_bytes(public_key_bytes)
        .map_err(|e| CryptoError::InvalidKey(e.to_string()))?;

    let sig_bytes: [u8; 64] = signature
        .try_into()
        .map_err(|_| CryptoError::VerificationFailed("invalid signature length".into()))?;

    let sig = Signature::from_bytes(&sig_bytes);

    match verifying_key.verify(data, &sig) {
        Ok(()) => Ok(true),
        Err(_) => Ok(false),
    }
}