Skip to content

ibfaye/xamxam-crypto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔐 xamxam-crypto

XamXam Graph — Cryptographic SDK for Enterprise Data Protection
Format-Preserving Encryption (FF1) • Vaultless Tokenization • Made for Africa

License Rust Tests


🇸🇳 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

[dependencies]
xamxam-crypto = "0.1"

⚡ Usage Rapide

FPE FF1 — Chiffrement avec Préservation du Format

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

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();

Scénario Bancaire Sénégalais Complet

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");

🏗️ Architecture

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

Dépendances

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.


🔬 Sécurité

Principes

  • 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 Drop via zeroize.
  • 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.

Roadmap Sécurité

  • 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_std pour environnements embarqués

📊 Performance

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.


🗺️ Roadmap

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

👥 Pour les Développeurs

# 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 --open

🏢 À Propos de XamXam Graph

XamXam 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.


📄 Licence

Apache 2.0 — © 2026 XamXam Graph. Voir LICENSE.


« XamXam » signifie « savoir » en Wolof — la connaissance appliquée à la protection de vos données.

About

XamXam Graph cryptographic SDK — FPE FF1 (NIST SP 800-38G) and vaultless tokenization for enterprise data protection. Built in Rust. Made for Africa.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages