rskit-encryption 0.2.0-alpha.2

Encryption utilities: AES-256-GCM and ChaCha20-Poly1305
Documentation
use super::*;

#[test]
fn test_factory_aes_gcm() {
    let encryptor = new_encryptor(b"secret-key", Algorithm::AesGcm);
    assert_eq!(encryptor.algorithm(), Algorithm::AesGcm);

    let plaintext = b"test";
    let ciphertext = encryptor.encrypt(plaintext).unwrap();
    let decrypted = encryptor.decrypt(&ciphertext).unwrap();
    assert_eq!(decrypted, plaintext);
}

#[test]
fn test_factory_chacha20() {
    let encryptor = new_encryptor(b"secret-key", Algorithm::ChaCha20Poly1305);
    assert_eq!(encryptor.algorithm(), Algorithm::ChaCha20Poly1305);

    let plaintext = b"test";
    let ciphertext = encryptor.encrypt(plaintext).unwrap();
    let decrypted = encryptor.decrypt(&ciphertext).unwrap();
    assert_eq!(decrypted, plaintext);
}

#[test]
fn malformed_versioned_envelopes_are_rejected() {
    use base64::{Engine, engine::general_purpose::STANDARD};

    let encryptor = new_encryptor(b"secret-key", Algorithm::AesGcm);
    let too_short = STANDARD.encode([1_u8, 1, 2, 3]);
    let err = encryptor.decrypt(&too_short).unwrap_err();
    assert_eq!(err.code(), rskit_errors::ErrorCode::InvalidFormat);

    let mut bad_version = vec![0_u8, 1];
    bad_version.extend_from_slice(&[0_u8; 44]);
    let err = encryptor
        .decrypt(&STANDARD.encode(bad_version))
        .unwrap_err();
    assert_eq!(err.code(), rskit_errors::ErrorCode::InvalidFormat);

    let mut bad_algorithm = vec![1_u8, 99];
    bad_algorithm.extend_from_slice(&[0_u8; 44]);
    let err = encryptor
        .decrypt(&STANDARD.encode(bad_algorithm))
        .unwrap_err();
    assert_eq!(err.code(), rskit_errors::ErrorCode::InvalidFormat);
}