VESvault

VESlocker

Hardware-grade PIN security — without the hardware.

A 4-digit PIN has only 10,000 combinations. Anywhere it guards data an attacker can copy — a browser, a file, a backup — they can brute-force it offline in milliseconds. VESlocker removes the offline attack entirely: the decryption key is split between the user's PIN and a secret held by a small key server, released only under a strict, exponentially-throttled budget. After a few dozen wrong guesses the entry is locked for good — a true lifetime cap on attempts, the way a TPM or a secure enclave behaves, in ~250 lines of vanilla JS and ~110 lines of PHP.

How it works

VESlocker split-key flow between the client and the key server

Quickstart

<script src="https://veslocker.com/pub/VESlocker.js"></script>
<script>
  const vl = new VESlocker({
    apiUrl: "https://veslocker.com/api/VESlocker.php"
  });

  // Encrypt a secret behind a PIN and stash it under a name:
  await vl.store("launch-codes", "1234", "the actual launch codes");

  // Read it back with the PIN - throttled, and re-deposited under a
  // fresh id + seed on every success:
  const secret = await vl.fetch("launch-codes", "1234");
</script>

The client is Apache-2.0 — embed it with no copyleft obligations. Prefer to manage storage yourself? encrypt / decrypt are stateless and return / take a self-contained token.

Try it live

This demo talks to the public veslocker.com key server. Store a value behind a PIN, then fetch it back — and watch the throttle kick in after a few wrong PINs.

Store

Encrypts the value behind the PIN and keeps the token in localStorage.

Fetch

Reads it back with the PIN, then re-deposits it under a fresh id + seed. A few wrong PINs and the server throttles, then seals the entry for good.

Security model

VESlocker is a key oracle gated by throttling, not a vault. Reason about it honestly before you deploy:

Terms of use