code wiki / _hdl_build / nx_invite_token_gate.nx
nx_invite_token_gate.nx source
↩ module page · 96 lines · 5642 B
1// nx_invite_token_gate.nx -- SOVEREIGN in-process referee for the invite-token store organ.
2// Drives inv_issue / inv_check / inv_consume against a fresh /tmp store and asserts the FULL
3// lifecycle plus every reject path with real negative controls (no fabricated greens):
4// T1 issue -> check returns the issued level (valid token works)
5// T2 NEG expired: a token valid NOW returns 0 once now_s passes its expiry
6// T3 NEG single-use: check ok -> consume -> re-check returns 0
7// T4 NEG wrong-realm: a token issued for realm A returns 0 under realm B (and != 0 under A)
8// T5 NEG unknown/garbage token never issued -> 0
9// T6 independence: two distinct issues; consuming one does NOT void the other
10// GREEN iff 6/6 + sys_exit(0). license_tier: ORIGINAL
11import "nx_invite_token.nx"
12import "nx_syscalls.nx"
13
14func g_w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
15func g_trunc(path: *u8) -> i64 { let fd: i64 = sys_openat_wr(path, 0x180); if fd >= 0 { sys_close(fd) } return 0 }
16func g_num(v: i64) -> i64 {
17 let t: *u8 = sys_mmap(24); var m: i64 = v; var k: i64 = 0
18 if m == 0 { t[0] = 48 as u8; k = 1 }
19 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
20 let r: *u8 = sys_mmap(24); var i: i64 = 0
21 while i < k { r[i] = t[k - 1 - i]; i = i + 1 }
22 sys_write(1, r, k); return 0
23}
24func g_res(name: *u8, ok: i64) -> i64 { g_w(" " as *u8); g_w(name); if ok == 1 { g_w(": PASS\n" as *u8) } else { g_w(": FAIL\n" as *u8) } return ok }
25
26func main() -> i64 {
27 g_w("=== INVITE-TOKEN STORE GATE (secret single-use, expiring, realm+level scoped; sovereign in-process) ===\n" as *u8)
28 let store: *u8 = "/tmp/nx_invite_token_gate.log" as *u8
29 g_trunc(store)
30
31 // a fixed clock => deterministic expiry math (no wall-clock flakiness).
32 let now: i64 = 1700000000
33 let realmA: *u8 = "andelinwest_admin" as *u8; let realmA_n: i64 = 17
34 let realmB: *u8 = "nishi_docportal" as *u8; let realmB_n: i64 = 15
35 let hour: i64 = 3600
36 var pass: i64 = 0
37
38 // ---- T1: issue (realm A, level 2, ttl 1h) -> check returns 2 ----
39 let tokA: *u8 = sys_mmap(80)
40 let iA: i64 = inv_issue(store, realmA, realmA_n, 2, hour, now, tokA)
41 let l1: i64 = inv_check(store, tokA, NX_INV_TOKEN_HEX, realmA, realmA_n, now)
42 var t1: i64 = 0
43 if iA == NX_INV_OK { if l1 == 2 { t1 = 1 } }
44 pass = pass + g_res("T1 issue->check returns issued level (2)" as *u8, t1)
45
46 // ---- T2: NEG expired. Same token is valid at issue-time but 0 once now passes expiry. ----
47 let tokB: *u8 = sys_mmap(80)
48 let iB: i64 = inv_issue(store, realmA, realmA_n, 2, 1, now, tokB) // expiry = now + 1
49 let l2_live: i64 = inv_check(store, tokB, NX_INV_TOKEN_HEX, realmA, realmA_n, now) // before expiry
50 let l2_exp: i64 = inv_check(store, tokB, NX_INV_TOKEN_HEX, realmA, realmA_n, now + 100) // after expiry
51 var t2: i64 = 0
52 if iB == NX_INV_OK { if l2_live == 2 { if l2_exp == 0 { t2 = 1 } } }
53 pass = pass + g_res("T2 NEG expired token -> 0 (valid pre-expiry, 0 post-expiry)" as *u8, t2)
54
55 // ---- T3: NEG single-use. check ok -> consume -> re-check 0. ----
56 let tokC: *u8 = sys_mmap(80)
57 inv_issue(store, realmA, realmA_n, 3, hour, now, tokC)
58 let l3a: i64 = inv_check(store, tokC, NX_INV_TOKEN_HEX, realmA, realmA_n, now) // 3
59 let cC: i64 = inv_consume(store, tokC, NX_INV_TOKEN_HEX, now)
60 let l3b: i64 = inv_check(store, tokC, NX_INV_TOKEN_HEX, realmA, realmA_n, now) // 0
61 var t3: i64 = 0
62 if l3a == 3 { if cC == NX_INV_OK { if l3b == 0 { t3 = 1 } } }
63 pass = pass + g_res("T3 NEG single-use: consume voids the token" as *u8, t3)
64
65 // ---- T4: NEG wrong-realm. issued for A -> 0 under B, but 2 under A (token itself valid). ----
66 let tokD: *u8 = sys_mmap(80)
67 inv_issue(store, realmA, realmA_n, 2, hour, now, tokD)
68 let l4_wrong: i64 = inv_check(store, tokD, NX_INV_TOKEN_HEX, realmB, realmB_n, now) // 0
69 let l4_right: i64 = inv_check(store, tokD, NX_INV_TOKEN_HEX, realmA, realmA_n, now) // 2
70 var t4: i64 = 0
71 if l4_wrong == 0 { if l4_right == 2 { t4 = 1 } }
72 pass = pass + g_res("T4 NEG wrong-realm -> 0 (right realm -> 2)" as *u8, t4)
73
74 // ---- T5: NEG unknown/garbage token never issued -> 0. ----
75 let garbage: *u8 = "00000000000000000000000000000000000000000000000000000000deadbeef" as *u8 // 64 hex, never minted
76 let l5: i64 = inv_check(store, garbage, NX_INV_TOKEN_HEX, realmA, realmA_n, now)
77 var t5: i64 = 0
78 if l5 == 0 { t5 = 1 }
79 pass = pass + g_res("T5 NEG unknown/garbage token -> 0" as *u8, t5)
80
81 // ---- T6: independence. Two issues; consuming E must not void F. ----
82 let tokE: *u8 = sys_mmap(80)
83 let tokF: *u8 = sys_mmap(80)
84 inv_issue(store, realmA, realmA_n, 1, hour, now, tokE)
85 inv_issue(store, realmA, realmA_n, 2, hour, now, tokF)
86 inv_consume(store, tokE, NX_INV_TOKEN_HEX, now)
87 let l6e: i64 = inv_check(store, tokE, NX_INV_TOKEN_HEX, realmA, realmA_n, now) // 0 (consumed)
88 let l6f: i64 = inv_check(store, tokF, NX_INV_TOKEN_HEX, realmA, realmA_n, now) // 2 (independent)
89 var t6: i64 = 0
90 if l6e == 0 { if l6f == 2 { t6 = 1 } }
91 pass = pass + g_res("T6 two issues independent (consume E, F survives)" as *u8, t6)
92
93 g_w("----\nINVITE-TOKEN rows=6 pass=" as *u8); g_num(pass); g_w("/6\n" as *u8)
94 if pass == 6 { g_w("INVITE-TOKEN GREEN (mint/check/consume + expiry + single-use + realm-scope + independence, measured)\n" as *u8); sys_exit(0); return 0 }
95 g_w("INVITE-TOKEN RED\n" as *u8); sys_exit(1); return 1
96}