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