sharenet/passport/src/infrastructure/crypto/wasm_test.rs
continuist 05674b4caa
Some checks failed
Podman Rootless Demo / test-backend (push) Has been skipped
Podman Rootless Demo / test-frontend (push) Has been skipped
Podman Rootless Demo / build-backend (push) Has been skipped
Podman Rootless Demo / build-frontend (push) Failing after 5m32s
Podman Rootless Demo / deploy-prod (push) Has been skipped
Add to project
2025-11-01 11:53:11 -04:00

83 lines
No EOL
2.9 KiB
Rust

//! WASM-specific cryptographic tests
#[cfg(test)]
mod tests {
use crate::domain::entities::*;
use crate::domain::traits::{MnemonicGenerator, KeyDeriver, FileEncryptor};
use crate::infrastructure::crypto::{Bip39MnemonicGenerator, Ed25519KeyDeriver, XChaCha20FileEncryptor};
#[test]
fn test_wasm_bip39_generator_creates_valid_mnemonic() {
let generator = Bip39MnemonicGenerator;
let phrase = generator.generate().unwrap();
// Should have 24 words
assert_eq!(phrase.words().len(), 24);
// Should be valid BIP-39
generator.validate(phrase.words()).unwrap();
}
#[test]
fn test_wasm_key_deriver_creates_consistent_keys() {
let deriver = Ed25519KeyDeriver;
// Create a test seed
let test_seed = Seed::new(vec![1; 32]);
let (public_key, private_key) = deriver.derive_from_seed(&test_seed).unwrap();
// Public key should be 32 bytes
assert_eq!(public_key.0.len(), 32);
// Private key should be 32 bytes
assert_eq!(private_key.0.len(), 32);
}
#[test]
fn test_wasm_file_encryptor_round_trip() {
let encryptor = XChaCha20FileEncryptor;
let key_deriver = Ed25519KeyDeriver;
let seed = Seed::new(vec![1; 32]);
let (public_key, _) = key_deriver.derive_from_seed(&seed).unwrap();
let did = Did::new(&public_key);
let password = "test-password";
// Encrypt
let encrypted_file = encryptor.encrypt(&seed, password, &public_key, &did, "u:Test Universe:12345678-1234-1234-1234-123456789012", &[], &None, &None).unwrap();
// Verify file structure
assert_eq!(encrypted_file.kdf, "HKDF-SHA256");
assert_eq!(encrypted_file.cipher, "XChaCha20-Poly1305");
assert_eq!(encrypted_file.salt.len(), 32);
assert_eq!(encrypted_file.nonce.len(), 24);
assert_eq!(encrypted_file.public_key, public_key.0);
assert_eq!(encrypted_file.did, did.0);
// Decrypt
let (decrypted_seed, decrypted_public_key, _, _, _, _) = encryptor.decrypt(&encrypted_file, password).unwrap();
// Verify decryption
assert_eq!(decrypted_seed.as_bytes(), seed.as_bytes());
assert_eq!(decrypted_public_key.0, public_key.0);
}
#[test]
fn test_wasm_file_encryptor_wrong_password_fails() {
let encryptor = XChaCha20FileEncryptor;
let seed = Seed::new(vec![1, 2, 3, 4, 5]);
let public_key = PublicKey(vec![1; 32]);
let did = Did::new(&public_key);
// Encrypt with one password
let encrypted_file = encryptor.encrypt(&seed, "correct-password", &public_key, &did, "u:Test Universe:12345678-1234-1234-1234-123456789012", &[], &None, &None).unwrap();
// Try to decrypt with wrong password
let result = encryptor.decrypt(&encrypted_file, "wrong-password");
// Should fail
assert!(result.is_err());
}
}