1use abcrypt::{
8 Error,
9 argon2::{Algorithm, Params},
10};
11use wasm_bindgen::{JsError, prelude::wasm_bindgen};
12
13#[wasm_bindgen]
23pub fn encrypt(plaintext: &[u8], passphrase: &[u8]) -> Result<Vec<u8>, JsError> {
24 abcrypt::encrypt(plaintext, passphrase).map_err(JsError::from)
25}
26
27#[allow(clippy::module_name_repetitions)]
28#[wasm_bindgen(js_name = encryptWithParams)]
41pub fn encrypt_with_params(
42 plaintext: &[u8],
43 passphrase: &[u8],
44 memory_cost: u32,
45 time_cost: u32,
46 parallelism: u32,
47) -> Result<Vec<u8>, JsError> {
48 let params = Params::new(memory_cost, time_cost, parallelism, None)?;
49 abcrypt::encrypt_with_params(plaintext, passphrase, params).map_err(JsError::from)
50}
51
52#[allow(clippy::module_name_repetitions)]
53#[wasm_bindgen(js_name = encryptWithContext)]
65pub fn encrypt_with_context(
66 plaintext: &[u8],
67 passphrase: &[u8],
68 argon2_type: u32,
69 argon2_version: u32,
70 memory_cost: u32,
71 time_cost: u32,
72 parallelism: u32,
73) -> Result<Vec<u8>, JsError> {
74 let argon2_type = match argon2_type {
75 0 => Ok(Algorithm::Argon2d),
76 1 => Ok(Algorithm::Argon2i),
77 2 => Ok(Algorithm::Argon2id),
78 t => Err(Error::InvalidArgon2Type(t)),
79 }?;
80 let argon2_version = argon2_version.try_into()?;
81 let params = Params::new(memory_cost, time_cost, parallelism, None)?;
82 abcrypt::encrypt_with_context(plaintext, passphrase, argon2_type, argon2_version, params)
83 .map_err(JsError::from)
84}