code wiki / (root) / nx_aesgcm_bench.nx

nx_aesgcm_bench.nx source

↩ module page · 46 lines · 1512 B

1// nx_aesgcm_bench.nx -- measure sovereign AES-128-GCM throughput (the cipher 2// Wikipedia/example.com actually negotiate -- NOT ChaCha20-Poly1305). WSL real clock. 3// 4// expect_exit: 0 5 6import "nx_syscalls.nx" 7import "nx_aes128_gcm.nx" 8const K_MAGIC_2970000: i64 = 2970000 9const K_MAGIC_1000000: i64 = 1000000 10 11func b_ps(s: *u8, n: i64) -> i64 { sys_write(1, s, n); return 0 } 12func b_pn(v: i64) -> i64 { 13 let b: *u8 = sys_mmap(24) 14 var x: i64 = v 15 if x < 0 { x = 0 - x } 16 var i: i64 = 22 17 if x == 0 { b[i] = 0x30 as u8; i = i - 1 } 18 else { while x > 0 { b[i] = (0x30 + (x - (x/10)*10)) as u8; x = x / 10; i = i - 1 } } 19 sys_write(1, ((b as i64) + i + 1) as *u8, 22 - i) 20 return 0 21} 22 23func main() -> i64 { 24 let N: i64 = K_MAGIC_2970000 25 let pt: *u8 = sys_mmap(N) 26 let ct: *u8 = sys_mmap(N + 64) 27 let key: *u8 = sys_mmap(16) 28 let iv: *u8 = sys_mmap(16) 29 let aad: *u8 = sys_mmap(16) 30 let tag: *u8 = sys_mmap(32) 31 var i: i64 = 0 32 while i < 16 { key[i] = (i + 1) as u8; i = i + 1 } 33 i = 0 34 while i < N { pt[i] = (i & 0xff) as u8; i = i + 1 } 35 36 let t0: i64 = sys_now_ms() 37 nx_aes128_gcm_seal(key, iv, aad, 5, pt, N, ct, tag) 38 let t1: i64 = sys_now_ms() 39 40 let ms: i64 = t1 - t0 41 let mb: i64 = N / K_MAGIC_1000000 42 b_ps("aes128-gcm " as *u8, 11); b_pn(mb); b_ps("MB = " as *u8, 5); b_pn(ms); b_ps("ms\n" as *u8, 3) 43 if ms > 0 { b_ps(" AES-GCM MB/s=" as *u8, 15); b_pn((N / 1000) / ms); b_ps("\n" as *u8, 1) } 44 sys_exit(0) 45 return 0 46}