XamXam Graph — Cryptographic SDK for Enterprise Data Protection
Format-Preserving Encryption (FF1) • Vaultless Tokenization • Made for Africa
XamXam Crypto est le SDK open-source de protection des données développé par XamXam Graph, une agence de Data Engineering & Agentic AI basée à Dakar (Sénégal) et Montréal (Canada).
Il fournit deux primitives cryptographiques essentielles pour la protection des données au niveau champ :
| Module | Description | Usage typique |
|---|---|---|
| FPE FF1 | Format-Preserving Encryption (NIST SP 800-38G) | NINA, cartes bancaires, tout identifiant avec contrainte de format |
| Vaultless Tokenization | Tokenization sans table de correspondance (AES-256-GCM + HKDF) | PII, colonnes de jointure, données analytiques protégées |
- 🇸🇳 CDP Sénégal (Loi 2008-12, amendements 2024-25)
- 🌍 ECOWAS Act A/SA.1/01/10 sur la protection des données
- 🏦 BCEAO directives sécurité financière UEMOA
- 🇪🇺 RGPD (GDPR)
- 💳 PCI DSS 4.0
[dependencies]
xamxam-crypto = "0.1"use xamxam_crypto::fpe::FpeFf1;
let key = [0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C];
let ff1 = FpeFf1::new(&key, b"colonne-nina").unwrap();
// Chiffrer un NINA sénégalais (13 chiffres)
let nina = "1985123456789";
let protected = ff1.encrypt(nina, 10).unwrap();
assert_eq!(protected.len(), 13); // Format préservé
assert!(protected.chars().all(|c| c.is_ascii_digit())); // Chiffres uniquement
// Déchiffrer
let recovered = ff1.decrypt(&protected, 10).unwrap();
assert_eq!(recovered, nina);use xamxam_crypto::tokenization::VaultlessTokenizer;
let master_key = [0x55; 32]; // Stockée dans un HSM en production
let tokenizer = VaultlessTokenizer::new(
&master_key,
"core_banking", // namespace
"nina", // colonne
2025, // période de rotation
).unwrap();
let token = tokenizer.tokenize("1985123456789").unwrap();
// → "abc123XYZ..." (Base64 URL-safe, longueur variable)
let recovered = tokenizer.detokenize(&token).unwrap();
assert_eq!(recovered, "1985123456789");
// Batch operations
let values = vec!["1111111111111", "2222222222222", "3333333333333"];
let tokens = tokenizer.tokenize_batch(&values).unwrap();use xamxam_crypto::fpe::FpeFf1;
use xamxam_crypto::tokenization::VaultlessTokenizer;
let master_key = [0x7E; 32];
let fpe_key = [0x3F; 32];
// Protection NINA avec tokenization (jointures préservées)
let nina_tok = VaultlessTokenizer::new(&master_key, "customers", "nina", 2025).unwrap();
// Protection carte bancaire avec FPE (format préservé)
let card_fpe = FpeFf1::new(&fpe_key, b"credit_card").unwrap();
// Application
let nina_protected = nina_tok.tokenize("1985123456789").unwrap();
let card_protected = card_fpe.encrypt("4532015112830366", 10).unwrap();
// Vérification
assert_eq!(nina_tok.detokenize(&nina_protected).unwrap(), "1985123456789");
assert_eq!(card_fpe.decrypt(&card_protected, 10).unwrap(), "4532015112830366");xamxam-crypto/
├── src/
│ ├── lib.rs # Point d'entrée, types d'erreur
│ ├── fpe/
│ │ └── mod.rs # FF1 (NIST SP 800-38G) — Feistel 10 rounds
│ └── tokenization/
│ └── mod.rs # Vaultless Tokenization — AES-256-GCM + HKDF
├── tests/
│ └── integration.rs # Tests d'intégration (35 tests)
├── Cargo.toml
└── README.md
| Crate | Usage |
|---|---|
aes |
AES-128/192/256 (cœur FPE) |
aes-gcm |
AES-256-GCM (tokenization) |
hkdf + sha2 |
HKDF-SHA512 (dérivation de clé) |
zeroize |
Effacement sécurisé des clés en mémoire |
base64 |
Encodage URL-safe des tokens |
Zéro dépendance non-nécessaire. Pas d'OpenSSL.
- Zero-vault architecture : Pas de table de correspondance. Le token est dérivé cryptographiquement.
- Key zeroization : Les clés sont effacées de la mémoire au
Dropviazeroize. - HSM-ready : Les clés maîtresses sont destinées à être stockées dans un HSM (Thales Luna, Utimaco). L'abstraction PKCS#11 est sur la roadmap.
- Déterministe : Même entrée + même clé + même tweak = même token. Les jointures fonctionnent.
- Abstraction HSM (PKCS#11 / KMIP)
- Support big-integer (
num-bigint) pour entrées > 38 chiffres - Audit de sécurité externe (Cure53 / Trail of Bits)
- FIPS 140-2 validation pathway
- Support
no_stdpour environnements embarqués
| Opération | Débit (approx.) |
|---|---|
| FPE FF1 encrypt (16 chiffres) | ~50 000 ops/s |
| FPE FF1 decrypt (16 chiffres) | ~50 000 ops/s |
| Tokenization (13 caractères) | ~80 000 ops/s |
| Batch tokenization (100 items) | ~8 000 ops/s |
Mesuré sur Intel Xeon (VPS Hetzner), release build, single-thread.
| Version | Features |
|---|---|
| 0.1.0 (current) | FPE FF1 (radix 2-62, ≤38 digits), Vaultless Tokenization, 35 tests |
| 0.2.0 | Big-integer FF1 (>38 digits), Batch FPE API, no_std support |
| 0.3.0 | HSM abstraction layer (PKCS#11), Streaming tokenization |
| 0.4.0 | Dynamic masking proxy, Regex-based classification engine |
| 1.0.0 | FIPS 140-2 validation, External security audit, Production SLAs |
# Cloner
git clone https://github.com/xamxam-graph/xamxam-crypto.git
cd xamxam-crypto
# Tests
cargo test
# Build release
cargo build --release
# Docs
cargo doc --openXamXam Graph est une agence de Data Engineering & Agentic AI basée à Dakar, Sénégal et Montréal, Canada. Nous construisons l'infrastructure de données et de protection pour les banques, telcos, et fintechs de la zone UEMOA.
Apache 2.0 — © 2026 XamXam Graph. Voir LICENSE.
« XamXam » signifie « savoir » en Wolof — la connaissance appliquée à la protection de vos données.