From b95e1aafe302d2125dc600d9e6ae0087e7c12ef6 Mon Sep 17 00:00:00 2001 From: riccardom Date: Tue, 21 Jul 2026 12:19:05 +0200 Subject: [PATCH] Bench key material boilerplate time/allocs CGO_ENABLED=1 go test ./client/internal/pqkem/ -run '^$' -bench . -benchmem 2>&1 | grep -E "Benchmark|ns/op|PASS|ok" | head -20 BenchmarkX25519Keygen-14 33795 34966 ns/op 224 B/op 5 allocs/op BenchmarkX25519ECDH-14 33855 33973 ns/op 32 B/op 1 allocs/op BenchmarkMLKEMKeygen-14 21817 67778 ns/op 8200 B/op 2 allocs/op BenchmarkMLKEMEncaps-14 29918 43235 ns/op 1216 B/op 2 allocs/op BenchmarkMLKEMDecaps-14 26048 56291 ns/op 64 B/op 2 allocs/op PASS ok github.com/netbirdio/netbird/client/internal/pqkem 9.751s Shell cwd was reset to /home/riccardo/Desktop/Personal/netbirdio/netbird --- client/internal/pqkem/bench_test.go | 59 +++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 client/internal/pqkem/bench_test.go diff --git a/client/internal/pqkem/bench_test.go b/client/internal/pqkem/bench_test.go new file mode 100644 index 000000000..eabcc3a0a --- /dev/null +++ b/client/internal/pqkem/bench_test.go @@ -0,0 +1,59 @@ +package pqkem + +import ( + "crypto/ecdh" + "crypto/mlkem" + "crypto/rand" + "testing" +) + +func BenchmarkX25519Keygen(b *testing.B) { + c := ecdh.X25519() + b.ResetTimer() + for i := 0; i < b.N; i++ { + if _, err := c.GenerateKey(rand.Reader); err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkX25519ECDH(b *testing.B) { + c := ecdh.X25519() + a, _ := c.GenerateKey(rand.Reader) + p, _ := c.GenerateKey(rand.Reader) + pub := p.PublicKey() + b.ResetTimer() + for i := 0; i < b.N; i++ { + if _, err := a.ECDH(pub); err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkMLKEMKeygen(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := mlkem.GenerateKey768(); err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkMLKEMEncaps(b *testing.B) { + dk, _ := mlkem.GenerateKey768() + ek := dk.EncapsulationKey() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, _ = ek.Encapsulate() + } +} + +func BenchmarkMLKEMDecaps(b *testing.B) { + dk, _ := mlkem.GenerateKey768() + _, ct := dk.EncapsulationKey().Encapsulate() + b.ResetTimer() + for i := 0; i < b.N; i++ { + if _, err := dk.Decapsulate(ct); err != nil { + b.Fatal(err) + } + } +}