ursa 0.1.0-dev-2

This is the shared crypto library for Hyperledger components.
use CryptoError;

#[derive(Debug)]
pub enum DigestAlgorithm {
    Sha2_256,
    Sha2_384,
    Sha2_512,
    Blake2b256,
    Blake2b384,
    Blake2b512
}

pub fn digest(algorithm: DigestAlgorithm, message: &[u8]) -> Result<Vec<u8>, CryptoError> {
    match algorithm {
        DigestAlgorithm::Sha2_256 => {
            let mut hash = sha2::Sha256::new();
            hash.update(message);
            hash.finalize()
        },
        DigestAlgorithm::Sha2_384 => {
            let mut hash = sha2::Sha384::new();
            hash.update(message);
            hash.finalize()
        },
        DigestAlgorithm::Sha2_512 => {
            let mut hash = sha2::Sha512::new();
            hash.update(message);
            hash.finalize()
        }
        DigestAlgorithm::Blake2b256 => {
            let mut hash = blake2::Blake2b256::new();
            hash.update(message);
            hash.finalize()
        }
        DigestAlgorithm::Blake2b384 => {
            let mut hash = blake2::Blake2b384::new();
            hash.update(message);
            hash.finalize()
        },
        DigestAlgorithm::Blake2b512 => {
            let mut hash = blake2::Blake2b512::new();
            hash.update(message);
            hash.finalize()
        }
    }
}

pub trait Digest {
    fn new() -> Self where Self : Sized;
    fn reset(&mut self);
    fn update(&mut self, data: &[u8]);
    fn finalize(&mut self) -> Result<Vec<u8>, CryptoError>;
}

pub mod sha2;
pub mod blake2;