nx_sign_facade_test.nx source
↩ module page · 79 lines · 2706 B
1// nx_sign_facade_test.nx -- smoke for nx_sign_facade.
2
3import "nx_syscalls.nx"
4import "nx_sign_facade.nx"
5
6func main() -> i64 {
7 if NX_SA_N_ALGOS != 2 { return 1 }
8 if nx_sa_is_valid(NX_SA_ML_DSA_65) != 1 { return 2 }
9 if nx_sa_is_valid(2) != 0 { return 3 }
10
11 // Algo pick by trust
12 if nx_sign_facade_pick_algo(1024) != NX_SA_ML_DSA_65 { return 4 }
13 if nx_sign_facade_pick_algo(614) != NX_SA_ML_DSA_65 { return 5 }
14 if nx_sign_facade_pick_algo(613) != NX_SA_ED25519 { return 6 }
15 if nx_sign_facade_pick_algo(0) != NX_SA_ED25519 { return 7 }
16
17 // Signature sizes
18 if nx_sign_facade_signature_size(NX_SA_ML_DSA_65) != 3309 { return 8 }
19 if nx_sign_facade_signature_size(NX_SA_ED25519) != 64 { return 9 }
20
21 // Sign + verify roundtrip (Ed25519 size for V1 stand-in)
22 let msg: *u8 = (sys_mmap(16)) as *u8
23 var i: nx_size = 0
24 while i < 8 {
25 msg[i] = (65 + i) as u8
26 i = i + 1
27 }
28 let sk: *u8 = (sys_mmap(32)) as *u8
29 var j: nx_size = 0
30 while j < 32 {
31 sk[j] = (50 + j) as u8
32 j = j + 1
33 }
34 let sig: *u8 = (sys_mmap(128)) as *u8
35 let req: *NxSignRequest = nx_sign_request_new(NX_SA_ED25519,
36 msg, 8, sk, 32, sig, 128, 410)
37 let rc: nx_int = nx_sign_facade_sign(req)
38 if rc != 64 { return 10 } // Ed25519 sig is 64 bytes
39
40 // Verify with correct inputs
41 let v: nx_int = nx_sign_facade_verify(NX_SA_ED25519,
42 msg, 8, sig, 64, sk, 32, 410)
43 if v != NX_SF_VERIFIED { return 11 }
44
45 // Verify with wrong message -> REJECTED
46 msg[0] = 99 as u8
47 let v2: nx_int = nx_sign_facade_verify(NX_SA_ED25519,
48 msg, 8, sig, 64, sk, 32, 410)
49 if v2 != NX_SF_REJECTED { return 12 }
50
51 // Bad algo
52 let v3: nx_int = nx_sign_facade_verify(99, msg, 8, sig, 64, sk, 32, 410)
53 if v3 != NX_SF_ERR_BAD_ALGO { return 13 }
54
55 // Too-short sig refused
56 let v4: nx_int = nx_sign_facade_verify(NX_SA_ED25519,
57 msg, 8, sig, 8, sk, 32, 410)
58 if v4 != NX_SF_ERR_BAD_SIG_LEN { return 14 }
59
60 // Determinism: re-sign same inputs -> same bytes
61 msg[0] = 65 as u8 // restore
62 let sig2: *u8 = (sys_mmap(128)) as *u8
63 let req2: *NxSignRequest = nx_sign_request_new(NX_SA_ED25519,
64 msg, 8, sk, 32, sig2, 128, 410)
65 nx_sign_facade_sign(req2)
66 var k: nx_size = 0
67 while k < 16 { // first 16 bytes are the hash region
68 if sig[k] != sig2[k] { return 15 }
69 k = k + 1
70 }
71
72 // Too-small sig buffer
73 let small_sig: *u8 = (sys_mmap(8)) as *u8
74 let req_small: *NxSignRequest = nx_sign_request_new(NX_SA_ED25519,
75 msg, 8, sk, 32, small_sig, 8, 410)
76 if nx_sign_facade_sign(req_small) >= 0 { return 16 }
77
78 return 0
79}