nx_site_publish_sized_guard_gate.nx source
↩ module page · 56 lines · 4442 B
1// Real NXA payload qualification in an exclusively created scratch directory.
2import "nx_site_publish_gate.nx"
3func main(argc: i64,argv: *i64) -> i64 {
4 if argc != 5 { return 2 }
5 let count: i64=pb_sized_bytes(argv[4] as *u8)
6 if count <= FSX_READ_CAP { return 2 }
7 var an: i64=0;var bn: i64=0
8 let a: *u8=sys_read_file(argv[2] as *u8,&an)
9 let b: *u8=sys_read_file(argv[3] as *u8,&bn)
10 if (a as i64)==0 || (b as i64)==0 || an<=0 || bn!=count { return 3 }
11 if pb_same_bytes(a,an,b,bn)==1 { return 3 }
12 if sys_mkdir(argv[1] as *u8,0x1ed)!=0 || sys_chdir(argv[1] as *u8)!=0 { return 4 }
13 sys_mkdir("sites" as *u8,0x1ed);sys_mkdir("sites/gatesite" as *u8,0x1ed);sys_mkdir("knowledge" as *u8,0x1ed)
14 if fsx_write("sites/gatesite/model.nxa" as *u8,a,an)<0 || fsx_write("candidate.nxa" as *u8,b,bn)<0 { return 5 }
15 let ha: *u8=sys_mmap(PB_SHA_HEX+1);let hb: *u8=sys_mmap(PB_SHA_HEX+1)
16 pb_hash(a,an,ha);pb_hash(b,bn,hb)
17 let av: *i64=sys_mmap((PB_GUARDED_SIZED_ARGC+1)*__size_of(i64)) as *i64
18 av[0]="nx_site_publish" as *u8 as i64;av[1]="publish-guarded" as *u8 as i64
19 av[2]="candidate.nxa" as *u8 as i64;av[3]="gatesite" as *u8 as i64;av[4]="model.nxa" as *u8 as i64
20 av[5]=hb as i64;av[6]=ha as i64;av[7]=argv[4]
21 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=FSX_RC_DENIED { return 6 }
22 let conf: *u8="gatesite\tsites/gatesite\tknowledge/pub-\thttps://example.invalid\tGate\tprivate/\n"
23 if ss_writefile("knowledge/pub_sites.conf" as *u8,conf,ss_len(conf))!=0 { return 7 }
24 let row: *i64=ss_begin_cap(64);ss_add(row,1,"q:n" as *u8,"0" as *u8,1)
25 if ss_commit("knowledge/pub-" as *u8,row,ss_next_segid("knowledge/pub-" as *u8))!=0 { return 7 }
26 if pl_register_asset("knowledge/pub-" as *u8,"model.nxa" as *u8,"real binary guarded size gate" as *u8)!=1 { return 7 }
27 av[5]=ha as i64
28 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=PB_RC_CONFLICT || sg_eq_bytes("sites/gatesite/model.nxa" as *u8,a,an)!=1 { return 8 }
29 av[5]=hb as i64;av[6]="absent" as *u8 as i64
30 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=PB_RC_CONFLICT || sg_absent("sites/gatesite/model.nxa.prev" as *u8)!=1 { return 9 }
31 av[6]=ha as i64;av[7]="1" as *u8 as i64
32 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=PB_RC_CONFLICT || sg_eq_bytes("sites/gatesite/model.nxa" as *u8,a,an)!=1 { return 10 }
33 av[7]=argv[4]
34 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=0 || sg_eq_bytes("sites/gatesite/model.nxa" as *u8,b,bn)!=1 || sg_eq_bytes("sites/gatesite/model.nxa.prev" as *u8,a,an)!=1 { return 11 }
35 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=0 || sg_eq_bytes("sites/gatesite/model.nxa.prev" as *u8,a,an)!=1 { return 12 }
36 let changed:*u8=sys_mmap(bn+1)
37 var i:i64=0;while i<bn {changed[i]=b[i];i=i+1}
38 changed[bn]=173 as u8
39 if fsx_write("candidate.nxa" as *u8,changed,bn+1)<0 {return 13}
40 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=PB_RC_CONFLICT || sg_eq_bytes("sites/gatesite/model.nxa" as *u8,b,bn)!=1 {return 14}
41 if fsx_write("candidate.nxa" as *u8,b,bn-1)<0 {return 15}
42 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=PB_RC_CONFLICT || sg_eq_bytes("sites/gatesite/model.nxa" as *u8,b,bn)!=1 {return 16}
43 changed[bn-1]=((changed[bn-1] as i64)^1) as u8
44 let hc:*u8=sys_mmap(PB_SHA_HEX+1);pb_hash(changed,bn,hc)
45 if fsx_write("equal.nxa" as *u8,changed,bn)<0 {return 17}
46 av[2]="equal.nxa" as *u8 as i64;av[5]=hc as i64;av[6]=hb as i64
47 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=0 || sg_eq_bytes("sites/gatesite/model.nxa" as *u8,changed,bn)!=1 || sg_eq_bytes("sites/gatesite/model.nxa.prev" as *u8,b,bn)!=1 {return 18}
48 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=0 || sg_eq_bytes("sites/gatesite/model.nxa.prev" as *u8,b,bn)!=1 {return 19}
49 if fsx_write("original.nxa" as *u8,a,an)<0 {return 20}
50 let extent:*u8=sys_mmap(NXI_BUF);let en:i64=nxi_buf(extent,0,an);extent[en]=0 as u8
51 av[2]="original.nxa" as *u8 as i64;av[5]=ha as i64;av[6]=hc as i64;av[7]=extent as i64
52 if sp_main(PB_GUARDED_SIZED_ARGC,av)!=0 || sg_eq_bytes("sites/gatesite/model.nxa" as *u8,a,an)!=1 || sg_eq_bytes("sites/gatesite/model.nxa.prev" as *u8,changed,bn)!=1 {return 21}
53 fsx_puts("SIZED-GUARDED 11/11 real artifacts: registry, artifact digest, prior digest, extent, replacement, retry, source growth refusal, source truncation refusal, equal-size change, equal retry and reverse-size change\n")
54 fsx_puts("prior_bytes=");fsx_putn(an);fsx_puts(" incoming_bytes=");fsx_putn(bn);fsx_puts("\n")
55 return 0
56}