v/vlib/x/crypto/ascon/bench/aead.v

75 lines
2.8 KiB
V

// This benchmark is for Ascon-AEAD128 in `x.crypto.ascon` compared to
// already stocked `x.crypto.cacha20poly1305 for AEAD functionalities.
//
// Here is output in my tests, first item was `x.crypto.ascon` and the later
// for `x.crypto.chacha20poly1305` on encryption or decryption part.
//
// Encryption..
// -----------
// Iterations: 10000 Total Duration: 26.008ms ns/op: 2600 B/op: 16 allocs/op: 17
// Iterations: 10000 Total Duration: 158.865ms ns/op: 15886 B/op: 16 allocs/op: 16
//
// Decryption..
// -----------
// Iterations: 10000 Total Duration: 29.091ms ns/op: 2909 B/op: 6 allocs/op: 8
// Iterations: 10000 Total Duration: 158.373ms ns/op: 15837 B/op: 8 allocs/op: 12
//
import encoding.hex
import x.benchmark
import x.crypto.ascon
import x.crypto.chacha20poly1305
// randomly generated key and nonce, 16-bytes of ascon key and 32-bytes of chacha20poly1305 key.
const key_ascon = hex.decode('7857bfb462c654d1d1b02971be021235')!
const key_cpoly = hex.decode('9d9603f4fc460e273b80795ea50eab5873c04f589226c7d591b5336feb32fcba')!
// 16-bytes ascon-nonce
const ascon_nonce = hex.decode('8b521028fb54591472d8d8ee14430835')!
// 12-bytes chacha20poly1305 nonce
const cpoly_nonce = hex.decode('9a3c83e4236ea9a2c4e482da')!
const ad = 'Ascon-AEAD128 additional data'.bytes()
const msg = 'Ascon-AEAD128 benchmarking message'.bytes()
// expected ciphertext for aead128 := 4b21a18cbca65b11aaf73dc74241c89bfcec96a4c8973ae696a938e0a591e846c4eb7b2906664f2318c0fd6ec1c56424aa9b
const ciphertext_aead128 = hex.decode('4b21a18cbca65b11aaf73dc74241c89bfcec96a4c8973ae696a938e0a591e846c4eb7b2906664f2318c0fd6ec1c56424aa9b')!
fn bench_ascon_aead128_encrypt() ! {
_ := ascon.encrypt(key_ascon, ascon_nonce, ad, msg)!
}
fn bench_ascon_aead128_decrypt() ! {
_ := ascon.decrypt(key_ascon, ascon_nonce, ad, ciphertext_aead128)!
}
// expected ciphertext for chacha20poly1305
const ciphertext_chachapoly1305 = hex.decode('67dea3c65f0f326bcf587f024140a85d9535790d9b16129210a2289eda43bb9b62746450026fc1baf466bcb8a181843cd424')!
fn bench_chacha20poly1305_encrypt() ! {
_ := chacha20poly1305.encrypt(msg, key_cpoly, cpoly_nonce, ad)!
}
fn bench_chacha20poly1305_decrypt() ! {
_ := chacha20poly1305.decrypt(ciphertext_chachapoly1305, key_cpoly, cpoly_nonce, ad)!
}
fn main() {
cf := benchmark.BenchmarkDefaults{
n: 10000
}
println('Encryption..')
println('-----------')
mut b0 := benchmark.setup(bench_ascon_aead128_encrypt, cf)!
b0.run()
mut b1 := benchmark.setup(bench_chacha20poly1305_encrypt, cf)!
b1.run()
println('')
println('Decryption..')
println('-----------')
mut b2 := benchmark.setup(bench_ascon_aead128_decrypt, cf)!
b2.run()
mut b3 := benchmark.setup(bench_chacha20poly1305_decrypt, cf)!
b3.run()
}