Skip to main content

Reference Client

Vampauth ships a single-file Luau reference client. It posts to key/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_echo matches the nonce this call sent,
  • the response carries signature and project_id,
  • the Ed25519 signature verifies over sha256(nonce|hwid|expiresAtUnix|project_id),
  • and the key is not locally expired.
Any failure returns 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:
  1. Embed the client inside your script (paste the module body, not a remote loadstring).
  2. Embed your keycheck logic, project key, and public signing key in the same file.
  3. Obfuscate the whole thing with script protection.
Never serve the module standalone from a readable URL — a shared module fetched over HTTP is the one place it is easy to patch out. Once it is obfuscated together with your script, removing the check means defeating the obfuscation.

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 valid response no longer verifies on the next call.
  • Edited responses — changing expires_at or key invalidates the signature.
What it does not stop:
  • 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 at sdk/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