Add a profiling program
This commit is contained in:
parent
4106df6da2
commit
45a1238a2e
154
profile.lua
Normal file
154
profile.lua
Normal file
|
@ -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
|
||||
)
|
Loading…
Reference in a new issue