From 2fb290572aff221086ecadaa5e4a22d6d6f555fc Mon Sep 17 00:00:00 2001 From: adman Date: Mon, 11 May 2026 23:27:14 +0200 Subject: [PATCH] add mutex for thread-safe XORKeyStream in CFB8 --- cmd/strom/print_replay/main.go | 2 ++ crypto/cfb8.go | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/cmd/strom/print_replay/main.go b/cmd/strom/print_replay/main.go index 55d31be..57ce307 100644 --- a/cmd/strom/print_replay/main.go +++ b/cmd/strom/print_replay/main.go @@ -27,6 +27,8 @@ var ( StateFlag = cmd.String("state", "login", "Initial state: login, config, play") ) +// TODO: maybe use the proto replay api + //go:embed failed_packet.go.tmpl var TestSrcF string diff --git a/crypto/cfb8.go b/crypto/cfb8.go index a000997..aef0ad0 100644 --- a/crypto/cfb8.go +++ b/crypto/cfb8.go @@ -28,6 +28,7 @@ package crypto import ( "crypto/cipher" "crypto/subtle" + "sync" "unsafe" ) @@ -37,6 +38,7 @@ type CFB8 struct { ivPos int iv []byte de bool + mutex sync.Mutex } func NewCFB8Decrypt(c cipher.Block, iv []byte) *CFB8 { @@ -59,6 +61,8 @@ func newCFB8(c cipher.Block, iv []byte, de bool) *CFB8 { } func (cf *CFB8) XORKeyStream(dst, src []byte) { + cf.mutex.Lock() + defer cf.mutex.Unlock() if len(src) == 0 { return }