hash_based_signatures/
wasm.rs1use crate::signature::stateless_merkle::StatelessMerkleSignatureScheme;
2use crate::signature::SignatureScheme;
3use crate::utils::{hash, slice_to_hash, string_to_hash_maybe};
4use js_sys::Uint8Array;
5
6use wasm_bindgen::prelude::*;
7
8#[wasm_bindgen]
9extern "C" {
10 pub fn alert(s: &str);
11
12 #[wasm_bindgen(js_namespace = console)]
13 fn log(s: &str);
14}
15
16#[wasm_bindgen]
17pub fn verify(file_bytes: Uint8Array, signature_bytes: Uint8Array, public_key_str: &str) -> String {
18 let file_hash = hash(&file_bytes.to_vec());
19
20 match string_to_hash_maybe(public_key_str) {
21 Ok(public_key) => match rmp_serde::from_slice(&signature_bytes.to_vec()) {
22 Ok(signature) => {
23 if StatelessMerkleSignatureScheme::verify(
24 public_key,
25 slice_to_hash(file_hash.as_ref()),
26 &signature,
27 ) {
28 "valid".into()
29 } else {
30 "invalid_signature".into()
31 }
32 }
33 Err(_) => "cant_parse_signature".into(),
34 },
35 Err(_) => "invalid_public_key".into(),
36 }
37}