mod utils; use wasm_bindgen::prelude::*; use std::io::{Read, Write}; use std::iter; use age::x25519::{Recipient, Identity}; //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 (blob: Vec, privkey: String) -> Option { utils::set_panic_hook(); let key = privkey.parse::().ok()?; let decryptor = match age::Decryptor::new(&blob[..]).ok()? { age::Decryptor::Recipients(d) => d, _ => panic!("something weird happend while trying to read the ciphertext"), }; let mut decrypted = vec![]; let mut reader = decryptor.decrypt( iter::once(Box::new(key) as Box)).ok()?; reader.read_to_end(&mut decrypted).ok()?; Some(std::str::from_utf8(&decrypted).ok()?.to_owned()) } #[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()) }