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
83 lines
No EOL
2.9 KiB
Rust
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());
|
|
}
|
|
} |