code wiki / (root) / nx_tools_api_recovery_gate_t316.nx

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}