summaryrefslogtreecommitdiffstats
path: root/internal/cryptoutil
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2025-09-30 18:35:44 -0700
committerRose Hogenson <rosehogenson@posteo.net>2025-09-30 18:48:10 -0700
commit533ae6b4086f314c5a5949ffff3a179e35e88e75 (patch)
tree0784d367666e35dcccec07ce16a92899af9cf728 /internal/cryptoutil
parentMake the oae2 implementation a bit easier to read (diff)
downloadroseh.moe-533ae6b4086f314c5a5949ffff3a179e35e88e75.tar.zst
Add a benchmark
Diffstat (limited to 'internal/cryptoutil')
-rw-r--r--internal/cryptoutil/cryptoutil_test.go95
1 files 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)
+ }
+ }
+}