Reference Client
Vampauth ships a single-file Luau reference client. It posts tokey/check, verifies the Ed25519 signature inside the executor, and only reports success when the response is genuine. Crypto is Ed25519, SHA-256, SHA-512, and Base64 adapted from rbx-cryptography (MIT) — nothing hand-rolled in the security-critical code.
What it does
Check(key) returns true, payload only when every gate passes:
- the request returned
2xx, nonce_echomatches the nonce this call sent,- the response carries
signatureandproject_id, - the Ed25519 signature verifies over
sha256(nonce|hwid|expiresAtUnix|project_id), - and the key is not locally expired.
false, reason. Nothing runs on a fail-closed path.
Configuration
The default HWID is one stable id per executor install (persisted via the file API, with a per-session fallback), so a key sticks to the device that first activated it. For a stronger fingerprint see Integration snippets.
Embed, then obfuscate
The recommended workflow:- Embed the client inside your script (paste the module body, not a remote
loadstring). - Embed your keycheck logic, project key, and public signing key in the same file.
- Obfuscate the whole thing with script protection.
Threat model
What verifying the signature stops:- Fake responses — a malicious server or an injected HTTP hook cannot sign a response; only Vampauth holds the project’s signing private key.
- Replays — each call uses a fresh nonce, so a captured
validresponse no longer verifies on the next call. - Edited responses — changing
expires_atorkeyinvalidates the signature.
- The user removing the check — a client executed locally can have the keycheck patched out. This is what obfuscation is for.
- Weak HWID fingerprints — HWID is passthrough; Vampauth only compares the string. The quality of the fingerprint is on you.
Source
The client lives atsdk/reference/vampauth.lua in the repository and is served to in-game clients from /client/vampauth.lua. Test vectors are verified in the repo (scripts/verify-reference-client.js).
See also
- key/check — the endpoint contract.
- Signature verification — the signed payload.
- Integration snippets — building your own client.