use happy_cracking::crypto::columnar;
#[test]
fn test_encrypt_basic() {
let result = columnar::encrypt("HELLOWORLD", "HACK").unwrap();
assert_eq!(result, "EWDLOXHOLLRX");
}
#[test]
fn test_decrypt_basic() {
let result = columnar::decrypt("EWDLOXHOLLRX", "HACK").unwrap();
assert_eq!(result, "HELLOWORLDXX");
}
#[test]
fn test_roundtrip() {
let original = "THEQUICKBROWNFOX";
let key = "ZEBRA";
let encrypted = columnar::encrypt(original, key).unwrap();
let decrypted = columnar::decrypt(&encrypted, key).unwrap();
assert!(decrypted.starts_with(original));
}
#[test]
fn test_padding() {
let encrypted = columnar::encrypt("HELLO", "ABC").unwrap();
assert_eq!(encrypted.len(), 6);
}
#[test]
fn test_exact_fit_no_padding() {
let encrypted = columnar::encrypt("ABCDEF", "AB").unwrap();
assert_eq!(encrypted.len(), 6);
}
#[test]
fn test_empty_input() {
assert_eq!(columnar::encrypt("", "KEY").unwrap(), "");
assert_eq!(columnar::decrypt("", "KEY").unwrap(), "");
}
#[test]
fn test_empty_key_error() {
assert!(columnar::encrypt("HELLO", "").is_err());
}
#[test]
fn test_invalid_key_error() {
assert!(columnar::encrypt("HELLO", "KEY123").is_err());
}
#[test]
fn test_decrypt_invalid_length_error() {
assert!(columnar::decrypt("HELLO", "ABC").is_err());
}
#[test]
fn test_ctf_flag() {
let original = "FLAGCAPTURETHEFLAG";
let key = "CTF";
let encrypted = columnar::encrypt(original, key).unwrap();
let decrypted = columnar::decrypt(&encrypted, key).unwrap();
assert!(decrypted.starts_with(original));
}