fips205-source/wasm/src/lib.rs

30 lines
1.2 KiB
Rust
Raw Normal View History

2024-03-14 13:46:53 +00:00
use wasm_bindgen::prelude::*;
use rand_chacha::rand_core::SeedableRng;
use fips205::slh_dsa_sha2_128f;
use fips205::traits::{SerDes, Signer, Verifier};
#[wasm_bindgen]
pub fn sign(message: &str) -> String {
let seed = 123;
let mut rng = rand_chacha::ChaCha8Rng::seed_from_u64(seed);
2024-10-03 17:24:28 +00:00
let hedged = true;
2024-03-14 13:46:53 +00:00
2024-10-01 19:29:06 +00:00
let (pk, sk) = slh_dsa_sha2_128f::try_keygen_with_rng(&mut rng).expect("keygen failed");
2024-10-03 17:24:28 +00:00
let sig = sk.try_sign_with_rng(&mut rng, message.as_ref(), hedged).expect("sign failed");
2024-10-01 22:17:27 +00:00
assert!(pk.verify(message.as_ref(), &sig).expect("verify error"), "verify failed");
2024-03-14 13:46:53 +00:00
let sk_hex = hex::encode(&sk.into_bytes());
let sig_hex = hex::encode(&sig);
let pk_hex = hex::encode(&pk.into_bytes());
let s0 = format!("The message to sign is: {}\n", message);
let s1 = format!("The seed used to generate the keys is: {}\n\n", seed);
let s2 = format!("The generated public||private key is: {}\n", sk_hex);
let s3 = format!("Using that private key, the calculated signature is: {}\n\n", sig_hex);
let s4 = format!("The generated public key is: {}\n", pk_hex);
let s5 = "The public key verifies the signature on the message."; // because the above assert! passed
(s0 + &s1 + &s2 + &s3 + &s4 + &s5).into()
}