mirror of
https://github.com/rwinkhart/sshyp-labs.git
synced 2026-08-27 20:36:31 -04:00
Add conversion program for converting between versions of RCW
This commit is contained in:
@@ -25,7 +25,7 @@ func main() {
|
||||
break
|
||||
}
|
||||
|
||||
// decrypt all GPG-encrypted entries to the output directory
|
||||
// convert the entries
|
||||
fmt.Print("\nRe-encrypting entries. Please wait; do not force close this process.\n\nGPG may prompt you for a passphrase for decryption.\n\n")
|
||||
var outputDir = global.EntryRoot + "-new"
|
||||
entries, folders := synccommon.WalkEntryDir()
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
# This script generates portable release binaries for the following platforms:
|
||||
# - Linux (x86_64_v1)
|
||||
# - Linux (aarch64)
|
||||
# - Windows (x86_64_v1)
|
||||
# - Windows (aarch64)
|
||||
|
||||
version=0.1.X-0.2.X
|
||||
|
||||
mkdir -p ./1output
|
||||
GOOS=linux CGO_ENABLED=0 GOAMD64=v1 go build -o "./1output/upgradeRCW-$version-linux-x86_64_v1" -ldflags="-s -w" -trimpath .
|
||||
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o "./1output/upgradeRCW-$version-linux-aarch64" -ldflags="-s -w" -trimpath .
|
||||
GOOS=windows CGO_ENABLED=0 GOAMD64=v1 go build -o "./1output/upgradeRCW-$version-windows-x86_64_v1.exe" -ldflags="-s -w" -trimpath .
|
||||
GOOS=windows GOARCH=arm64 CGO_ENABLED=0 go build -o "./1output/upgradeRCW-$version-windows-aarch64.exe" -ldflags="-s -w" -trimpath .
|
||||
@@ -0,0 +1,22 @@
|
||||
module upgradeRCW
|
||||
|
||||
go 1.24.3
|
||||
|
||||
require (
|
||||
github.com/rwinkhart/convertroman v0.2.0 // DECOY TO TRICK GO INTO USING TWO VERSIONS OF RCW
|
||||
github.com/rwinkhart/go-boilerplate v0.0.0-20250509173525-20670ec7bb9c
|
||||
github.com/rwinkhart/libmutton v0.3.2-0.20250520161453-e64da70edb84
|
||||
github.com/rwinkhart/rcw v0.2.0
|
||||
)
|
||||
|
||||
require (
|
||||
golang.org/x/crypto v0.38.0 // indirect
|
||||
golang.org/x/sys v0.33.0 // indirect
|
||||
golang.org/x/term v0.32.0 // indirect
|
||||
)
|
||||
|
||||
replace github.com/rwinkhart/convertroman => github.com/rwinkhart/rcw v0.1.2
|
||||
|
||||
replace golang.org/x/sys => github.com/rwinkhart/sys-freebsd-13-xucred v0.33.0
|
||||
|
||||
replace github.com/Microsoft/go-winio => github.com/rwinkhart/go-winio-easy-pipe-handles v0.0.0-20250407031321-96994a0e8410
|
||||
@@ -0,0 +1,14 @@
|
||||
github.com/rwinkhart/go-boilerplate v0.0.0-20250509173525-20670ec7bb9c h1:RIMnYf1MwsvmAr9E0/cpn7rTh8BWdfsQ2r31ITKJp2A=
|
||||
github.com/rwinkhart/go-boilerplate v0.0.0-20250509173525-20670ec7bb9c/go.mod h1:cnzIF45I0FCOvE4YIB+26pLCUx2kWyY2llKYZruNaRY=
|
||||
github.com/rwinkhart/libmutton v0.3.2-0.20250520161453-e64da70edb84 h1:7WUBDHVGgW5Dd4wm56X8qQpWUNOvh2Y/IQkjBl7atEE=
|
||||
github.com/rwinkhart/libmutton v0.3.2-0.20250520161453-e64da70edb84/go.mod h1:noIP2Ov56fNq2McVhkOj5+VVLOV4E2eie2HbuOhXhXA=
|
||||
github.com/rwinkhart/rcw v0.1.2 h1:JFNRx5Uc0VKZMbur05VbZBhfUtOp2KBjZ6UDeaCRYFI=
|
||||
github.com/rwinkhart/rcw v0.1.2/go.mod h1:LQ2/YJFQlkW+JkgrLpZ51NQP/unIEzPTWsLOpOuKdKU=
|
||||
github.com/rwinkhart/rcw v0.2.0 h1:/rFgJ+20OSThipKAX5KPwW2xbPpgh1zl49THmEkkPis=
|
||||
github.com/rwinkhart/rcw v0.2.0/go.mod h1:LQ2/YJFQlkW+JkgrLpZ51NQP/unIEzPTWsLOpOuKdKU=
|
||||
github.com/rwinkhart/sys-freebsd-13-xucred v0.33.0 h1:W4J4cS0yLMLKuYePFFL2OR8MAYLoHkErJvq9FBBqK70=
|
||||
github.com/rwinkhart/sys-freebsd-13-xucred v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
|
||||
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
|
||||
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
|
||||
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
|
||||
@@ -0,0 +1,73 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
oldwrap "github.com/rwinkhart/convertroman/wrappers"
|
||||
newwrap "github.com/rwinkhart/rcw/wrappers"
|
||||
|
||||
"github.com/rwinkhart/go-boilerplate/back"
|
||||
"github.com/rwinkhart/go-boilerplate/front"
|
||||
"github.com/rwinkhart/libmutton/global"
|
||||
"github.com/rwinkhart/libmutton/synccommon"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// get info from user
|
||||
var oldRCWPassphrase, newRCWPassphrase []byte
|
||||
for {
|
||||
oldRCWPassphrase = front.InputHidden("RCW passphrase:")
|
||||
if !bytes.Equal(oldRCWPassphrase, front.InputHidden("Confirm RCW passphrase:")) {
|
||||
fmt.Println(back.AnsiError + "Passphrases do not match" + back.AnsiReset)
|
||||
continue
|
||||
}
|
||||
break
|
||||
}
|
||||
for {
|
||||
newRCWPassphrase = front.InputHidden("RCW passphrase:")
|
||||
if !bytes.Equal(newRCWPassphrase, front.InputHidden("Confirm RCW passphrase:")) {
|
||||
fmt.Println(back.AnsiError + "Passphrases do not match" + back.AnsiReset)
|
||||
continue
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
// convert the entries
|
||||
fmt.Print("\nRe-encrypting entries. Please wait; do not force close this process.\n\n")
|
||||
var outputDir = global.EntryRoot + "-new"
|
||||
entries, folders := synccommon.WalkEntryDir()
|
||||
for _, folder := range folders {
|
||||
err := os.MkdirAll(outputDir+strings.ReplaceAll(folder, "/", global.PathSeparator), 0700)
|
||||
if err != nil {
|
||||
back.PrintError("Failed to create directory: "+err.Error(), back.ErrorWrite, true)
|
||||
}
|
||||
}
|
||||
for _, entry := range entries {
|
||||
oldEncBytes, err := os.ReadFile(global.TargetLocationFormat(entry))
|
||||
if err != nil {
|
||||
back.PrintError("Failed to read file: "+err.Error(), back.ErrorRead, true)
|
||||
}
|
||||
decBytes, err := oldwrap.Decrypt(oldEncBytes, oldRCWPassphrase)
|
||||
if err != nil {
|
||||
back.PrintError("Failed to decrypt file: "+err.Error(), back.ErrorWrite, true)
|
||||
}
|
||||
newEncBytes := newwrap.Encrypt(decBytes, newRCWPassphrase)
|
||||
err = os.WriteFile(outputDir+strings.ReplaceAll(entry, "/", global.PathSeparator), newEncBytes, 0600)
|
||||
if err != nil {
|
||||
back.PrintError("Failed to write to file: "+err.Error(), back.ErrorWrite, true)
|
||||
}
|
||||
}
|
||||
|
||||
// swap the new directory with the old one
|
||||
err := os.Rename(global.EntryRoot, global.EntryRoot+"-old")
|
||||
if err != nil {
|
||||
back.PrintError("Failed to rename old directory: "+err.Error(), back.ErrorWrite, true)
|
||||
}
|
||||
err = os.Rename(outputDir, global.EntryRoot)
|
||||
if err != nil {
|
||||
back.PrintError("Failed to rename new directory: "+err.Error(), back.ErrorWrite, true)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user