code wiki / _hdl_build / nx_cms_setpw.nx

nx_cms_setpw.nx source

↩ module page · 39 lines · 1582 B

1// nx_cms_setpw.nx -- operator tool: set the editor password for a CMS site dir. 2// nx_cms_setpw.sov.elf <sitedir> <password> 3// Writes <sitedir>/admin_pw.sha256 (hex). Only the HASH is stored (never plaintext, vault doctrine); 4// upgrade path = argon2id once CRYPTO-RUNTIME-DEFECT (blake2b codegen) is fixed. license_tier: ORIGINAL 5import "nx_sha256.nx" 6import "nx_syscalls.nx" 7 8func sp_len(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 9 10func main(argc: i64, argv: *i64) -> i64 { 11 if argc < 3 { sys_write(1, "usage: nx_cms_setpw <sitedir> <password>\n" as *u8, 41); sys_exit(2); return 2 } 12 let sitedir: *u8 = argv[1] as *u8 13 let pw: *u8 = argv[2] as *u8 14 let dig: *u8 = sys_mmap(32) 15 sha256_digest(pw, sp_len(pw), dig) 16 let hexs: *u8 = sys_mmap(80) 17 let hxc: *u8 = "0123456789abcdef" as *u8 18 var i: i64 = 0 19 while i < 32 { 20 hexs[i*2] = hxc[((dig[i] as i64) >> 4) & 15] 21 hexs[i*2+1] = hxc[(dig[i] as i64) & 15] 22 i = i + 1 23 } 24 let path: *u8 = sys_mmap(512) 25 var o: i64 = 0 26 var k: i64 = 0 27 while sitedir[k] != (0 as u8) { path[o] = sitedir[k]; o = o + 1; k = k + 1 } 28 let leaf: *u8 = "/admin_pw.sha256" as *u8 29 k = 0 30 while leaf[k] != (0 as u8) { path[o] = leaf[k]; o = o + 1; k = k + 1 } 31 path[o] = 0 as u8 32 let fd: i64 = sys_openat_wr(path, 0x180) // 0600: owner-only 33 if fd < 0 { sys_write(1, "WRITE-FAIL\n" as *u8, 11); sys_exit(1); return 1 } 34 sys_write(fd, hexs, 64) 35 sys_close(fd) 36 sys_write(1, "PW-HASH-SET\n" as *u8, 12) 37 sys_exit(0) 38 return 0 39}