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}