From 4e39bccab6db0e16307cfd354215dda219e93561 Mon Sep 17 00:00:00 2001 From: Jesper Louis Andersen Date: Sat, 29 Aug 2015 21:22:28 +0200 Subject: [PATCH] Introduce initial timing code for the library. --- bench/timing.erl | 150 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 bench/timing.erl diff --git a/bench/timing.erl b/bench/timing.erl new file mode 100644 index 0000000..4d004ea --- /dev/null +++ b/bench/timing.erl @@ -0,0 +1,150 @@ +-module(timing). +-export([test/0]). + +test() -> + randombytes(), + randombytes(), + randombytes(), + hash(), + box_keypair(), + box(), + box_before_after(), + sign_keypair(), + sign(), + secretbox(), + stream(), + auth(), + onetime_auth(), + scalarmult(), + ok. + +randombytes() -> + randombytes(100*1000). + +randombytes(0) -> ok; +randombytes(N) -> + enacl:randombytes(1024), + randombytes(N-1). + +hash() -> + B = binary:copy(<<0>>, 4096), + hash(B, 10*1000). + +hash(_B, 0) -> ok; +hash(B, N) -> + enacl:hash(B), + hash(B, N-1). + +box_keypair() -> + box_keypair(10*1000). + +box_keypair(0) -> ok; +box_keypair(N) -> + enacl:box_keypair(), + box_keypair(N-1). + +box() -> + #{ public := PK1} = enacl:box_keypair(), + #{ secret := SK2} = enacl:box_keypair(), + B = binary:copy(<<0>>, 1), + Nonce = binary:copy(<<0>>, enacl:box_nonce_size()), + box(B, Nonce, PK1, SK2, 10*1000). + +box(_B, _Nonce, _PK1, _SK2, 0) -> ok; +box(B, Nonce, PK1, SK2, N) -> + enacl:box(B, Nonce, PK1, SK2), + enacl:box_seal(B, PK1), + box(B, Nonce, PK1, SK2, N-1). + +box_before_after() -> + #{ public := PK1 } = enacl:box_keypair(), + #{ secret := SK2 } = enacl:box_keypair(), + box_beforenm(PK1, SK2, 10*1000), + R = enacl:box_beforenm(PK1, SK2), + B = binary:copy(<<0>>, 8192), + Nonce = binary:copy(<<0>>, enacl:box_nonce_size()), + box_afternm(B, Nonce, R, 10*1000), + ok. + +box_beforenm(_PK, _SK, 0) -> ok; +box_beforenm(PK, SK, N) -> + enacl:box_beforenm(PK, SK), + box_beforenm(PK, SK, N-1). + +box_afternm(_Msg, _Nonce, _Key, 0) -> ok; +box_afternm(Msg, Nonce, Key, N) -> + enacl:box_afternm(Msg, Nonce, Key), + box_afternm(Msg, Nonce, Key, N-1). + +sign_keypair() -> + sign_keypair(10*1000). + +sign_keypair(0) -> ok; +sign_keypair(N) -> + enacl:sign_keypair(), + #{ public := PK, secret := SK} = enacl:crypto_sign_ed25519_keypair(), + enacl:crypto_sign_ed25519_public_to_curve25519(PK), + enacl:crypto_sign_ed25519_secret_to_curve25519(SK), + sign_keypair(N-1). + +sign() -> + Msg = binary:copy(<<0>>, 1024), + #{ secret := SK } = enacl:sign_keypair(), + sign(Msg, SK, 10*1000). + +sign(_Msg, _SK, 0) -> ok; +sign(Msg, SK, N) -> + enacl:sign(Msg, SK), + enacl:sign_detached(Msg, SK), + sign(Msg, SK, N-1). + +secretbox() -> + Msg = binary:copy(<<0>>, 8192), + Nonce = binary:copy(<<0>>, enacl:secretbox_nonce_size()), + Key = binary:copy(<<0>>, enacl:secretbox_key_size()), + secretbox(Msg, Nonce, Key, 10*1000). + +secretbox(_Msg, _Nonce, _Key, 0) -> ok; +secretbox(Msg, Nonce, Key, N) -> + enacl:secretbox(Msg, Nonce, Key), + secretbox(Msg, Nonce, Key, N-1). + + +stream() -> + stream(16384, binary:copy(<<0>>, enacl:stream_nonce_size()), binary:copy(<<0>>, enacl:stream_key_size()), 10*1000). + +stream(_L, _Nonce, _K, 0) -> ok; +stream(L, Nonce, K, N) -> + enacl:stream(L, Nonce, K), + stream(L, Nonce, K, N-1). + +auth() -> + Msg = binary:copy(<<0>>, 4096), + Key = binary:copy(<<0>>, enacl:auth_key_size()), + auth(Msg, Key, 10*1000). + +auth(_Msg, _Key, 0) -> ok; +auth(Msg, Key, N) -> + enacl:auth(Msg, Key), + auth(Msg, Key, N-1). + +onetime_auth() -> + Msg = binary:copy(<<0>>, 16384), + Key = binary:copy(<<0>>, enacl:onetime_auth_key_size()), + onetime_auth(Msg, Key, 10*1000). + +onetime_auth(_Msg, _Key, 0) -> ok; +onetime_auth(Msg, Key, N) -> + enacl:onetime_auth(Msg, Key), + onetime_auth(Msg, Key, N-1). + +scalarmult() -> + Secret = binary:copy(<<0>>, 32), + BasePoint = binary:copy(<<1>>, 32), + scalarmult(Secret, BasePoint, 10*1000). + +scalarmult(_S, _B, 0) -> ok; +scalarmult(S, B, N) -> + enacl:curve25519_scalarmult(S, B), + scalarmult(S, B, N-1). +