Libraries

Own lib, no secrets in the binary

Keyguard init takes public identifiers only: app name + Owner ID. After init, every call is HMAC-signed with a server-issued session key. Never put a seller key, website API key, or anything that can mint licenses into the binary — those strings dump.

This library is for authentication. It is not a packer. Assume it will be dumped. Keep licenses, files, and seller keys on the server. Verify SHA-256 after every file download.

C++

Drop keyguard.hpp. C++17, nlohmann/json, Windows (WinHTTP + BCrypt).

#include "keyguard.hpp"
keyguard::Client kg("https://api.keyguard.live");
kg.init("YourApp", "OWNERID");
auto hwid = keyguard::Client::generate_hwid();
auto login = kg.license_validate("PRODUCT-XXXX", hwid);
if (!login) { /* refused */ }
auto file = kg.file("FILEID", "SHA256_FROM_PANEL");

C#

KeyguardClient.cs or project sdk/csharp/Keyguard.Client.csproj.

var kg = new Keyguard.Client.KeyguardClient("https://api.keyguard.live");
await kg.InitAsync("YourApp", "OWNERID");
await kg.LicenseAsync(key, hwid);
var file = await kg.FileAsync("FILEID", expectedSha256: "SHA256");
await kg.LogoutAsync();

Python / Node

keyguard.py · keyguard.js — same methods: init, login, license, register, logout, change_password, renew, file, updates.

Do not put in the product

  • Seller key sk_live_…
  • Anything called website API key / app key that can mint licenses
  • JWT dashboard tokens