summaryrefslogtreecommitdiff
path: root/age-wasm/src
diff options
context:
space:
mode:
authorstuebinm2021-04-04 02:59:42 +0200
committerstuebinm2021-04-04 03:01:19 +0200
commitbc8ac4057203f02ab8a897650d6ea519cac299cb (patch)
tree5708d1bbdb1b4a457c4a14a32fa14730efdb7305 /age-wasm/src
parentf111b082493bfc57dbe3fa1edf74581b5957c18f (diff)
age-wasm: move into subdirectory
Diffstat (limited to 'age-wasm/src')
-rw-r--r--age-wasm/src/lib.rs57
-rw-r--r--age-wasm/src/utils.rs10
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();
+}