use quipu::api::{decode, encode, Options};
use quipu::dictionaries;
use quipu::kdf::KdfParams;
fn main() {
let dict = dictionaries::ascii94();
let mensaje = b"Hola, esto es un secreto protegido con Quipu.";
let clave = "mi-passphrase-larga-y-secreta";
let opts = Options {
pepper: b"pepper-de-la-app",
kdf_params: KdfParams {
mem_kib: 1024,
iterations: 2,
parallelism: 1,
},
codebook_id: 1,
};
let simbolos = encode(mensaje, clave, &dict, &opts);
println!("Original : {}", String::from_utf8_lossy(mensaje));
println!("Protegido ({} símbolos):\n{}\n", simbolos.chars().count(), simbolos);
let recuperado = decode(&simbolos, clave, &dict, opts.pepper).unwrap();
println!("Recuperado: {}", String::from_utf8_lossy(&recuperado));
assert_eq!(recuperado, mensaje);
match decode(&simbolos, "clave-incorrecta", &dict, opts.pepper) {
Ok(_) => println!("\n[ERROR] no debería descifrar con clave incorrecta"),
Err(e) => println!("\nClave incorrecta -> rechazado correctamente: {e:?}"),
}
let glifos_dict = dictionaries::flagship();
let glifos = encode(mensaje, clave, &glifos_dict, &opts);
println!(
"\nMismo secreto con el diccionario insignia ({} glifos vs {} ASCII):\n{}",
glifos.chars().count(),
simbolos.chars().count(),
glifos
);
let recuperado2 = decode(&glifos, clave, &glifos_dict, opts.pepper).unwrap();
assert_eq!(recuperado2, mensaje);
}