This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
cmake -B build -G "Visual Studio 17 2022" -A x64 # Windows (MSVC)
cmake -B build # Linux / macOS
cmake --build build --config Release
No external dependencies — built-in SHA-256, RC4, Base64, CRC32, and a minimal JSON parser.
| Command | Description |
|---|---|
regInfo machinecode (or mc) |
Print a 256-bit machine ID as 64 hex chars (SHA-256 of CPU + system disk) |
regInfo generate -f <jsonfile> [outfile] (or gen) |
Create an encrypted license file from a JSON file |
regInfo generate <jsonstr> [outfile] |
Create a license from an inline JSON string |
regInfo read <licensefile> (or rd) |
Decrypt and display all license fields as pretty-printed JSON |
regInfo -f <licensefile> -<field> |
Read and output a single field. Repeat for multiple fields. |
regInfo -f <licensefile> -verify |
Validate license, outputting an error code (see below) |
Field flags: -name, -machinecode, -phone, -unit, -authdatetime, -over, -update
Verify error codes: 0 = valid, 10001 = file invalid, 10002 = expired, 10004 = machine code mismatch
Important: generateLicenseFile() in src/license.cpp currently returns false immediately — generation is stubbed out. Reading/verification work normally.
Files (*.xlts) use: base64(MAGIC[4] + CRC32[4] + RC4_encrypted(JSON))
RLIC (4 bytes)name, machinecode, phone, unit, authdatetime, overdatetime, updatedatetimemachinecode against getMachineCode() — intentionally not cryptographically securesrc/
main.cpp — CLI dispatch (machinecode / generate / read)
machine_code.cpp — Platform-specific CPU + disk identification
license.cpp — License file encryption/decryption + validation
crypto.cpp — RC4 stream cipher, Base64, CRC32
json_utils.cpp — Minimal JSON parser (flat objects, string values only)
include/
machine_code.h — getMachineCode() → std::string
license.h — LicenseInfo struct, generateLicenseFile(), readLicenseFile()
crypto.h — rc4Crypt(), base64Encode/Decode(), crc32()
json_utils.h — JsonObject with parse/dump for string-only key/value pairs
Platform-specific #ifdef sections in machine_code.cpp cover Windows (CPUID, GetVolumeInformation, IOCTL_STORAGE_GET_DEVICE_NUMBER), Linux (/proc/cpuinfo, statfs, sched_setaffinity for deterministic CPUID), and macOS (sysctl, statfs).
gui/license_gui.py
A tkinter-based GUI for generating license files. Fields: name, phone, unit, machinecode (auto-filled), authdatetime (auto today), overdatetime/updatedatetime (date pickers). Filename pattern: license_<name>_<machinecode[0:8]>.xlts. Requires Python 3 with tkinter (built-in on most systems).