Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.

Quipu

License: AGPL v3 crates.io docs.rs CI post-quantum

Librería de codificación con protección criptográfica y simbología propia.

🇬🇧 Quipu is a free/libre (AGPL-3.0) library that encrypts and encodes data using only vetted cryptographic primitives (XChaCha20-Poly1305, Argon2id, HKDF), with a hybrid post-quantum mode (X25519 + ML-KEM-1024) and a verifiable online hardening mode (VOPRF + DLEQ). It never invents primitives — security lives in the keys, not in hiding the format.

Filosofía "rueda y oruga": donde existe buena criptografía, la reutilizamos (XChaCha20-Poly1305, Argon2id, HKDF, ML-KEM, X25519); donde hay terreno nuevo (representación, simbología, formato), innovamos. Nunca inventamos primitivas criptográficas: la seguridad vive en la clave + el AEAD, no en la representación.

Qué hace

Protege datos y los representa como símbolos (texto denso, glifos, o una imagen), de forma reversible y autenticada.

datos → KDF(passphrase+pepper) → AEAD → contenedor → codec base-N → diccionario → símbolos

Modos

Modo API (Rust) Descripción
Simétrico (passphrase) api::encode / api::decode Argon2id + XChaCha20-Poly1305
Post-cuántico (clave pública) api::encode_to_recipient / decode_as_recipient Híbrido X25519 + ML-KEM-1024 (transcript ligado estilo X-Wing)
Canal visual api::encode_to_image / decode_from_image Salida PNG lossless
Canal robusto (impreso) api::encode_to_robust_image / decode_from_robust_image + Reed-Solomon (corrige errores de canal)
Glifos nativos api::encode_to_glyph_image / decode_from_glyph_image Alfabeto de glifos propio, reconocible
Online (endurecimiento) api::encode_online / decode_online VOPRF verificable (prueba DLEQ): el cliente detecta un servidor deshonesto
Firmado (autenticidad) api::encode_signed / decode_verified Firma híbrida Ed25519 + ML-DSA-87 (combinador AND). Autenticidad y no-repudio verificables; no confidencialidad
Firmado triple (alta garantía, feature slh) api::encode_signed_triple / decode_verified_triple Firma triple-híbrida Ed25519 + ML-DSA-87 + SLH-DSA-256s (AND 3-de-3): infalsificable mientras sobreviva ≥1 de {curva, retículo, hash}. Opt-in; firma ~34 KB
Streaming (archivos grandes) api::encrypt_stream / decrypt_stream Cifrado por chunks (memoria acotada) para datos en reposo grandes; resistente a truncación/reordenamiento/splice. Contenedor QST1
Señuelos / Honey (feature honey) honey::encrypt_pin / decrypt_pin (y genérico encrypt/decrypt) Honey Encryption para secretos de baja entropía (PIN, frase mnemónica): cualquier passphrase equivocada descifra a otro secreto plausible, no a un error → sin oráculo de fuerza bruta. Opt-in. Sin autenticación por diseño (un tag sería un oráculo); no sustituye al núcleo AEAD, solo para secuencias uniformes

Diccionarios (simbología enchufable)

  • dictionaries::ascii94() — 94 símbolos ASCII (copy-paste universal).
  • dictionaries::flagship() — 4096 glifos (12 bits/símbolo, ~2× más denso).
  • dictionaries::from_range(start, count) — alfabeto a medida.
  • glyphopt — selección de glifos por máxima separabilidad (base para glifos por IA).

Galería de glifos

La misma carga cifrada puede representarse como texto denso, como una imagen PNG, o con un alfabeto de glifos propio (geométrico o generado orgánicamente). La simbología es pública (Kerckhoffs): no aporta ni resta seguridad, solo representación.

Alfabeto de glifos Secreto en glifos Glifos nativos Glifos generativos
alfabeto secreto nativos generativos

Seguridad y endurecimiento

  • Precapas: normalización NFKC, pepper, padding Padmé (oculta longitud), binding de contexto (AAD), HKDF (separación de subclaves).
  • Antihacker: borrado de claves en memoria (zeroize), comparación en tiempo constante, validación de parámetros KDF, errores uniformes.
  • Hackerbot: red-team interno (tamper/truncation/uniqueness). Encontró y se corrigió un DoS por parámetros Argon2 maliciosos.
  • Security Lab (features lab / lab-offline, no viajan en el build publicado): red-team adaptativo que se ataca a sí mismo. Núcleo en CI (fuga de formato + falsificación de firmas) con corpus encadenado y meta-tests que fallan si se debilita una defensa antihacker; y un banco offline aislado (contenedor sin red) para timing y coste de guessing acelerado por IA. cargo run --example securitylab --features lab · bash lab/run.sh. Ver lab/README.md y THREAT_MODEL.md §9.

Uso (Rust)

use quipu::api::{encode, decode, Options};
use quipu::dictionaries;

let dict = dictionaries::ascii94();
let sym = encode(b"secreto", "passphrase", &dict, &Options::default());
let data = decode(&sym, "passphrase", &dict, b"").unwrap();

Firma híbrida (autenticidad verificable por terceros, post-cuántica):

use quipu::api::{encode_signed, decode_verified};
use quipu::{dictionaries, pqsign};

let dict = dictionaries::ascii94();
let (vk, sk) = pqsign::generate_keypair();
let signed = encode_signed(b"acta oficial", &sk, &dict);
let msg = decode_verified(&signed, &vk, &dict).unwrap(); // falla si se altera

Uso (Python)

pip install quipu-crypto   # se instala como "quipu-crypto", se importa como "quipu"
import quipu
s = quipu.encode(b"secreto", "passphrase")
assert quipu.decode(s, "passphrase") == b"secreto"

# Post-cuántico
pub, sec = quipu.generate_keypair()
s = quipu.encode_to_recipient(b"secreto", pub)
assert quipu.decode_as_recipient(s, sec) == b"secreto"

# Firma híbrida (autenticidad, post-cuántica)
vk, sk = quipu.generate_signing_keypair()
signed = quipu.encode_signed(b"acta oficial", sk)
assert quipu.decode_verified(signed, vk) == b"acta oficial"  # falla si se altera

# Streaming AEAD para datos grandes (salida binaria, no símbolos)
blob = quipu.encrypt_stream(b"...datos grandes...", "passphrase")
assert quipu.decrypt_stream(blob, "passphrase") == b"...datos grandes..."

Uso (C / otros lenguajes)

Un ABI de C estable vive en bindings/c (crate quipu-capi). Compila una librería compartida/estática y un header quipu.h generado con cbindgen, de modo que cualquier lenguaje con FFI de C (Node.js, Go, Ruby, …) puede consumir Quipu. La superficie es paritaria con los bindings de Python. Ver bindings/c/README.md.

#include "quipu.h"
uint8_t *blob = NULL; size_t n = 0;
if (quipu_encrypt_stream(data, len, "passphrase", NULL, 0, 0, &blob, &n) == QUIPU_OK) {
    /* ... usar blob ... */
    quipu_bytes_free(blob, n);   /* se limpia al liberar: sin residuo de secretos */
}

Ejemplos funcionales

Round-trip de todos los modos, listo para correr:

cargo run --example quickstart          # Rust  (examples/quickstart.rs)
python examples/quickstart.py           # Python (examples/quickstart.py)

Construir y probar

cargo test                      # tests unit + property
cargo clippy --all-targets      # lint
cargo run --example demo        # demo simétrico + glifos
cargo run --example v2demo      # post-cuántico + OPRF + imagen
cargo run --example hackerbot   # red-team
cargo run --example testplatform --release   # batería completa
cargo run --example securitylab --features lab   # laboratorio de seguridad (red-team adaptativo)
cargo run --example redteam --features "lab slh honey" --release   # red-team consolidado (todas las superficies)
bash lab/run.sh   # banco offline aislado (timing + guessing) — Etapa B

# Fuzzing coverage-guided (libFuzzer, nightly). Targets: parse_container,
# honey_decrypt, unpad, codec_roundtrip.
cargo +nightly fuzz run honey_decrypt

# Bindings Python
source venv/bin/activate
maturin develop --features python
python tests/python/test_quipu.py

Estado

v1 + v1.1 + v2 + firmas implementados con TDD estricto. 106 tests Rust + Wycheproof + 8 Python verdes, clippy limpio, fuzzing sin crashes, Miri sin UB. Parámetros post-cuánticos en categoría de seguridad NIST 5 (CNSA 2.0): ML-KEM-1024 y ML-DSA-87. Modo online con VOPRF verificable (prueba DLEQ), KEM híbrido con transcript ligado estilo X-Wing, firma híbrida Ed25519 + ML-DSA-87 (combinador AND), y pre-auditoría propia (ver INFORME_PREAUDITORIA.txt y MODELO_DE_AMENAZA.txt). Security Lab (red-team adaptativo auto-hospedado): 14 ataques en CI (--features lab) + banco offline de timing/guessing (--features lab-offline).

⚠️ Proyecto en desarrollo. La pre-auditoría interna NO sustituye una auditoría criptográfica independiente: no usar para proteger datos críticos reales hasta ese sello externo.

Documentación

⚠️ La pre-auditoría interna es preparación, no sustituye una auditoría independiente. Ese sello externo es el siguiente paso del proyecto (solicitud enviada al OTF Security Lab).

Licencia

Modelo de licencia dual (open-core):

  • AGPL-3.0-or-later para uso abierto (ver LICENSE).
  • Licencia comercial para producto propietario cerrado o SaaS sin abrir código.
  • El servidor OPRF se ofrece además como servicio gestionado de pago.

Detalles en LICENSING.md. Contacto: isazajuancarlos@gmail.com

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quipu_crypto-0.7.0.tar.gz (309.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

quipu_crypto-0.7.0-cp39-abi3-win_amd64.whl (427.0 kB view details)

Uploaded CPython 3.9+Windows x86-64

quipu_crypto-0.7.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (584.6 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

quipu_crypto-0.7.0-cp39-abi3-macosx_11_0_arm64.whl (522.8 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file quipu_crypto-0.7.0.tar.gz.

File metadata

  • Download URL: quipu_crypto-0.7.0.tar.gz
  • Upload date:
  • Size: 309.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for quipu_crypto-0.7.0.tar.gz
Algorithm Hash digest
SHA256 6ea12e9b485facfb79782a2b1cfd4c1f40b6f6e4b6e530c2561be1d1727b2d4c
MD5 ba4ca6b39683f1c23880f522e87e1d89
BLAKE2b-256 9fad8cc37bacd21e4e1806a60a87aed403583d2dbefbb3e33a24a649131d72de

See more details on using hashes here.

Provenance

The following attestation bundles were made for quipu_crypto-0.7.0.tar.gz:

Publisher: release.yml on isazajuancarlos/quipu

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quipu_crypto-0.7.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: quipu_crypto-0.7.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 427.0 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for quipu_crypto-0.7.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c9d462d883ae37fc3cd6e3134434c6649d37aa35f0bab5f7e2f985c5d1ce2c76
MD5 c38a2b24588dbc62d687747a963b501d
BLAKE2b-256 f3c0e88ed6875d211755318d3f3496efa1e1f674db5b2bcd916a3050f65b4c7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for quipu_crypto-0.7.0-cp39-abi3-win_amd64.whl:

Publisher: release.yml on isazajuancarlos/quipu

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quipu_crypto-0.7.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for quipu_crypto-0.7.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 30106b43fa309a7a95d1cac3b366e67426b3a8cc22d7fc1992c9c4240d953b2c
MD5 17042c55764e35f8768bbf6150e8422a
BLAKE2b-256 d480cc11e1b1ed74c111c7922f76c33f27d7a0c71baaf3be0d3dfd946c3c414b

See more details on using hashes here.

Provenance

The following attestation bundles were made for quipu_crypto-0.7.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on isazajuancarlos/quipu

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quipu_crypto-0.7.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for quipu_crypto-0.7.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b9deb89ddae277d94e09b853c2cec3ecfb1a6fdd7702de4b8f3bc4b7c59ed38
MD5 4e7526bc5d418032367cdc382d630508
BLAKE2b-256 4716be226c09fdd0dc4a1eb8faabea726a1c031a2a872c0c93824ad03704e799

See more details on using hashes here.

Provenance

The following attestation bundles were made for quipu_crypto-0.7.0-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on isazajuancarlos/quipu

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.11.1

4 files

0.11.0

4 files

0.10.0

4 files

0.9.1

4 files

0.9.0

4 files

This release

0.7.0 This release

4 files

0.6.0

4 files

0.5.0

4 files

0.4.1

4 files

0.4.0

4 files

0.3.0

4 files

0.2.0

4 files

0.1.0

4 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page