ccryptolib/profile.lua
2023-06-09 13:28:10 -03:00

155 lines
3.1 KiB
Lua

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
)