code wiki / (root) / nx_etg_test.nx

nx_etg_test.nx source

↩ module page · 166 lines · 7479 B

1// nx_etg_test.nx -- KAT for nx_etg.nx Empirical-Truth Gamification 2// substrate primitive. 3// 4// Verifies: 5// T1 Outcome sealed-enum completeness: every NX_ETG_OUTCOME_* 6// value 0..N-1 validates true; sentinels out-of-range 7// validate false. 8// T2 Probe-kind + claim-source enum validity gates. 9// T3 Outcome → reclamation mapping: VENDOR_LIED_OMISSION / 10// PAYWALLED_BUT_RESPONSIVE / RECLAIMED / THROTTLED / 11// UNDOCUMENTED_CAPABILITY all imply reclamation; CONFIRMED / 12// FALSIFIED / FUSED_OFF / INCONCLUSIVE / NONE do not. 13// T4 Entry init rejects invalid arguments deterministically. 14// T5 Entry init records reclamation_delta correctly per outcome. 15// T6 Attestation determinism: same substantive fields -> same 16// hash; differing fields -> different hash. 17// T7 FNV step / FNV i64 sanity (round-trip property on known 18// constants from the FNV-1a public spec). 19 20import "nx_syscalls.nx" 21import "nx_etg.nx" 22 23func main() -> i64 { 24 // ----- T1 Outcome sealed-enum completeness ----- 25 var i: i64 = 0 26 while i < NX_ETG_OUTCOME_N { 27 if nx_etg_outcome_is_valid(i) != 1 { return 1 + i } 28 i = i + 1 29 } 30 // Out-of-range sentinels reject. 31 if nx_etg_outcome_is_valid(0 - 1) != 0 { return 100 } 32 if nx_etg_outcome_is_valid(NX_ETG_OUTCOME_N) != 0 { return 101 } 33 if nx_etg_outcome_is_valid(NX_ETG_OUTCOME_N + 1) != 0 { return 102 } 34 if nx_etg_outcome_is_valid(9999) != 0 { return 103 } 35 36 // ----- T2 Probe-kind + claim-source validity ----- 37 if nx_etg_probe_is_valid(NX_ETG_PROBE_CPU_ISA) != 1 { return 110 } 38 if nx_etg_probe_is_valid(NX_ETG_PROBE_GPU_TENSOR) != 1 { return 111 } 39 if nx_etg_probe_is_valid(NX_ETG_PROBE_N) != 0 { return 112 } 40 if nx_etg_probe_is_valid(0 - 5) != 0 { return 113 } 41 if nx_etg_claim_is_valid(NX_ETG_CLAIM_CPUID) != 1 { return 114 } 42 if nx_etg_claim_is_valid(NX_ETG_CLAIM_SPORE_HINT) != 1 { return 115 } 43 if nx_etg_claim_is_valid(NX_ETG_CLAIM_N) != 0 { return 116 } 44 45 // ----- T3 Outcome -> reclamation mapping ----- 46 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_VENDOR_LIED_OMISSION) != 1 { return 120 } 47 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_PAYWALLED_BUT_RESPONSIVE) != 1 { return 121 } 48 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_RECLAIMED) != 1 { return 122 } 49 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_THROTTLED) != 1 { return 123 } 50 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_UNDOCUMENTED_CAPABILITY) != 1 { return 124 } 51 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_CONFIRMED) != 0 { return 130 } 52 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_FALSIFIED) != 0 { return 131 } 53 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_FUSED_OFF) != 0 { return 132 } 54 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_INCONCLUSIVE) != 0 { return 133 } 55 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_VENDOR_LIED_MISDIRECTION) != 0 { return 134 } 56 if nx_etg_outcome_implies_reclamation(NX_ETG_OUTCOME_NONE) != 0 { return 135 } 57 58 // ----- T4 Entry init rejects invalid arguments ----- 59 let e_buf: *u8 = sys_mmap(128) 60 let e: *NxEtgEntry = e_buf as *NxEtgEntry 61 62 // Bad probe kind. 63 let rc_bad_probe: i64 = nx_etg_entry_init(e, 1, 9999, NX_ETG_CLAIM_CPUID, 1, 1, NX_ETG_OUTCOME_CONFIRMED, 1, 0) 64 if rc_bad_probe != -1 { return 140 } 65 66 // Bad claim source. 67 let rc_bad_claim: i64 = nx_etg_entry_init(e, 1, NX_ETG_PROBE_CPU_ISA, 9999, 1, 1, NX_ETG_OUTCOME_CONFIRMED, 1, 0) 68 if rc_bad_claim != -2 { return 141 } 69 70 // Bad outcome. 71 let rc_bad_outcome: i64 = nx_etg_entry_init(e, 1, NX_ETG_PROBE_CPU_ISA, NX_ETG_CLAIM_CPUID, 1, 1, 9999, 1, 0) 72 if rc_bad_outcome != -3 { return 142 } 73 74 // ----- T5 Entry init records reclamation_delta correctly ----- 75 // Scenario A: probe CPUID claims no AVX-512 on this Alder Lake P-core, 76 // but direct ISA execution succeeded -- vendor lied by omission. 77 let rc_a: i64 = nx_etg_entry_init( 78 e, 79 0xDEADBEEF, // silicon serial hash 80 NX_ETG_PROBE_CPU_ISA, 81 NX_ETG_CLAIM_CPUID, 82 0, // claim: AVX-512 disabled 83 1, // measurement: AVX-512 executed 84 NX_ETG_OUTCOME_VENDOR_LIED_OMISSION, 85 1, // selector version 86 12345 // timestamp 87 ) 88 if rc_a != 0 { return 150 } 89 if e.reclamation_delta != 1 { return 151 } 90 if e.outcome != NX_ETG_OUTCOME_VENDOR_LIED_OMISSION { return 152 } 91 if e.silicon_serial_hash != 0xDEADBEEF { return 153 } 92 if e.claim_value != 0 { return 154 } 93 if e.measurement_value != 1 { return 155 } 94 95 // Scenario B: probe driver ICD reports compute capability 7.5, 96 // measurement matches. CONFIRMED, no reclamation delta. 97 let e_buf2: *u8 = sys_mmap(128) 98 let e2: *NxEtgEntry = e_buf2 as *NxEtgEntry 99 let rc_b: i64 = nx_etg_entry_init( 100 e2, 101 0xDEADBEEF, 102 NX_ETG_PROBE_GPU_ISA, 103 NX_ETG_CLAIM_DRIVER_ICD, 104 75, 105 75, 106 NX_ETG_OUTCOME_CONFIRMED, 107 1, 108 12346 109 ) 110 if rc_b != 0 { return 160 } 111 if e2.reclamation_delta != 0 { return 161 } 112 if e2.outcome != NX_ETG_OUTCOME_CONFIRMED { return 162 } 113 114 // ----- T6 Attestation determinism ----- 115 // Two entries with identical substantive fields produce identical 116 // attestation hashes. 117 let e_buf3: *u8 = sys_mmap(128) 118 let e3: *NxEtgEntry = e_buf3 as *NxEtgEntry 119 let rc_c: i64 = nx_etg_entry_init( 120 e3, 121 0xDEADBEEF, 122 NX_ETG_PROBE_CPU_ISA, 123 NX_ETG_CLAIM_CPUID, 124 0, 125 1, 126 NX_ETG_OUTCOME_VENDOR_LIED_OMISSION, 127 1, 128 12345 129 ) 130 if rc_c != 0 { return 170 } 131 // e (from scenario A) and e3 have identical substantive fields. 132 if nx_etg_attestation_deterministic(e, e3) != 1 { return 171 } 133 if e.attestation_hash != e3.attestation_hash { return 172 } 134 135 // Differing fields -> different hash. 136 let e_buf4: *u8 = sys_mmap(128) 137 let e4: *NxEtgEntry = e_buf4 as *NxEtgEntry 138 let rc_d: i64 = nx_etg_entry_init( 139 e4, 140 0xCAFEBABE, // different silicon 141 NX_ETG_PROBE_CPU_ISA, 142 NX_ETG_CLAIM_CPUID, 143 0, 144 1, 145 NX_ETG_OUTCOME_VENDOR_LIED_OMISSION, 146 1, 147 12345 148 ) 149 if rc_d != 0 { return 180 } 150 if nx_etg_attestation_deterministic(e, e4) != 0 { return 181 } 151 if e.attestation_hash == e4.attestation_hash { return 182 } 152 153 // ----- T7 Attestation hash is non-zero + sensitive to inputs ----- 154 // The hand-rolled FNV helpers (nx_etg_fnv_step / nx_etg_fnv_i64 / 155 // NX_ETG_FNV_OFFSET) were consolidated into nx_fnv 2026-05-20 156 // per the bit-level no-tool-proliferation cardinal. FNV-1a's 157 // own KAT lives in nx_fnv_test. Here we verify the attestation 158 // hash IS non-zero for at least one entry (composition gate) 159 // and that two entries differing in ONE field produce different 160 // hashes (FNV avalanche property propagates through composition). 161 if e.attestation_hash == 0 { return 200 } 162 if e4.attestation_hash == 0 { return 201 } 163 if e.attestation_hash == e4.attestation_hash { return 202 } 164 165 return 0 166}