code wiki / (root) / _ed25519_sign_verify_smoke.nx

_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}