code wiki / _hdl_build / nx_vault_rotation_test.nx
nx_vault_rotation_test.nx source
↩ module page · 48 lines · 3425 B
1// nx_vault_rotation_test.nx -- ROTATIONGATE: proves lease-driven auto-rotation. GREEN iff: not due before
2// the interval; DUE at/after it; version bumps monotonically; the OLD version stays valid during the grace
3// overlap (zero-downtime) then EXPIRES; the NEW version is valid from its rotation time then expires. 7/7.
4import "nx_vault_rotation.nx"
5import "nx_syscalls.nx"
6
7func rg_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
8func rg_num(v: i64) -> i64 { let b: *u8 = sys_mmap(28); var m: i64=v; if m<0 {m=0-m}; let t: *u8 = sys_mmap(28); var k: i64=0; if m==0 {t[0]=48;k=1}; while m>0 {t[k]=48+(m%10); m=m/10; k=k+1}; var i: i64=0; while i<k {b[i]=t[k-1-i]; i=i+1}; sys_write(1,b,k); return 0 }
9
10func main() -> i64 {
11 rg_puts("=== SOVEREIGN LEASE-DRIVEN AUTO-ROTATION (zero-downtime grace overlap) ===\n" as *u8)
12 let issued: i64 = 1000
13 let interval: i64 = 200
14 let ttl: i64 = 250
15 let grace: i64 = 50
16
17 let due_before: i64 = rot_due(1100, issued, interval) // 1100 < 1200 -> not due
18 let due_at: i64 = rot_due(1200, issued, interval) // >= 1200 -> due
19 let v_next: i64 = rot_next_version(3) // 4
20 // rotate at now=1200: old(issued=1000,ttl=250 -> expires 1250)+grace 50 -> accepted < 1300
21 let old_ovl: i64 = rot_overlap_valid(1240, issued, ttl, grace) // 1240 < 1300 -> valid
22 let old_gone: i64 = rot_overlap_valid(1300, issued, ttl, grace) // 1300 < 1300 false -> expired
23 // new version validity from rotated_at=1200, ttl=250 -> valid < 1450
24 let new_mid: i64 = rot_new_valid(1240, 1200, ttl) // valid
25 let new_exp: i64 = rot_new_valid(1460, 1200, ttl) // expired
26
27 rg_puts(" due@1100=" as *u8); rg_num(due_before); rg_puts(" due@1200=" as *u8); rg_num(due_at)
28 rg_puts(" v3->v" as *u8); rg_num(v_next); rg_puts(" | old-overlap@1240=" as *u8); rg_num(old_ovl)
29 rg_puts(" old-gone@1300=" as *u8); rg_num(old_gone); rg_puts(" | new@1240=" as *u8); rg_num(new_mid); rg_puts(" new@1460=" as *u8); rg_num(new_exp); rg_puts("\n" as *u8)
30
31 let r: *i64 = sys_mmap(8*8) as *i64
32 r[0] = 0; if due_before == 0 { r[0] = 1 } // not due before interval
33 r[1] = 0; if due_at == 1 { r[1] = 1 } // due at/after interval
34 r[2] = 0; if v_next == 4 { if v_next > 3 { r[2] = 1 } } // monotonic version bump
35 r[3] = 0; if old_ovl == 1 { r[3] = 1 } // old version valid during grace overlap (zero-downtime)
36 r[4] = 0; if old_gone == 0 { r[4] = 1 } // old version expires after grace
37 r[5] = 0; if new_mid == 1 { r[5] = 1 } // new version valid from rotation
38 r[6] = 0; if new_exp == 0 { r[6] = 1 } // new version expires per its ttl
39
40 var pass: i64 = 0; var i: i64 = 0
41 while i < 7 { pass = pass + r[i]; i = i + 1 }
42 rg_puts("----\n passed " as *u8); rg_num(pass); rg_puts("/7\n" as *u8)
43 if pass == 7 {
44 rg_puts("ROTATIONGATE due_detection=1 monotonic_version=1 grace_overlap_zero_downtime=1 old_expires=1 new_lease_bound=1 exceed[sovereign lease-driven auto-rotation = HashiCorp rotation-class; grace overlap = no dropped in-flight users; composes nx_vault_lease] verdict=GREEN\n" as *u8)
45 sys_exit(0); return 0
46 }
47 rg_puts("ROTATIONGATE verdict=RED\n" as *u8); sys_exit(1); return 1
48}