RSA-4096 · ECC · Production Ready

License
Infrastructure
for Builders

Generate cryptographically signed license files in seconds. Bind to hardware. Enforce features. Ship with confidence.

4M+ Licenses issued
RSA/ECC Dual signing
4 SDKs C · C++ · Python · JS
license_output.json
{ "license_id": "LF-8F3A-9C2E-4D71", "product": "MyFirmware v2.4", "issued_to": "Acme Corp", "expires": "2026-12-31T00:00:00Z", "hardware_bind": { "mac": "A4:C3:F0:85:AC:3E", "mcu_uid": "0x3F2A1C8D" }, "features": ["advanced", "export"], "signature": "3046022100e8f...", "algorithm": "RSA-4096-SHA256" }

Everything your
license stack needs

Stop rolling your own crypto. LicenseForge handles signing, binding, revocation, and validation — so you ship features, not boilerplate.

🔐
RSA-4096 & ECC Signing

Industry-standard asymmetric signing. Your public key ships with the product; private keys never leave our HSM-backed vault.

FIPS 140-2 compliant
Time-Based Licensing

Expiry dates, trial windows, subscription periods. Tamper-resistant timestamps with optional NTP verification hooks.

Trial · Annual · Perpetual
🧩
Feature Flags

Encode arbitrary feature sets into every license. Gate premium modules, seat counts, or API tiers at the cryptographic layer.

Unlimited flags
🔗
Hardware Binding

Bind to MAC, MCU UID, TPM, serial number, or any combination. Multi-factor binding for the most sensitive deployments.

4 binding types
♻️
Revocation & Refresh

Instant remote revocation via CRL or OCSP-style endpoint. Reissue licenses without touching customer hardware.

Real-time CRL
📦
Multi-Format Output

JSON, binary blob, Base64 PEM, or custom binary struct. Output exactly what your target platform expects.

JSON · Binary · PEM

Build a license
right now

Configure and issue a real signed license in under 30 seconds. No account required for the first 5 licenses.

Loading...
── Verify Existing License
JSON Binary PEM
// Configure your license on the left, // then click Generate to see the // signed output appear here. // // Format: JSON · Binary · PEM // Signing: RSA-4096 / ECC-P256

Lock it to the machine

Combine multiple binding vectors for layered protection against license cloning and redistribution.

🌐
MAC Address

Network interface binding. Works on Linux, Windows, macOS, and embedded RTOS environments.

eth0_mac = get_mac()
⚙️
MCU Unique ID

96-bit factory-programmed UID from STM32, NXP, and Microchip MCUs. Immutable at silicon level.

HAL_GetUID(uid_buf)
🛡
TPM 2.0

Bind to the Trusted Platform Module EK certificate. Tamper-evident and hardware-rooted identity.

tpm2_readpublic -c 0x81
🔢
Serial Number

CPU serial, motherboard UUID, or custom device serial. Flexible string binding with hash normalization.

dmidecode -s system-uuid

Drop-in verification
for every stack

Copy, paste, ship. Our SDK handles parsing, signature verification, hardware binding checks, and expiry — in 10 lines.

C C++ Python JavaScript
verify_license.c C · libcrypto
// LicenseForge C SDK - Hardware-bound verification #include "licenseforge.h" int main() { // Load your license file lf_license_t *lic = lf_load_file("license.lf"); // Verify signature with embedded public key lf_result_t res = lf_verify(lic, LF_PUBKEY_PEM); if (res != LF_OK) return handle_invalid(res); // Check hardware binding (MCU UID) uint8_t uid[12]; HAL_GetUID((uint32_t *)uid); if (!lf_check_binding(lic, LF_BIND_MCU_UID, uid, 12)) return LF_ERR_HW_MISMATCH; // Check feature flag before enabling premium module if (lf_has_feature(lic, "advanced")) enable_advanced_module(); lf_free(lic); return 0; }
license_check.cpp C++17 · OpenSSL
// LicenseForge C++ SDK - RAII wrapper #include "licenseforge.hpp" void check_license() { try { LicenseForge::License lic("license.lf"); // Chain of trust: sig → expiry → hardware → features lic.verify(LF_PUBKEY) .check_expiry() .bind_mac(get_mac_address()) .bind_serial(get_serial_number()); // Feature gating with type-safe accessor auto seats = lic.feature_int("max_seats", 1); auto tier = lic.feature_str("tier", "basic"); initialize_app(seats, tier); } catch (const LF::ExpiredError&e) { prompt_renewal(e.expiry_date()); } catch (const LF::BindingError&e) { log_tamper_attempt(e.binding_type()); } }
license_verify.py Python 3.8+ · cryptography
# LicenseForge Python SDK from licenseforge import License, BindingType, LicenseError def verify_and_activate(): try: # Load & verify in one call lic = License.from_file("license.lf", pubkey=open("pub.pem").read()) # Hardware binding check lic.assert_binding(BindingType.MAC, get_mac()) lic.assert_binding(BindingType.SERIAL, get_serial()) # Feature-gated code paths features = lic.features # returns frozenset if "export" in features: unlock_export_module() # Metadata access print(f"Licensed to: {lic.issued_to}, expires: {lic.expires:%Y-%m-%d}") except LicenseError as e: sys.exit(f"License invalid: {e}")
licenseCheck.js Node.js · Web Crypto API
// LicenseForge JS SDK (Node.js / Electron) import { LicenseForge } from '@licenseforge/sdk' async function checkLicense() { const forge = new LicenseForge({ pubkeyPath: './public.pem' }) const result = await forge.verify({ licensePath: './license.lf', bindings: { mac: await getMacAddress(), serial: await getSystemSerial() } }) // result.ok, result.features, result.expiresAt if (!result.ok) { return showLicenseDialog(result.error) } // Feature flags are plain JS Set app.setFeatures([...result.features]) console.log(`Expires: ${result.expiresAt.toLocaleDateString()}`) }

Scale as you ship

Pay per license issued. No seat fees. No per-device charges. Your private key, your control.

Indie
$19/mo
Up to 500 licenses / month
  • RSA-4096 signing
  • MAC + Serial binding
  • Time-based expiry
  • JSON output format
  • REST API access
  • C & Python SDK
  • ECC signing
  • TPM / MCU UID binding
  • Binary blob output
Start Free Trial
Enterprise
Custom
Unlimited volume · SLA
  • Everything in Studio
  • Bring your own HSM keys
  • Air-gapped issuance mode
  • Custom binary formats
  • Dedicated support
  • SOC 2 Type II reports
  • On-premise deployment
  • Custom SDK integration
  • 99.99% uptime SLA
Contact Sales ->