AES-GCM Encryption
Encrypt and decrypt data with AES-256-GCM.
sh
cargo add wasm_web_crypto --features encrypt,key,randomrust
use wasm_web_crypto::*;
let crypto = Crypto::new()?;
let subtle = SubtleCrypto::new()?;
// Generate a 256-bit AES key
let key = subtle.generate_key(
&GenerateKeyParams::Aes {
algorithm: Algorithm::AesGcm {
iv: None, additional_data: None,
tag_length: None, key_length: None,
},
length: 256,
},
true,
&[KeyUsage::Encrypt, KeyUsage::Decrypt],
).await?;
let key = match key {
GenerateKeyResult::Key(k) => k,
_ => unreachable!(),
};
// Generate a random 12-byte IV
let mut iv = [0u8; 12];
crypto.get_random_values(&mut iv)?;
// Encrypt
let ciphertext = subtle.encrypt(
&Algorithm::AesGcm {
iv: Some(iv.to_vec()), additional_data: None,
tag_length: None, key_length: None,
},
&key,
b"secret message",
).await?;
// Decrypt
let plaintext = subtle.decrypt(
&Algorithm::AesGcm {
iv: Some(iv.to_vec()), additional_data: None,
tag_length: None, key_length: None,
},
&key,
ciphertext.to_bytes(),
).await?;
assert_eq!(plaintext.to_bytes(), b"secret message");