code wiki / (root) / _sha512_kat.nx

_sha512_kat.nx source

↩ module page · 44 lines · 1737 B

1// _sha512_kat.nx — NIST CAVS SHA-512 KATs. 2// Input "abc" -> ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a 2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f 3// Empty -> cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce 47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 4 5import "nx_syscalls.nx" 6import "nx_sha512.nx" 7import "nx_ed25519_signature.nx" 8 9func _hex_putd(b: u8) -> i64 { 10 let buf: *u8 = sys_mmap(2) 11 let v: i64 = b as i64 12 let hi: i64 = (v >> 4) & 0xf 13 let lo: i64 = v & 0xf 14 if hi < 10 { buf[0] = (0x30 + hi) as u8 } else { buf[0] = (0x61 + hi - 10) as u8 } 15 if lo < 10 { buf[1] = (0x30 + lo) as u8 } else { buf[1] = (0x61 + lo - 10) as u8 } 16 sys_write(2, buf, 2) 17 return 0 18} 19 20func _puthex(p: *u8, n: i64) -> i64 { 21 var i: i64 = 0 22 while i < n { _hex_putd(p[i]); i = i + 1 } 23 sys_write(2, "\n" as *u8, 1) 24 return 0 25} 26 27func main() -> i64 { 28 let out: *u8 = sys_mmap(64) 29 let buf: *u8 = sys_mmap(128) 30 31 // Test 1: empty via sha512_digest 32 sha512_digest(buf, 0, out) 33 sys_write(2, "[digest] empty: " as *u8, 16); _puthex(out, 64) 34 sys_write(2, " exp: cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e\n" as *u8, 150) 35 36 // Test 2: "abc" via sha512_digest 37 buf[0] = 0x61 as u8 38 buf[1] = 0x62 as u8 39 buf[2] = 0x63 as u8 40 sha512_digest(buf, 3, out) 41 sys_write(2, "[digest] abc: " as *u8, 16); _puthex(out, 64) 42 sys_write(2, " exp: ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f\n" as *u8, 150) 43 return 0 44}