Fonctionnalités

Ce qui tourne en production

Chaque carte correspond à un module du dépôt : API TypeScript, bot Discord, portail Next.js, loader C++20.

Fonctions Clés

Challenge Ed25519

Nonce horodaté, signé par le serveur, valable 30 secondes, usage unique.

POST /api/v1/auth/challenge émet un nonce et un horodatage signés avec la clé privée Ed25519 du serveur. Le client vérifie la signature avant toute suite. Un challenge consommé ou hors fenêtre de 30 s est rejeté.

Liaison HWID

Empreinte machine SHA-256, liée à la licence au premier login réussi.

Le client Windows calcule une empreinte (CPUID + numéro de série du volume) puis un SHA-256. Au premier accès, la licence enregistre ce HWID. Un autre appareil reçoit hwid_mismatch jusqu’à réinitialisation.

Session AES-256-GCM

Jeton de session chiffré, enveloppe signée Ed25519.

Après vérif HMAC (clé d’intégrité + nonce + HWID + e-mail), le serveur renvoie un jeton enveloppé en AES-256-GCM. Le client ne parse le JSON qu’après contrôle de la signature Ed25519.

Heartbeat

Rotation du jeton et refus des instances concurrentes.

POST /api/v1/client/heartbeat valide la session, le HWID et l’horloge (±30 s). Un second instance_id sur la même licence est refusé (concurrent_execution). Le jeton est renouvelé à chaque battement.

SQLite en WAL

Licences, sessions, journaux d’accès et audit dans kult.db.

La base ./data/kult.db tourne en journal WAL. Tables utilisées : licenses, sessions, auth_challenges, hwid_tokens, hwid_reset_tokens, access_logs, audit_trail, users.

Expérience Utilisateur

Portail web

Connexion par clé de licence et e-mail enregistré.

Le portail accepte une clé au format KULT-XXXX-XXXX-XXXX et un e-mail. L’e-mail est lié à la licence au premier succès, puis doit correspondre à chaque connexion.

Reset HWID par e-mail

Lien unique, 30 minutes, envoyé via Resend.

Depuis le loader, le portail ou /reset-hwid sur Discord, un jeton SHA-256 est stocké. Un e-mail Resend contient le lien /reset-hwid?token=… La confirmation efface le HWID ; le prochain login lie le nouvel appareil.

Tableau de bord licence

Statut, expiration, HWID masqué, liaison e-mail, cooldown 7 jours.

Une fois connecté, le tableau de bord montre le statut, la date d’expiration et l’empreinte. Un reset HWID depuis le dashboard est limité à une fois tous les 7 jours. L’e-mail ne se lie qu’une fois.

Commandes Discord

/claim, /status, /reset-hwid — plus /license pour les admins.

Les membres lient une clé avec /claim, consultent /status, demandent un reset par /reset-hwid. Les administrateurs créent, révoquent et inspectent les licences via /license.

Runtimes & SDKs

Client Windows C++20

Loader ImGui / DirectX 11, TLS 1.3, anti-debug.

Le client Kult Auth (C++20) affiche l’UI ImGui, envoie challenge/verify en HTTPS TLS 1.3, vérifie Ed25519, et efface les secrets avec SecureZeroMemory. Ce n’est pas un SDK publié : c’est le client de licence.

API Node.js

Express, validation Zod, Helmet, plafonds de requêtes.

L’API écoute sur le port 8080 (api.666.rehab). Les routes d’auth sont validées avec Zod, protégées par express-rate-limit, et exposent /api/v1/health et /api/v1/status pour le site.

Bot Discord

discord.js v14, même base SQLite que l’API.

Le bot partage kult.db avec l’API. Il gère aussi la communauté (whitelist, tickets, modération) : ce n’est pas un bus de webhooks licence, ce sont des commandes slash.