rusty_crypt 0.4.2

Rust library allowing for a very quick and simple implementation of AES-GCM encryption
Documentation
#[cfg(test)]
mod tests {

    use base64::{Engine as _, engine::general_purpose};

    use rusty_crypt::aes_gcm_256_decrypt::AesGcmDecrypt;
    use rusty_crypt::error::CryptoError;

    #[test]
    fn test_aes_gcm_256_decrypt_valid_ciphertext() {
        let decryptor = AesGcmDecrypt;

        let key = "JeAe64TzfRKY0f4Mfx4slwqE3dZwQAXKd7UPZ2JF2q0=";

        let encrypted = "afRuT4pTzTXOhN8W::HUlMxpds+L3Vvy6PJlvdIQHkTvF/MjAgALYEBPADneIAkg==";

        let result = decryptor
            .decrypt(encrypted, key)
            .expect("Decryption should succeed");

        assert_eq!(result, "Hello rusty_crypt!");
    }

    #[test]
    fn test_aes_gcm_256_decrypt_wrong_key() {
        let decryptor = AesGcmDecrypt;

        let encrypted = "afRuT4pTzTXOhN8W::HUlMxpds+L3Vvy6PJlvdIQHkTvF/MjAgALYEBPADneIAkg==";

        let wrong_key = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";

        let result = decryptor.decrypt(encrypted, wrong_key);

        assert!(
            matches!(result, Err(CryptoError::DecryptionFailed)),
            "Wrong key should fail"
        );
    }

    #[test]
    fn test_aes_gcm_256_decrypt_invalid_ciphertext_format() {
        let decryptor = AesGcmDecrypt;

        let key = "JeAe64TzfRKY0f4Mfx4slwqE3dZwQAXKd7UPZ2JF2q0=";

        let encrypted = "invalid_ciphertext";

        let result = decryptor.decrypt(encrypted, key);

        assert!(matches!(result, Err(CryptoError::InvalidCiphertext)));
    }

    #[test]
    fn test_aes_gcm_256_decrypt_invalid_base64() {
        let decryptor = AesGcmDecrypt;

        let key = "not_valid_base64!!!";

        let encrypted = "afRuT4pTzTXOhN8W::HUlMxpds+L3Vvy6PJlvdIQHkTvF/MjAgALYEBPADneIAkg==";

        let result = decryptor.decrypt(encrypted, key);

        assert!(matches!(result, Err(CryptoError::InvalidBase64(_))));
    }

    #[test]
    fn test_aes_gcm_256_decrypt_invalid_key_size() {
        let decryptor = AesGcmDecrypt;

        let short_key = general_purpose::STANDARD.encode(vec![0u8; 16]);

        let encrypted = "afRuT4pTzTXOhN8W::HUlMxpds+L3Vvy6PJlvdIQHkTvF/MjAgALYEBPADneIAkg==";

        let result = decryptor.decrypt(encrypted, &short_key);

        assert!(matches!(result, Err(CryptoError::InvalidKeySize)));
    }
}