nx_scam_detector_test.nx source
↩ module page · 74 lines · 3194 B
1// nx_scam_detector_test.nx -- smoke for nx_scam_detector.
2
3import "nx_syscalls.nx"
4import "nx_intent.nx"
5import "nx_scam_detector.nx"
6
7func main() -> i64 {
8 if NX_SP_N_PATTERNS != 8 { return 1 }
9 if nx_sp_is_valid(NX_SP_URGENCY_PRESSURE) != 1 { return 2 }
10 if nx_sp_is_valid(8) != 0 { return 3 }
11
12 // Clean message: simple greeting "Hello family"
13 let clean: *u8 = (sys_mmap(32)) as *u8
14 clean[0] = 72 as u8; clean[1] = 101 as u8; clean[2] = 108 as u8;
15 clean[3] = 108 as u8; clean[4] = 111 as u8; clean[5] = 32 as u8;
16 clean[6] = 102 as u8; clean[7] = 97 as u8; clean[8] = 109 as u8;
17 clean[9] = 105 as u8; clean[10] = 108 as u8; clean[11] = 121 as u8;
18 let r_clean: *NxScamScanResult = nx_scam_scan(clean, 12,
19 NX_INTENT_DEFENSIVE, 1000)
20 if (r_clean as i64) == 0 { return 4 }
21 if r_clean.verdict != NX_SC_CLEAN { return 5 }
22 if r_clean.pattern_count != 0 { return 6 }
23
24 // Urgency only: "act now and"
25 let urg: *u8 = (sys_mmap(32)) as *u8
26 urg[0] = 97 as u8; urg[1] = 99 as u8; urg[2] = 116 as u8;
27 urg[3] = 32 as u8; urg[4] = 110 as u8; urg[5] = 111 as u8;
28 urg[6] = 119 as u8; urg[7] = 32 as u8; urg[8] = 97 as u8;
29 urg[9] = 110 as u8; urg[10] = 100 as u8;
30 let r_urg: *NxScamScanResult = nx_scam_scan(urg, 11,
31 NX_INTENT_DEFENSIVE, 2000)
32 if r_urg.verdict != NX_SC_SUSPICIOUS { return 7 }
33 if r_urg.pattern_count != 1 { return 8 }
34 if nx_scam_pattern_flagged(r_urg, NX_SP_URGENCY_PRESSURE) != 1 { return 9 }
35 if nx_scam_pattern_flagged(r_urg, NX_SP_AUTHORITY_IMPERSONATION) != 0 { return 10 }
36
37 // Canonical IRS scam: "act now" + "irs" + "gift card"
38 let irs: *u8 = (sys_mmap(64)) as *u8
39 irs[0] = 97 as u8; irs[1] = 99 as u8; irs[2] = 116 as u8;
40 irs[3] = 32 as u8; irs[4] = 110 as u8; irs[5] = 111 as u8;
41 irs[6] = 119 as u8; irs[7] = 32 as u8;
42 irs[8] = 105 as u8; irs[9] = 114 as u8; irs[10] = 115 as u8;
43 irs[11] = 32 as u8;
44 irs[12] = 103 as u8; irs[13] = 105 as u8; irs[14] = 102 as u8;
45 irs[15] = 116 as u8; irs[16] = 32 as u8;
46 irs[17] = 99 as u8; irs[18] = 97 as u8; irs[19] = 114 as u8;
47 irs[20] = 100 as u8;
48 let r_irs: *NxScamScanResult = nx_scam_scan(irs, 21,
49 NX_INTENT_DEFENSIVE, 3000)
50 if r_irs.verdict != NX_SC_CONFIRMED_PATTERN { return 11 }
51 if r_irs.pattern_count < 3 { return 12 }
52
53 // Bitcoin investment alone: SUSPICIOUS
54 let btc: *u8 = (sys_mmap(16)) as *u8
55 btc[0] = 98 as u8; btc[1] = 105 as u8; btc[2] = 116 as u8;
56 btc[3] = 99 as u8; btc[4] = 111 as u8; btc[5] = 105 as u8;
57 btc[6] = 110 as u8;
58 let r_btc: *NxScamScanResult = nx_scam_scan(btc, 7,
59 NX_INTENT_DEFENSIVE, 4000)
60 if r_btc.verdict != NX_SC_SUSPICIOUS { return 13 }
61 if nx_scam_pattern_flagged(r_btc, NX_SP_CRYPTO_INVESTMENT) != 1 { return 14 }
62
63 // Non-Defensive non-Diagnostic intent refused
64 let r_bad: *NxScamScanResult = nx_scam_scan(clean, 12,
65 NX_INTENT_CREATIVE, 5000)
66 if (r_bad as i64) != 0 { return 15 }
67
68 // Diagnostic intent allowed
69 let r_diag: *NxScamScanResult = nx_scam_scan(clean, 12,
70 NX_INTENT_DIAGNOSTIC, 6000)
71 if (r_diag as i64) == 0 { return 16 }
72
73 return 0
74}