From fb83d29a23e01ef979b6f0e336f512169815cd86 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Thu, 8 May 2025 19:42:42 -0400 Subject: [PATCH] Do not wait for RCWD socket file creation --- core/rcw.go | 36 +++++++++++++++++++++--------------- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/core/rcw.go b/core/rcw.go index bf083c2..6b65ad3 100644 --- a/core/rcw.go +++ b/core/rcw.go @@ -5,7 +5,6 @@ import ( "os" "os/exec" "strings" - "time" "github.com/rwinkhart/rcw/daemon" "github.com/rwinkhart/rcw/wrappers" @@ -29,21 +28,34 @@ func DecryptFileToSlice(targetLocation string) []string { } // decrypt data using RCW daemon - launchRCWDProcess() - return strings.Split(string(daemon.GetDec(encBytes)), "\n") + passphrase := launchRCWDProcess() + if passphrase == nil { + // if daemon is already running, use it to decrypt the data + return strings.Split(string(daemon.GetDec(encBytes)), "\n") + } + // if the daemon is not already running, use wrappers.Decrypt + // directly to avoid waiting for socket file creation + decBytes, err := wrappers.Decrypt(encBytes, passphrase) + return strings.Split(string(decBytes), "\n") } // EncryptBytes encrypts a byte slice using RCW and returns the encrypted data. func EncryptBytes(decBytes []byte) []byte { - launchRCWDProcess() - return daemon.GetEnc(decBytes) + passphrase := launchRCWDProcess() + if passphrase == nil { + // if daemon is already running, use it to encrypt the data + return daemon.GetEnc(decBytes) + } + // if the daemon is not already running, use wrappers.Encrypt + // directly to avoid waiting for socket file creation + return wrappers.Encrypt(decBytes, passphrase) } // launchRCWDProcess launches an RCW daemon to cache a passphrase. -// It returns immediately if the daemon appears to be already running. -func launchRCWDProcess() { +// If the daemon is not already running, it returns the passphrase (otherwise returns nil). +func launchRCWDProcess() []byte { if daemon.IsOpen() { - return + return nil } var passphrase []byte for { @@ -58,11 +70,5 @@ func launchRCWDProcess() { writeToStdin(cmd, string(passphrase)) cmd.Start() - // block until socket file is created - for { - if daemon.IsOpen() { - break - } - time.Sleep(100 * time.Millisecond) - } + return passphrase } diff --git a/go.mod b/go.mod index c69ff53..5ccaa7a 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/fortis/go-steam-totp v0.0.0-20171114202746-18e928674727 github.com/pkg/sftp v1.13.9 github.com/pquerna/otp v1.4.1-0.20231130234153-3357de7c0481 - github.com/rwinkhart/rcw v0.0.0-20250508202611-f447c8a28b43 + github.com/rwinkhart/rcw v0.0.0-20250508234041-b49d9f1eea42 golang.design/x/clipboard v0.7.0 // only for Android builds golang.org/x/crypto v0.38.0 gopkg.in/ini.v1 v1.67.0 diff --git a/go.sum b/go.sum index 91910f5..66f931d 100644 --- a/go.sum +++ b/go.sum @@ -19,8 +19,8 @@ github.com/rwinkhart/go-winio-easy-pipe-handles v0.0.0-20250407031321-96994a0e84 github.com/rwinkhart/go-winio-easy-pipe-handles v0.0.0-20250407031321-96994a0e8410/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/rwinkhart/peercred-mini v0.0.0-20250407033241-c09add2eceea h1:VE2ti/AE4Y3kgnyK+J5c5hpddE+dKHpsFch3K2R6puQ= github.com/rwinkhart/peercred-mini v0.0.0-20250407033241-c09add2eceea/go.mod h1:t+YkvAdnTKTrg4d469tw3K+GCUzX/Bja4h8yKjSIsGs= -github.com/rwinkhart/rcw v0.0.0-20250508202611-f447c8a28b43 h1:TFHU8EkCP0AxAExfA/k5TLfFt7Nja2AmPA1DdVzgRX8= -github.com/rwinkhart/rcw v0.0.0-20250508202611-f447c8a28b43/go.mod h1:6/TBegxRkK+FbGEmcxqDs4entuCX45cqpYOYKUv2MI0= +github.com/rwinkhart/rcw v0.0.0-20250508234041-b49d9f1eea42 h1:/vsBCwHP22cmqrtjsRB1OcPcb+sckktdeFlHKmhzD54= +github.com/rwinkhart/rcw v0.0.0-20250508234041-b49d9f1eea42/go.mod h1:6/TBegxRkK+FbGEmcxqDs4entuCX45cqpYOYKUv2MI0= github.com/rwinkhart/sys-freebsd-13-xucred v0.32.0 h1:KRbqimv9Eexf3VB2FrRAQ4v2fGGu7gt3ayMgdT0FNao= github.com/rwinkhart/sys-freebsd-13-xucred v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=