From bc8ac4057203f02ab8a897650d6ea519cac299cb Mon Sep 17 00:00:00 2001 From: stuebinm Date: Sun, 4 Apr 2021 02:59:42 +0200 Subject: age-wasm: move into subdirectory --- age-wasm/src/lib.rs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ age-wasm/src/utils.rs | 10 +++++++++ 2 files changed, 67 insertions(+) create mode 100644 age-wasm/src/lib.rs create mode 100644 age-wasm/src/utils.rs (limited to 'age-wasm/src') diff --git a/age-wasm/src/lib.rs b/age-wasm/src/lib.rs new file mode 100644 index 0000000..0f6fb67 --- /dev/null +++ b/age-wasm/src/lib.rs @@ -0,0 +1,57 @@ +mod utils; + +use wasm_bindgen::prelude::*; + +use std::io::{Read, Write}; + +use age::x25519::Recipient; + +//use rand::{rngs::OsRng, RngCore}; + +// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global +// allocator. +#[cfg(feature = "wee_alloc")] +#[global_allocator] +static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; + +#[wasm_bindgen] +extern "C" { + fn alert(s: &str); +} + + +#[wasm_bindgen] +pub fn age_encrypt(plaintext: String, key: String) -> Option> { + utils::set_panic_hook(); + + let pubkey = key.parse::().ok()?; + + let encryptor = age::Encryptor::with_recipients(vec![Box::new(pubkey)]); + + let mut encrypted = vec![]; + + let mut writer = encryptor.wrap_output(&mut encrypted).ok()?; + + writer.write_all(&plaintext.as_bytes()).ok()?; + writer.finish().ok()?; + + Some(encrypted) +} + +#[wasm_bindgen] +pub fn age_decrypt_passphrase(blob: Vec, passphrase: String) -> Option { + utils::set_panic_hook(); + + + let decryptor = match age::Decryptor::new(&blob[..]).unwrap() { + age::Decryptor::Passphrase(d) => d, + _ => panic!("something very wrong happened!"), + }; + + let mut decrypted = vec![]; + let mut reader = decryptor + .decrypt(&secrecy::Secret::new(passphrase), None) + .ok()?; + reader.read_to_end(&mut decrypted).ok()?; + Some(std::str::from_utf8(&decrypted).ok()?.to_owned()) +} diff --git a/age-wasm/src/utils.rs b/age-wasm/src/utils.rs new file mode 100644 index 0000000..b1d7929 --- /dev/null +++ b/age-wasm/src/utils.rs @@ -0,0 +1,10 @@ +pub fn set_panic_hook() { + // When the `console_error_panic_hook` feature is enabled, we can call the + // `set_panic_hook` function at least once during initialization, and then + // we will get better error messages if our code ever panics. + // + // For more details see + // https://github.com/rustwasm/console_error_panic_hook#readme + #[cfg(feature = "console_error_panic_hook")] + console_error_panic_hook::set_once(); +} -- cgit v1.2.3