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:
@@ -1 +1,4 @@
|
|||||||
/extra/conversion-scripts/gpgToRCW/1output
|
/extra/conversion-scripts/gpgToRCW/1output
|
||||||
|
/extra/conversion-scripts/gpgToRCW/gpgToRCW
|
||||||
|
/extra/conversion-scripts/upgradeRCW/1output
|
||||||
|
/extra/conversion-scripts/upgradeRCW/upgradeRCW
|
||||||
@@ -25,7 +25,7 @@ func main() {
|
|||||||
break
|
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")
|
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"
|
var outputDir = global.EntryRoot + "-new"
|
||||||
entries, folders := synccommon.WalkEntryDir()
|
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