mirror of
https://github.com/saymrwulf/fips205-source.git
synced 2026-09-04 20:03:45 +00:00
29 lines
1.2 KiB
Rust
29 lines
1.2 KiB
Rust
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);
|
|
let hedged = true;
|
|
|
|
let (pk, sk) = slh_dsa_sha2_128f::try_keygen_with_rng(&mut rng).expect("keygen failed");
|
|
let sig = sk.try_sign_with_rng(&mut rng, message.as_ref(), hedged).expect("sign failed");
|
|
assert!(pk.verify(message.as_ref(), &sig).expect("verify error"), "verify failed");
|
|
|
|
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()
|
|
}
|