code wiki / (root) / nx_forge_evidence_t274.nx

nx_forge_evidence_t274.nx source

↩ module page · 101 lines · 4633 B

1// Additive structured evaluation for synthetic release-evidence reasoning. 2// Does not authorize releases or execute model-produced code. 3import "nx_json.nx" 4import "_hdl_build/nx_json_lib_route_t160.nx" 5import "nx_sha256.nx" 6import "nx_lib_std.nx" 7const FJ_TRI_MISSING:i64=0-2 8const FJ_TRI_UNKNOWN:i64=0-1 9func fje_len(s:*u8)->i64 { var n:i64=0;while s[n]!=(0 as u8){n=n+1};return n } 10func fje_eq(a:*u8,n:i64,b:*u8)->i64 { if n!=fje_len(b){return 0};var i:i64=0;while i<n{if a[i]!=b[i]{return 0};i=i+1};return 1 } 11func fje_parse(src:*u8,n:i64,fixture:i64,v:*i64)->i64 { 12 let bytes:i64=__size_of(NxJsonTok) 13 let t:*NxJsonTok=sys_mmap_try(bytes) as *NxJsonTok 14 if (t as i64)<=0{return 0-1} 15 let decoded:*u8=sys_mmap_try(n+1) 16 if (decoded as i64)<=0{sys_munmap_direct(t as *u8,bytes);return 0-1} 17 t.src=src;t.len=n;t.pos=0;t.kind=0;t.tok_off=0;t.tok_len=0 18 var i:i64=0;while i<4{v[i]=FJ_TRI_MISSING;i=i+1} 19 var ok:i64=1;var done:i64=0 20 if nx_json_next(t)!=NX_JSON_LBRACE{ok=0} 21 while ok==1 && done==0 { 22 if nx_json_next(t)!=NX_JSON_STRING {ok=0} else { 23 let raw:*u8=((src as i64)+t.tok_off+1) as *u8 24 let kn:i64=jx_decode_span(raw,t.tok_len-2,decoded,n+1) 25 let k:*u8=decoded 26 if kn<0{ok=0} 27 var slot:i64=0-1 28 if fixture==1 { 29 if fje_eq(k,kn,"sourceHashMatches" as *u8)==1{slot=0} 30 if fje_eq(k,kn,"buildTests" as *u8)==1{slot=1} 31 if fje_eq(k,kn,"servedReview" as *u8)==1{slot=2} 32 } else { 33 if fje_eq(k,kn,"sourceVerified" as *u8)==1{slot=0} 34 if fje_eq(k,kn,"buildQualified" as *u8)==1{slot=1} 35 if fje_eq(k,kn,"servedAccepted" as *u8)==1{slot=2} 36 if fje_eq(k,kn,"promote" as *u8)==1{slot=3} 37 } 38 if slot<0{ok=0} else { 39 if v[slot]!=FJ_TRI_MISSING{ok=0} 40 if nx_json_next(t)!=NX_JSON_COLON{ok=0} 41 let kind:i64=nx_json_next(t) 42 if kind==NX_JSON_TRUE{v[slot]=1} else { 43 if kind==NX_JSON_FALSE{v[slot]=0} else { 44 if kind==NX_JSON_NULL{v[slot]=FJ_TRI_UNKNOWN} else {ok=0} 45 } 46 } 47 } 48 if ok==1{ 49 let sep:i64=nx_json_next(t) 50 if sep==NX_JSON_RBRACE{done=1} else {if sep!=NX_JSON_COMMA{ok=0}} 51 } 52 } 53 } 54 if ok==1{if nx_json_next(t)!=NX_JSON_EOF{ok=0}} 55 if v[0]==FJ_TRI_MISSING || v[1]==FJ_TRI_MISSING || v[2]==FJ_TRI_MISSING{ok=0} 56 if fixture==0 && v[3]==FJ_TRI_MISSING{ok=0} 57 sys_munmap_direct(decoded,n+1);sys_munmap_direct(t as *u8,bytes);return ok 58} 59func fje_score(a:*i64,b:*i64)->i64 { 60 var i:i64=0;while i<3{if a[i]!=b[i]{return 0};i=i+1} 61 var promote:i64=0;if a[0]==1 && a[1]==1 && a[2]==1{promote=1} 62 if b[3]!=promote{return 0};return 1 63} 64func fje_hash(src:*u8,n:i64)->i64 { 65 let digest:*u8=sys_mmap_try(SHA256_DIGEST_BYTES) 66 if (digest as i64)<=0{return 0} 67 if sha256_digest_checked_native(src,n,digest)!=0{sys_munmap_direct(digest,SHA256_DIGEST_BYTES);return 0} 68 let digits:*u8="0123456789abcdef" as *u8 69 var i:i64=0;while i<SHA256_DIGEST_BYTES{ 70 let v:i64=digest[i] as i64;sys_write(1,((digits as i64)+(v/16)) as *u8,1);sys_write(1,((digits as i64)+(v%16)) as *u8,1);i=i+1 71 };sys_munmap_direct(digest,SHA256_DIGEST_BYTES);return 1 72} 73func fje_cli(fixture:*u8,response:*u8)->i64 { 74 let fields:i64=4*__size_of(i64) 75 let a:*i64=sys_mmap_try(fields) as *i64;let b:*i64=sys_mmap_try(fields) as *i64 76 if (a as i64)<=0 || (b as i64)<=0{ 77 if (a as i64)>0{sys_munmap_direct(a as *u8,fields)};if (b as i64)>0{sys_munmap_direct(b as *u8,fields)} 78 std_putln("{\"state\":\"unavailable\",\"reason\":\"allocation\"}" as *u8);return 3 79 } 80 let ap:i64=fje_parse(fixture,fje_len(fixture),1,a);let bp:i64=fje_parse(response,fje_len(response),0,b) 81 var state:*u8="rejected" as *u8 82 var accepted:i64=0 83 if ap!=1{state="insufficient-evidence" as *u8} else { 84 if bp==1{accepted=fje_score(a,b);if accepted==1{state="accepted" as *u8}} 85 } 86 if ap<0 || bp<0{state="unavailable" as *u8;accepted=0} 87 var complete:i64=0 88 if ap==1 && a[0]!=FJ_TRI_UNKNOWN && a[1]!=FJ_TRI_UNKNOWN && a[2]!=FJ_TRI_UNKNOWN{complete=1} 89 std_puts("{\"evaluator\":\"forge-release-evidence-v1\",\"fixture_sha256\":\"" as *u8) 90 let ah:i64=fje_hash(fixture,fje_len(fixture)) 91 std_puts("\",\"response_sha256\":\"" as *u8);let bh:i64=fje_hash(response,fje_len(response)) 92 std_puts("\",\"state\":\"" as *u8) 93 if ah!=1 || bh!=1{state="unavailable" as *u8;accepted=0} 94 std_puts(state);std_puts("\",\"accepted\":" as *u8) 95 if accepted==1{std_puts("true" as *u8)}else{std_puts("false" as *u8)} 96 std_puts(",\"fixtureEvidenceComplete\":" as *u8) 97 if complete==1{std_puts("true" as *u8)}else{std_puts("false" as *u8)} 98 std_putln(",\"releaseAuthorized\":false}" as *u8) 99 sys_munmap_direct(a as *u8,fields);sys_munmap_direct(b as *u8,fields) 100 if ap!=1 || bp<0 || ah!=1 || bh!=1{return 3};if accepted==1{return 0};return 1 101}