_ed25519_sign_verify_smoke.nx source
↩ module page · 41 lines · 1846 B
1// _ed25519_sign_verify_smoke.nx — SITES-LIVE 2026-05-27 isolation
2// Sign known msg with priv from /tmp/...priv.bin; write sig + msg + pub to /tmp
3// for openssl-side verification.
4import "nx_syscalls.nx"
5import "nx_ed25519_signature.nx"
6
7func main() -> i64 {
8 let priv_path: *u8 = "/tmp/nx_cert_gen_demo_ed25519_priv.bin" as *u8
9 let len_box: *i64 = (sys_mmap(8)) as *i64
10 len_box[0] = 0
11 let priv_32: *u8 = sys_read_file(priv_path, len_box)
12 if (priv_32 as i64) == 0 { sys_write(2, "no priv\n" as *u8, 8); return 1 }
13 if len_box[0] != 32 { sys_write(2, "bad priv size\n" as *u8, 14); return 2 }
14
15 // Derive pub
16 let pub_32: *u8 = sys_mmap(32)
17 if ed25519_pub_from_priv(priv_32, pub_32) != 0 { sys_write(2, "pub_from_priv fail\n" as *u8, 19); return 3 }
18
19 // Sign a known 32-byte message (just bytes 00..1f)
20 let msg: *u8 = sys_mmap(32)
21 var i: i64 = 0
22 while i < 32 { msg[i] = i as u8; i = i + 1 }
23
24 let sig: *u8 = sys_mmap(64)
25 if ed25519_sign_full(priv_32, msg, 32, sig) != 0 { sys_write(2, "sign fail\n" as *u8, 10); return 4 }
26
27 // Self-verify (internal)
28 let v: i64 = ed25519_verify_full(pub_32, msg, 32, sig)
29 if v != NX_ED25519_SIG_OK { sys_write(2, "self_verify FAIL\n" as *u8, 17); return 5 }
30 sys_write(2, "self_verify OK\n" as *u8, 15)
31
32 // Write to /tmp (sys_openat_wr + sys_write + sys_close)
33 let f1: i64 = sys_openat_wr("/tmp/edsv_msg.bin" as *u8, 0x1a4) // 0644
34 if f1 >= 0 { sys_write(f1, msg, 32); sys_close(f1) }
35 let f2: i64 = sys_openat_wr("/tmp/edsv_sig.bin" as *u8, 0x1a4)
36 if f2 >= 0 { sys_write(f2, sig, 64); sys_close(f2) }
37 let f3: i64 = sys_openat_wr("/tmp/edsv_pub.bin" as *u8, 0x1a4)
38 if f3 >= 0 { sys_write(f3, pub_32, 32); sys_close(f3) }
39 sys_write(1, "ED25519 sign+self-verify OK; files written\n" as *u8, 43)
40 return 0
41}