1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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 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)
}