code wiki / _hdl_build / nx_vault_lease.nx
nx_vault_lease.nx source
↩ module page · 40 lines · 1648 B
1// nx_vault_lease.nx -- sovereign LEASE / TTL / auto-expiry (HashiCorp Vault "leasing" gap from
2// vault_capability_census.tsv). Every issued secret carries a lease: issued_at + ttl, capped by a hard
3// max_ttl, renewable, revocable. Time-bound access with auto-expiry is what BOUNDS the blast radius when a
4// secret leaks -- a stolen lease dies on its own. Pure deterministic logic: "now" is INJECTED, never
5// wall-clock (correct for a gate AND for replay). license_tier: ORIGINAL
6import "nx_syscalls.nx"
7
8const LEASE_OK: i64 = 1
9const LEASE_EXPIRED: i64 = 0
10const LEASE_REVOKED: i64 = 0 - 1
11
12// is the lease valid at `now`? a revoke overrides time.
13func lease_valid(now: i64, issued_at: i64, ttl: i64, revoked: i64) -> i64 {
14 if revoked == 1 { return 0 }
15 if now < issued_at + ttl { return 1 }
16 return 0
17}
18
19// seconds remaining (0 if expired or revoked).
20func lease_remaining(now: i64, issued_at: i64, ttl: i64, revoked: i64) -> i64 {
21 if revoked == 1 { return 0 }
22 let exp: i64 = issued_at + ttl
23 if now >= exp { return 0 }
24 return exp - now
25}
26
27// renew: extend the expiry to now+ttl, but NEVER past issued_at+max_ttl (the hard cap). returns new expiry.
28func lease_renew_expiry(now: i64, issued_at: i64, ttl: i64, max_ttl: i64) -> i64 {
29 var want: i64 = now + ttl
30 let cap: i64 = issued_at + max_ttl
31 if want > cap { want = cap }
32 return want
33}
34
35// classify the lease (OK / EXPIRED / REVOKED) for reporting.
36func lease_state(now: i64, issued_at: i64, ttl: i64, revoked: i64) -> i64 {
37 if revoked == 1 { return LEASE_REVOKED }
38 if now < issued_at + ttl { return LEASE_OK }
39 return LEASE_EXPIRED
40}