nx_sign_ceremony_gate.nx source
↩ module page · 66 lines · 2746 B
1// nx_sign_ceremony_gate.nx -- INDEPENDENT gate for the Sign ceremony (imports the SAME
2// shipped nx_sign_ceremony_lib = atlas validation edge). Tests: consent-gate BOTH ways,
3// audit-head advance, determinism, signer-tamper, cert determinism + uniqueness.
4// SELF-PUBLISHES knowledge/status/office_ceremony_gate.log (needle "VERDICT=").
5// license_tier: ORIGINAL
6
7import "nx_sign_ceremony_lib.nx"
8
9func scg_eq69(a: *u8, b: *u8) -> i64 {
10 var i: i64 = 0
11 while i < 69 { if a[i] != b[i] { return 0 } i = i + 1 }
12 return 1
13}
14
15func main() -> i64 {
16 var pass: i64 = 0
17 let g: *u8 = sys_mmap(40)
18 se_genesis(g)
19 let h: *u8 = sys_mmap(40)
20 // T1 no-consent -> REFUSED
21 if sc_sign("E" as *u8, 0, "X" as *u8, 1, "no" as *u8, g, h) == 0 { pass = pass + 1 }
22 // T2 consent -> SIGNED
23 if sc_sign("E" as *u8, 0, "X" as *u8, 1, "yes" as *u8, g, h) == 1 { pass = pass + 1 }
24 // T3 audit head advanced
25 if se_eq32(g, h) == 0 { pass = pass + 1 }
26 // T4 determinism: same sign -> same head
27 let hd: *u8 = sys_mmap(40)
28 sc_sign("E" as *u8, 0, "X" as *u8, 1, "yes" as *u8, g, hd)
29 if se_eq32(h, hd) == 1 { pass = pass + 1 }
30 // T5 signer-tamper: different signer -> different head
31 let hy: *u8 = sys_mmap(40)
32 sc_sign("E" as *u8, 0, "Y" as *u8, 1, "yes" as *u8, g, hy)
33 if se_eq32(h, hy) == 0 { pass = pass + 1 }
34 // T6 cert deterministic
35 let hh: *u8 = sys_mmap(80)
36 se_hex(h, hh)
37 let c1: *u8 = sys_mmap(2048)
38 let l1: i64 = sc_cert("E" as *u8, "doc" as *u8, "2" as *u8, hh, c1)
39 let cid1: *u8 = sys_mmap(80)
40 cid_of(c1, l1, cid1)
41 let c2: *u8 = sys_mmap(2048)
42 let l2: i64 = sc_cert("E" as *u8, "doc" as *u8, "2" as *u8, hh, c2)
43 let cid2: *u8 = sys_mmap(80)
44 cid_of(c2, l2, cid2)
45 if scg_eq69(cid1, cid2) == 1 { pass = pass + 1 }
46 // T7 cert uniqueness: different signer count -> different cid
47 let c3: *u8 = sys_mmap(2048)
48 let l3: i64 = sc_cert("E" as *u8, "doc" as *u8, "3" as *u8, hh, c3)
49 let cid3: *u8 = sys_mmap(80)
50 cid_of(c3, l3, cid3)
51 if scg_eq69(cid1, cid3) == 0 { pass = pass + 1 }
52
53 let out: *u8 = sys_mmap(512)
54 var o: i64 = 0
55 o = se_catcopy(out, o, "OFFICE-CEREMONY-GATE tests=7 pass=" as *u8)
56 o = se_catn(out, o, pass)
57 o = se_catcopy(out, o, " consent-gate-both+head-advance+determinism+signer-tamper+cert-det+cert-uniq VERDICT=" as *u8)
58 if pass == 7 { o = se_catcopy(out, o, "GREEN" as *u8) }
59 if pass != 7 { o = se_catcopy(out, o, "RED" as *u8) }
60 out[o] = 10 as u8
61 o = o + 1
62 ss_writefile("knowledge/status/office_ceremony_gate.log" as *u8, out, o)
63 sys_write(1, out, o)
64 if pass == 7 { return __syscall(93, 0, 0, 0, 0, 0, 0) }
65 return __syscall(93, 60 + pass, 0, 0, 0, 0, 0)
66}