You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Privacy-safe machine identity on keyless beacons. The keyless/free-tier
heartbeat now sends a one-way machine_hash derived from a stable hardware
identifier (IOPlatformUUID on macOS, /etc/machine-id on Linux, MachineGuid on Windows), namespaced to your tenant and product. It lets the
dashboard count one device per physical machine instead of per install — a
reinstall updates the same free-tier row rather than creating a duplicate —
while the raw hardware ID never leaves the device (only the SHA-256 hash is
sent). Omitted automatically when no stable hardware ID is available, so
headless/unsupported platforms fall back to the existing per-install id.
Byte-for-byte identical to the Swift and JS SDKs for the same inputs. Inject a
custom identity for tests with Keylight::with_device(...).
Fixed
Revocation now enforced; offline use bounded to 15 days. Launch always performs
a server validate (no staleness gating), so a dashboard revoke or expiry lands on
the next launch instead of lagging the refresh cadence. A definitive server rejection
with no lease clears the stale cached lease instead of leaving a "still-active" lease
in place.
Offline cap is fail-closed on a missing online anchor.state() skipped the max_offline_days check when no last_validated_online timestamp was stored, so a
signature-valid cached lease still resolved to Licensed — letting anyone who deletes
the anchor reset the offline clock indefinitely. A missing or stale anchor now drops
the lease (parity with cached_lease() and the Swift SDK's isWithinOfflineGrace). max_offline_days = None still disables the cap; trials and free-tier are unaffected.