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}