code wiki / bin / nx_bench_verify.nx

nx_bench_verify.nx source

↩ module page · 58 lines · 2226 B

1// nx_bench_verify.nx -- isolated ECDSA P-256 verify bench (u1*G + u2*Q, 2// both generic double-and-add; real signature produced first). 3import "nx_syscalls.nx" 4import "nx_csprng.nx" 5import "nx_u256.nx" 6import "nx_p256_modn.nx" 7import "nx_p256_point.nx" 8import "nx_p256_scalar_mul.nx" 9import "nx_ecdsa_p256.nx" 10import "nx_ecdsa_p256_sign.nx" 11 12func bstrlen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != 0 { n = n + 1 } return n } 13func bprint(label: *u8, total_us: i64, n: i64) -> i64 { 14 sys_write(1, label, bstrlen(label)); sys_write(1, "=" as *u8, 1) 15 let per: i64 = total_us / n 16 let buf: *u8 = sys_mmap(24); var d: i64 = 0 17 if per == 0 { buf[0] = 48; d = 1 } else { 18 var x: i64 = per; var c: i64 = 0 19 while x > 0 { c = c + 1; x = x / 10 } 20 d = c; var i: i64 = d - 1; x = per 21 while i >= 0 { buf[i] = (48 + (x % 10)) as u8; x = x / 10; i = i - 1 } 22 } 23 sys_write(1, buf, d); sys_write(1, " us/op N=" as *u8, 9) 24 let b2: *u8 = sys_mmap(24); var d2: i64 = 0 25 if n == 0 { b2[0]=48; d2=1 } else { 26 var x2: i64 = n; var c2: i64 = 0 27 while x2 > 0 { c2 = c2 + 1; x2 = x2 / 10 } 28 d2 = c2; var i2: i64 = d2 - 1; x2 = n 29 while i2 >= 0 { b2[i2] = (48 + (x2 % 10)) as u8; x2 = x2 / 10; i2 = i2 - 1 } 30 } 31 sys_write(1, b2, d2); sys_write(1, "\n" as *u8, 1) 32 return 0 33} 34 35func main() -> i64 { 36 let dkey: *i64 = u256_alloc() 37 let be: *u8 = sys_mmap(32) 38 nx_csprng_fill(be, 32); be[0] = 0 39 u256_load_be(dkey, be) 40 let hash: *i64 = u256_alloc() 41 nx_csprng_fill(be, 32) 42 u256_load_be(hash, be) 43 let rr: *i64 = u256_alloc() 44 let ss: *i64 = u256_alloc() 45 nx_ecdsa_p256_sign(dkey, hash, rr, ss) 46 let g: *P256Point = p256_point_alloc() 47 p256_point_load_g(g) 48 let q: *P256Point = p256_point_alloc() 49 p256_scalar_mul(q, dkey, g) 50 p256_point_to_affine(q) 51 let vv: i64 = nx_ecdsa_p256_verify(q.x, q.y, hash, rr, ss) 52 if vv != 1 { sys_write(1, "VERIFY_SELFTEST_FAIL\n" as *u8, 21); return 7 } 53 let NV: i64 = 10 54 var t0: i64 = sys_now_us(); var i: i64 = 0 55 while i < NV { nx_ecdsa_p256_verify(q.x, q.y, hash, rr, ss); i = i + 1 } 56 bprint("ecdsa_p256_verfy" as *u8, sys_now_us() - t0, NV) 57 return 0 58}