code wiki / _hdl_build / nx_poly1305_tput_probe.nx

nx_poly1305_tput_probe.nx source

↩ module page · 44 lines · 1643 B

1// nx_poly1305_tput_probe.nx -- measure Nishi Poly1305 MAC throughput in 2// isolation (16 MiB), the OTHER per-byte cost in ChaCha20-Poly1305 AEAD. 3// Mirrors nx_chacha_tput_probe so the two halves of the TLS cipher are 4// comparable apples-to-apples. license_tier: ORIGINAL 5import "nx_syscalls.nx" 6import "nx_poly1305.nx" 7const K_MAGIC_4096: i64 = 4096 8const K_MAGIC_16777216: i64 = 16777216 9 10func p_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 } 11func p_wn(fd: i64, v: i64) -> i64 { 12 var m: i64 = v 13 if m < 0 { m = 0 } 14 let bb: *u8 = sys_mmap(28) 15 let t: *u8 = sys_mmap(28) 16 var k: i64 = 0 17 if m == 0 { t[0] = 48 as u8; k = 1 } 18 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 19 var i: i64 = 0 20 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } 21 sys_write(fd, bb, k) 22 return 0 23} 24 25func main() -> i64 { 26 let key: *u8 = sys_mmap(32) 27 let msg: *u8 = sys_mmap(K_MAGIC_4096) 28 let tag: *u8 = sys_mmap(16) 29 var i: i64 = 0 30 while i < 32 { key[i] = (i & 255) as u8; i = i + 1 } 31 i = 0 32 while i < K_MAGIC_4096 { msg[i] = (i & 255) as u8; i = i + 1 } 33 let t0: i64 = sys_now_us() 34 var k: i64 = 0 35 while k < K_MAGIC_4096 { poly1305_mac(key, msg, K_MAGIC_4096, tag); k = k + 1 } 36 let t1: i64 = sys_now_us() 37 let us: i64 = t1 - t0 38 var mbps: i64 = 0 39 if us > 0 { mbps = K_MAGIC_16777216 / us } 40 p_w(1, "POLY1305 throughput: 16 MiB in " as *u8); p_wn(1, us) 41 p_w(1, " us = ~" as *u8); p_wn(1, mbps); p_w(1, " MB/s (vs OpenSSL poly1305 ~1000-3000 MB/s)\n" as *u8) 42 sys_exit(0) 43 return 0 44}