From 533ae6b4086f314c5a5949ffff3a179e35e88e75 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Tue, 30 Sep 2025 18:35:44 -0700 Subject: Add a benchmark --- internal/cryptoutil/cryptoutil_test.go | 95 ++++++++++++++++++++++++++++------ 1 file changed, 79 insertions(+), 16 deletions(-) diff --git a/internal/cryptoutil/cryptoutil_test.go b/internal/cryptoutil/cryptoutil_test.go index dc9074d..1670eff 100644 --- a/internal/cryptoutil/cryptoutil_test.go +++ b/internal/cryptoutil/cryptoutil_test.go @@ -7,7 +7,7 @@ import ( "testing" ) -func mustHex(t *testing.T, s string) []byte { +func mustHex(t testing.TB, s string) []byte { t.Helper() bytes, err := hex.DecodeString(s) if err != nil { @@ -43,21 +43,42 @@ func TestSignature(t *testing.T) { func TestEncrypt(t *testing.T) { key := EncryptionKey(mustHex(t, "b6de26860e0a39aa134732e58055c06ba028675453f73a6912bc932e58d5743d0e423217f06487d3e96a59980301fcc97dfcc4c6b19765f2947de3c33ab7ef9e")) - msg := []byte("test message") - encryptedMsg := new(bytes.Buffer) - w := key.NewWriter(encryptedMsg, nil) - if _, err := w.Write(msg); err != nil { - t.Fatalf("EncryptingWriter.Write(%q) failed: %s", msg, err) - } - if err := w.Close(); err != nil { - t.Fatalf("EncryptingWriter.Close() failed: %s", err) - } - got, err := io.ReadAll(key.NewReader(bytes.NewReader(encryptedMsg.Bytes()), nil)) - if err != nil { - t.Fatalf("DecryptingReader.Read(%x) failed: %s", encryptedMsg, err) - } - if !bytes.Equal(got, msg) { - t.Errorf("DecryptingReader.Read(%x) = %x, want %x", encryptedMsg, got, msg) + for _, tc := range []struct { + desc string + msg []byte + }{{ + desc: "empty", + msg: nil, + }, { + desc: "short", + msg: []byte("test message"), + }, { + desc: "long", + msg: func() []byte { + msg := make([]byte, 1024*1024) + for i := range msg { + msg[i] = byte(i) + } + return msg + }(), + }} { + t.Run(tc.desc, func(t *testing.T) { + encryptedMsg := new(bytes.Buffer) + w := key.NewWriter(encryptedMsg, nil) + if _, err := w.Write(tc.msg); err != nil { + t.Fatalf("EncryptingWriter.Write(%q) failed: %s", tc.msg, err) + } + if err := w.Close(); err != nil { + t.Fatalf("EncryptingWriter.Close() failed: %s", err) + } + got, err := io.ReadAll(key.NewReader(bytes.NewReader(encryptedMsg.Bytes()), nil)) + if err != nil { + t.Fatalf("DecryptingReader.Read(%x) failed: %s", encryptedMsg, err) + } + if !bytes.Equal(got, tc.msg) { + t.Errorf("DecryptingReader.Read(%x) = %x, want %x", encryptedMsg, got, tc.msg) + } + }) } } @@ -92,3 +113,45 @@ func TestDeriveKey(t *testing.T) { t.Errorf("DecryptingReader.Read(%x) = %x, want %x", encryptedMsg, got, msg) } } + +func BenchmarkEncrypt(b *testing.B) { + key := EncryptionKey(mustHex(b, "b6de26860e0a39aa134732e58055c06ba028675453f73a6912bc932e58d5743d0e423217f06487d3e96a59980301fcc97dfcc4c6b19765f2947de3c33ab7ef9e")) + msg := make([]byte, 1024*1024) + for i := range msg { + msg[i] = byte(i) + } + encryptedMsg := bytes.NewBuffer(make([]byte, 0, 35+len(msg)+16*(len(msg)+segmentSize-1)/segmentSize /* ?? */)) + for b.Loop() { + w := key.NewWriter(encryptedMsg, nil) + if _, err := w.Write(msg); err != nil { + b.Fatal(err) + } + if err := w.Close(); err != nil { + b.Fatal(err) + } + encryptedMsg.Reset() + } +} + +func BenchmarkDecrypt(b *testing.B) { + key := EncryptionKey(mustHex(b, "b6de26860e0a39aa134732e58055c06ba028675453f73a6912bc932e58d5743d0e423217f06487d3e96a59980301fcc97dfcc4c6b19765f2947de3c33ab7ef9e")) + msg := make([]byte, 1024*1024) + for i := range msg { + msg[i] = byte(i) + } + encryptedMsg := new(bytes.Buffer) + w := key.NewWriter(encryptedMsg, nil) + if _, err := w.Write(msg); err != nil { + b.Fatal(err) + } + if err := w.Close(); err != nil { + b.Fatal(err) + } + decryptedMsg := make([]byte, len(msg)) + for b.Loop() { + r := key.NewReader(bytes.NewReader(encryptedMsg.Bytes()), nil) + if _, err := io.ReadFull(r, decryptedMsg); err != nil { + b.Fatal(err) + } + } +} -- cgit v1.3.1