Software License Key Generator & Verifier (Signed Offline Keys)
Ed25519-signed licence keys your app checks offline, with code for eight languages.
Try before you buy.
- Free preview: demo licence keys signed with a key pair made on this page, and the first lines (up to 20) of each verification snippet without the public key.
- Locked until you unlock it: download and copy.
- Unlock: Pro pass, ₹179 for 30 days or ₹79 for 1 week, a one-time payment that never renews. Batch runs unlock with a pass only. Unlock: Pro pass, $5.99 for 30 days or $2.99 for 1 week, a one-time payment that never renews. Batch runs unlock with a pass only.
Ways to unlock shows how to get the full result.
Printing this result is locked in the free preview.
For software you own: keys are signed with your own key pair, and your app checks them with its public key. This page cannot find, guess or crack the keys of other software.
1 · Your signing key pair
Keep the private key
At least 8 characters; a long passphrase is best. The file is encrypted PKCS#8 (PBKDF2-HMAC-SHA256, 600,000 rounds, AES-256), which OpenSSL and every crypto library can open. Nobody can recover a lost password.
Use a key pair you saved before
Opens “ENCRYPTED PRIVATE KEY” and “PRIVATE KEY” Ed25519 files, including those OpenSSL writes. The key stays in this tab.
Signing with your own saved key pairs comes with a Pro pass. The free preview signs demo keys with a key pair made on this page.
2 · A licence key
The key
A demo key: the key pair of the free preview cannot be saved, so keep this key for trying the checker and the code on this page.
3 · Check a key
4 · Code for your app
5 · Keys for a buyers’ list
Every key is for the product id above; columns you match below fill each key’s fields.
Columns
For rows without a value
6 · Revocation list
The code above has the same serials in its REVOKED list. Ship the file with your next update, or let your app download it; a key that is already in someone’s hands keeps working in builds that do not have the list.
Locked in the free preview. Opens the ways to unlock this result.
Locked in the free preview. Batch runs unlock with a pass.
Locked in the free preview. Query results unlock with a pass.
About the Software License Key Generator & Verifier (Signed Offline Keys)
Sell or hand out licences for software you own without a licence server: make an Ed25519 key pair in this browser, sign each customer’s licence (product, plan, licensee, e-mail, seats, an optional expiry date and an optional machine id) into a key, and let your app check the key offline with the public key. The private key makes keys and stays with you; the public key, built into your app, can only check them — so nobody can make new keys from your app.
Keys come as easy-to-type groups (7Q2K9-…, Crockford Base32: no I, L, O or U, case and hyphens ignored) or as a shorter LK1. token. The page writes the checking code for JavaScript, TypeScript, Python, Go, Java, C#, Rust and Swift with your public key built in, checks pasted keys and shows what they say, turns a CSV of buyers (a store’s sales export, for example) into one key per row, and writes a revocation list. Your private key can be saved as a password-protected file that OpenSSL and every crypto library can open.
Everything runs on your device; nothing is uploaded. Without a pass the result is a free preview: demo keys signed with a key pair made on this page that cannot be saved, and the first lines of each snippet; your own saved key pairs, the full code, the key files, the buyers’ file and the revocation list unlock with a Pro pass.
How to use it
- Make a new key pair (or, with a pass, open the one you saved before). Its key id identifies it.
- With a pass, save the private key as a password-protected .pem file and keep it somewhere safe: anyone with it can make keys for your product.
- Enter your product id and the customer’s details, choose the key style, and make the licence key.
- Check any key under Check a key: paste it and see whether the signature matches and what it says.
- Choose your app’s language under Code for your app; with a pass, copy or download the code (or all eight languages as a ZIP) and call its check function when the user enters a key.
- For many customers, choose a CSV of buyers, match its columns, and make keys for every row; with a pass, download the CSV with a key for each buyer.
- To revoke keys, list their serials under Revocation list and ship the list with your next update; the code checks the same serials.
Examples
acme-editor · plan pro · Ada Lovelace · ada@example.com · 3 seats · expires 2027-12-31
A key of 41 groups of five (242 characters with the hyphens), or an LK1. token of 172 characters
The key says all of this, signed: change one character and the check fails.
acme-editor · machine id HOST-7F3A (the id your app computes)
Valid on HOST-7F3A; “bound to another machine” anywhere else
checkLicence(key) in the JavaScript code
{ valid: false, reason: "expired", licence: { product: "acme-editor", expires: "2027-12-31", … } }Common uses
- Licensing a desktop app, plug-in, game or command-line tool without running a server.
- Selling through a store that sends you a CSV of orders, then e-mailing each buyer a key.
- Trial and subscription keys that end on a date, checked without an internet connection.
- Keys bound to one machine for software that must not be copied to another.
- Revoking leaked or refunded keys in the next release.
The key format
A key is a short payload followed by its 64-byte Ed25519 signature (RFC 8032). The payload, numbers big-endian: the format version (1), flags (bit 0: the key expires; bit 1: it is bound to a machine), the issue date and the expiry date as days since 1970-01-01 (two bytes each, so dates run to 2149-06-06), the number of seats (0 = unlimited), an 8-byte random serial, then the product id, plan, licensee, e-mail and machine id, each a length byte and UTF-8 text. The signature covers the whole payload, so no field can be changed.
The grouped form is Crockford Base32 of those bytes in groups of five; it ignores case and hyphens and reads O as 0 and I or L as 1, so a key read over the phone still works. The token form is LK1. followed by base64url (RFC 4648) of the same bytes. Every snippet reads both.
What the code checks
- The signature, with the Ed25519 public key built into the code.
- The product id: a genuine key for another of your products is refused.
- The revocation list: serials you listed are refused.
- The expiry date: the key works through the whole expiry day (UTC).
- The machine id: a key bound to a machine works only where your app reports the same id.
Each function returns the reason when a key is refused — not-a-key, bad-signature, other-product, revoked, expired or other-machine — and the licence fields of every genuine key, so your app can show the licensee or turn on the plan’s features. Seats are written into the key; counting them is up to your app.
Keeping it secure
- The private key is made by your browser’s Web Crypto and never leaves this tab unless you save it. The saved file is PKCS#8 encrypted with PBES2 (RFC 8018): PBKDF2-HMAC-SHA256 with 600,000 rounds, as OWASP recommends for PBKDF2, and AES-256-CBC. OpenSSL opens it with
openssl pkey -in key.pem. - Offline keys can be shared like any other licence key, and code inside an app can be patched to skip the check. Signed keys stop people from making keys; they cannot stop a cracked copy of the app. Many developers accept that and keep checks light.
- Keep the private key off build servers and out of your app and its repository. If it leaks, make a new key pair and ship code with the new public key.
Sources
- RFC 8032 — Ed25519 signatures
- Crockford’s Base32 — the grouped key alphabet
- RFC 4648 — base64url
- RFC 8018 and RFC 5958 — the encrypted private key file
- OWASP Password Storage Cheat Sheet — PBKDF2 rounds
- SubtleCrypto.sign() — Ed25519 in browsers
Limitations
- Ed25519 in Web Crypto needs a current browser: Chrome or Edge 137 or later, Firefox 129 or later, Safari 17 or later. Older browsers cannot make or check keys here.
- Keys are long: the 64-byte signature alone takes 103 characters in groups (86 in a token), and the fields add to that. Shorter keys would need a weaker signature.
- Text fields are limited to 64–254 bytes each (255 at most in the format); dates run to 2149-06-06.
- The page does not compute machine ids: use whatever stable id your app computes, and enter the same text here.
- A buyers’ file holds at most 10,000 rows at a time, and the table on the page shows the first 200.
- The C# code needs the BouncyCastle.Cryptography package, the Python code the cryptography package and the Rust code the ed25519-dalek crate; the others use their standard libraries.
Privacy
On this device: nothing is sent
Everything happens in your browser. What you enter or open here is not uploaded or stored by MySmartCoPilot.
Frequently asked questions
What do I get without a pass?
Without a pass, Software License Key Generator & Verifier (Signed Offline Keys) shows demo licence keys signed with a key pair made on this page, and the first lines (up to 20) of each verification snippet without the public key. Until you unlock it, the result can’t be downloaded or copied. A Pro, Premium or Ultimate pass, a one-time payment that never renews, unlocks the full result. The pricing page lists the passes and their prices.
Can this make keys for software I did not write?
No. A key is valid only for the public key built into an app, and only its owner has the matching private key. This page makes keys for your own key pair and checks keys against a public key; it cannot find, guess or crack keys for other software.
Do my app’s users need an internet connection?
No. The code checks the signature with the public key inside your app, so keys work offline. Revoked serials reach users with your next update (or a list your app downloads, if you add that).
What happens if I lose the private key?
Keys already issued keep working, but you cannot make new ones for the same public key. Make a new key pair and release your app with its public key. That is why the page offers a password-protected file of the private key: keep it, and its password, in two safe places.
What does the free preview give?
Demo keys signed with a key pair made on this page, which cannot be saved, the key checker, and the first lines of the code in each language without the public key. Your own saved key pairs, the full code with your public key, the key files, the keys for a buyers’ CSV, the revocation list and the copies and downloads come with a Pro pass.
Which key style should I choose?
Groups of five are easier to read and type, and survive confusions like O and 0. The token is about a third shorter and suits copy and paste, links and e-mails. Your app’s code reads both, so you can mix them.
Was the code tested?
Each language’s code was compiled and run against keys made by this page — valid keys in both styles, expired, revoked, other-product, other-machine and altered keys — and gave the same answer as the page’s own checker.