wasmsign 0.1.2

Add and verify digital signatures to/from WASM binaries
Documentation
extern crate byteorder;
extern crate ed25519_dalek;
#[macro_use]
extern crate failure;
extern crate parity_wasm;
extern crate rand;
extern crate sha2;

pub mod errors;
pub mod signature;
mod wasm_signature;

pub use self::errors::*;
pub use self::signature::*;
use parity_wasm::elements::*;

pub const DEFAULT_SYMBOL_NAME: &str = "___SIGNATURE";

pub fn keygen(signature_alg: &SignatureAlg) -> KeyPair {
    signature_alg.keygen()
}

pub fn sign(
    module_bytes: &[u8],
    key_pair: &KeyPair,
    ad: Option<&[u8]>,
    symbol_name: &str,
) -> Result<Vec<u8>, WError> {
    let signature_alg = key_pair.sk.to_alg()?;
    let module: Module = parity_wasm::deserialize_buffer(module_bytes)?;
    let module =
        wasm_signature::attach_signature(module, &signature_alg, ad, &key_pair, symbol_name)?;
    let signed_module_bytes = parity_wasm::serialize(module)?;
    Ok(signed_module_bytes)
}

pub fn verify(
    module_bytes: &[u8],
    pk: &PublicKey,
    ad: Option<&[u8]>,
    symbol_name: &str,
) -> Result<(), WError> {
    pk.to_alg()?;
    let module: Module = parity_wasm::deserialize_buffer(module_bytes)?;
    wasm_signature::verify_signature(&module, ad, pk, symbol_name)
}