diff --git a/profile.lua b/profile.lua new file mode 100644 index 0000000..b893a25 --- /dev/null +++ b/profile.lua @@ -0,0 +1,154 @@ +local PROFILE_TIME_MS = 2000 + +local function profile(fmt, fun, coeff) + local tStart = os.epoch("utc") + local sum = 0 + local count = 0 + repeat + local t0 = os.epoch("utc") + fun() + local t1 = os.epoch("utc") + sum = sum + t1 - t0 + count = count + 1 + if count ~= 1 then + local x, y = term.getCursorPos() + term.setCursorPos(1, y - 1) + term.clearLine() + end + print(fmt:format(coeff * count / sum)) + until t1 - tStart > PROFILE_TIME_MS + sleep() +end + +local random = require "ccryptolib.random" +random.init("mock random init") + +local m = random.random(100000) +local block = random.random(32) +local nonce = random.random(12) + +local blake3 = require "ccryptolib.blake3" + +profile( + "BLAKE3 input rate: %g kB/s", + function() blake3.digest(m) end, + #m +) + +profile( + "BLAKE3 output rate: %g kB/s", + function() blake3.digest(block, 100000) end, + 100000 +) + +profile( + "BLAKE3 short input rate: %g msg/s", + function() for _ = 1, 1000 do blake3.digest(block) end end, + 1e6 +) + +local sha256 = require "ccryptolib.sha256" + +profile( + "SHA256 input rate: %g kB/s", + function() sha256.digest(m) end, + #m +) + +profile( + "SHA256 short input rate: %g msg/s", + function() for _ = 1, 1000 do sha256.digest(block) end end, + 1e6 +) + +profile( + "PBKDF2-HMAC-SHA256 rate: %g iter/s", + function() sha256.pbkdf2(block, block, 1000) end, + 1e6 +) + +local chacha20 = require "ccryptolib.chacha20" + +profile( + "ChaCha20 enciphering rate: %g kB/s", + function() chacha20.crypt(block, nonce, m, 20) end, + #m +) + +profile( + "ChaCha8 enciphering rate: %g kB/s", + function() chacha20.crypt(block, nonce, m, 8) end, + #m +) + +local poly1305 = require "ccryptolib.poly1305" + +profile( + "Poly1305 input rate: %g kB/s", + function() poly1305.mac(block, m) end, + #m +) + +local aead = require "ccryptolib.aead" + +profile( + "ChaCha20Poly1305AEAD input rage: %g kB/s", + function() aead.encrypt(block, nonce, m, "", 20) end, + #m +) + +profile( + "ChaCha8Poly1305AEAD input rage: %g kB/s", + function() aead.encrypt(block, nonce, m, "", 8) end, + #m +) + +local x25519 = require "ccryptolib.x25519" +local xpk = x25519.publicKey(block) + +profile( + "X25519 public key: %g op/s", + function() x25519.publicKey(block) end, + 1000 +) + +profile( + "X25519 exchange: %g op/s", + function() x25519.exchange(block, xpk) end, + 1000 +) + +local ed25519 = require "ccryptolib.ed25519" +local epk = ed25519.publicKey(block) +local sigb = ed25519.sign(block, epk, block) +local sigm = ed25519.sign(block, epk, m) + +profile( + "Ed25519 public key: %g op/s", + function() ed25519.publicKey(block) end, + 1000 +) + +profile( + "Ed25519 sign short msg: %g op/s", + function() ed25519.sign(block, epk, block) end, + 1000 +) + +profile( + "Ed25519 sign long msg: %g kB/s", + function() ed25519.sign(block, epk, m) end, + #m +) + +profile( + "Ed25519 verify short msg: %g op/s", + function() ed25519.verify(epk, block, sigb) end, + 1000 +) + +profile( + "Ed25519 verify long msg: %g kB/s", + function() ed25519.verify(epk, m, sigm) end, + #m +)