XamXam Graph cryptographic SDK — FPE FF1 (NIST SP 800-38G) and vaultless tokenization for enterprise data protection. Built in Rust. Made for Africa.
# 🔐 xamxam-crypto
> **XamXam Graph** — Cryptographic SDK for Enterprise Data Protection
> Format-Preserving Encryption (FF1) • Vaultless Tokenization • Made for Africa
---
## 🇸🇳 Pourquoi XamXam Crypto ?
**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 |
### Conformité Réglementaire
- 🇸🇳 **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**
---
## 🚀 Installation
```toml
[dependencies]
xamxam-crypto = "0.1"
```
## ⚡ Usage Rapide
### FPE FF1 — Chiffrement avec Préservation du Format
```rust
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);
```
### Vaultless Tokenization — Tokenization sans Vault
```rust
use xamxam_crypto::tokenization::VaultlessTokenizer;
let master_key = [0x55; 32]; // Stockée dans un HSM en production
let token …