nx_tools_api_recovery_gate_t316.nx source
↩ module page · 35 lines · 1956 B
1import "nx_tools_api_recovery_candidate_t316.nx"
2func rc_has(b:*u8,n:i64,s:*u8)->i64{if ta_indexof(b,n,s)>=0{return 1};return 0}
3func rc_one(code:i64,presented:i64,cause:*u8)->i64{
4 let out:*u8=sys_mmap(8192)
5 let start:i64=ta_cat(out,0,"{\"jsonrpc\":\"2.0\",\"id\":1")
6 let n:i64=ta_cap_deny(out,start,"nx_txtscan",10,code,presented)
7 sys_write(1,out,n);sys_write(1,"\n",1)
8 if rc_has(out,n,cause)!=1{return 1}
9 if rc_has(out,n,"\"dispatched\":false")!=1{return 1}
10 if rc_has(out,n,"blocked-until-auth-corrected")!=1{return 1}
11 if presented==1{if rc_has(out,n,"first-presenter-failure")!=1{return 1}}
12 return 0
13}
14func main()->i64{
15 var fails:i64=0
16 fails=fails+rc_one(0-9,0,"capability-absent")
17 fails=fails+rc_one(CAPT_DENY_MAC,1,"signature-or-format-invalid")
18 fails=fails+rc_one(CAPT_DENY_EXP,1,"capability-expired")
19 fails=fails+rc_one(CAPT_DENY_TOOL,1,"tool-not-granted")
20 fails=fails+rc_one(CAPT_DENY_REVOKED,1,"capability-revoked")
21 fails=fails+rc_one(0-12,1,"verification-failed")
22 let sl:*i64=sys_mmap(16) as *i64;let secret:*u8=ta_load_cap_secret(sl)
23 let cap:*u8=sys_mmap(512);let cn:i64=capt_issue(secret,sl[0],"other_tool",10,sys_now_realtime_sec()+60,sys_now_realtime_sec(),cap,512)
24 if cn<=0{return 2}
25 let req:*u8=sys_mmap(2048);var rn:i64=ta_cat(req,0,"POST /mcp HTTP/1.1\r\nX-Nishi-Cap: ");rn=ta_catb(req,rn,cap,cn);rn=ta_cat(req,rn,"\r\n\r\n")
26 let body:*u8="{\"name\":\"nx_txtscan\",\"_cap\":\"invalid-first-presenter\"}"
27 let out:*u8=sys_mmap(1048576);let start:i64=ta_cat(out,0,"{\"jsonrpc\":\"2.0\",\"id\":7")
28 let n:i64=ta_mcp_call(TA_TOOLPFX,req,rn,body,ta_slen(body),out,start)
29 sys_write(1,out,n);sys_write(1,"\n",1)
30 if rc_has(out,n,"signature-or-format-invalid")!=1{fails=fails+1}
31 if rc_has(out,n,"first-presenter-failure")!=1{fails=fails+1}
32 if rc_has(out,n,"invalid-first-presenter")==1{fails=fails+1}
33 if fails==0{sys_write(1,"RECOVERY-GATE PASS 7 cases\n",27);return 0}
34 sys_write(1,"RECOVERY-GATE FAIL\n",19);return 1
35}