diff options
author | stuebinm | 2021-04-04 02:59:42 +0200 |
---|---|---|
committer | stuebinm | 2021-04-04 03:01:19 +0200 |
commit | bc8ac4057203f02ab8a897650d6ea519cac299cb (patch) | |
tree | 5708d1bbdb1b4a457c4a14a32fa14730efdb7305 /age-wasm/src | |
parent | f111b082493bfc57dbe3fa1edf74581b5957c18f (diff) |
age-wasm: move into subdirectory
Diffstat (limited to 'age-wasm/src')
-rw-r--r-- | age-wasm/src/lib.rs | 57 | ||||
-rw-r--r-- | age-wasm/src/utils.rs | 10 |
2 files changed, 67 insertions, 0 deletions
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<Vec<u8>> { + utils::set_panic_hook(); + + let pubkey = key.parse::<Recipient>().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<u8>, passphrase: String) -> Option<String> { + 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(); +} |