code wiki / (root) / nx_sign_ceremony.nx

nx_sign_ceremony.nx source

↩ module page · 50 lines · 2295 B

1// nx_sign_ceremony.nx -- Nishi Sign ceremony (F504) CLI/MCP organ: self-verifying demo 2// over nx_sign_ceremony_lib. Proves live: consent-gated signing (UETA), multi-signer 3// chain, refused-without-consent, sealed completion certificate. license_tier: ORIGINAL 4 5import "nx_sign_ceremony_lib.nx" 6const K_MAGIC_3000: i64 = 3000 7const K_MAGIC_3100: i64 = 3100 8const K_MAGIC_3200: i64 = 3200 9const K_MAGIC_2048: i64 = 2048 10 11func main() -> i64 { 12 let g: *u8 = sys_mmap(40) 13 se_genesis(g) 14 let doc: *u8 = "nxc1-doc00000000" as *u8 15 let h1: *u8 = sys_mmap(40) 16 let h2: *u8 = sys_mmap(40) 17 // Alice consents + signs 18 if sc_sign("ENV-A" as *u8, 0, "Alice Adams" as *u8, K_MAGIC_3000, "yes" as *u8, g, h1) != 1 { return __syscall(93, 51, 0, 0, 0, 0, 0) } 19 // Bob consents + signs (chains from Alice's head) 20 if sc_sign("ENV-A" as *u8, 1, "Bob Baker" as *u8, K_MAGIC_3100, "yes" as *u8, h1, h2) != 1 { return __syscall(93, 52, 0, 0, 0, 0, 0) } 21 // Mallory does NOT consent -> sign MUST be refused (UETA intent/consent) 22 let hx: *u8 = sys_mmap(40) 23 if sc_sign("ENV-A" as *u8, 2, "Mallory" as *u8, K_MAGIC_3200, "no" as *u8, h2, hx) != 0 { return __syscall(93, 53, 0, 0, 0, 0, 0) } 24 // head must have advanced twice (each signature changes the audit head) 25 if se_eq32(g, h2) == 1 { return __syscall(93, 54, 0, 0, 0, 0, 0) } 26 // completion certificate over 2 signed 27 let headhex: *u8 = sys_mmap(80) 28 se_hex(h2, headhex) 29 let cnt: *u8 = sys_mmap(16) 30 var co: i64 = se_catn(cnt, 0, 2) 31 cnt[co] = 0 as u8 32 let cert: *u8 = sys_mmap(K_MAGIC_2048) 33 let cl: i64 = sc_cert("ENV-A" as *u8, doc, cnt, headhex, cert) 34 let cid: *u8 = sys_mmap(80) 35 cid_of(cert, cl, cid) 36 sc_cert_put("/tmp/nx_ceremony_demo-" as *u8, "ENV-A" as *u8, cert, cl) 37 38 let out: *u8 = sys_mmap(512) 39 var o: i64 = 0 40 o = se_catcopy(out, o, "NISHI-SIGN-CEREMONY OK env=ENV-A matter=M1 signers=2/2 consent=UETA-OK no-consent-sign=REFUSED audit_head=" as *u8) 41 var z: i64 = 0 42 while z < 64 { out[o] = headhex[z]; o = o + 1; z = z + 1 } 43 o = se_catcopy(out, o, " cert_cid=" as *u8) 44 z = 0 45 while z < 69 { out[o] = cid[z]; o = o + 1; z = z + 1 } 46 out[o] = 10 as u8 47 o = o + 1 48 sys_write(1, out, o) 49 return __syscall(93, 0, 0, 0, 0, 0, 0) 50}