code wiki / (root) / nx_sign_facade_test.nx

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}