Skip to content

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 09 Jul 03:59
· 27 commits to main since this release

[0.3.2] - 2026-07-09

Added

  • 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.