aboutsummaryrefslogtreecommitdiffstats
path: root/dec
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2025-10-10 22:37:41 -0700
committerRose Hogenson <rosehogenson@posteo.net>2025-10-10 22:37:41 -0700
commitcac97aae6184f2f2af5ceeabeae7e2ced3481064 (patch)
tree2364a6528ee4f006014139ac2ad18dd122d0a46d /dec
downloadsym-cac97aae6184f2f2af5ceeabeae7e2ced3481064.tar.zst
Initial commit
Diffstat (limited to 'dec')
-rw-r--r--dec/dec.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/dec/dec.go b/dec/dec.go
new file mode 100644
index 0000000..a35b759
--- /dev/null
+++ b/dec/dec.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+ "os"
+
+ "golang.org/x/term"
+ "roseh.moe/cmd/sym/internal/sym"
+)
+
+var passwordFlag = flag.String("p", "", "use the specified password; if not provided, dec will prompt for a password")
+
+func dec() error {
+ args := flag.Args()
+ if len(args) == 0 && *passwordFlag == "" {
+ return fmt.Errorf("-p is required when reading from stdin")
+ }
+ var password string
+ if *passwordFlag != "" {
+ password = *passwordFlag
+ } else {
+ fmt.Fprint(os.Stderr, "Enter password: ")
+ pw, err := term.ReadPassword(int(os.Stdin.Fd()))
+ fmt.Fprintln(os.Stderr)
+ if err != nil {
+ return err
+ }
+ password = string(pw)
+ }
+ pwCache := make(sym.PasswordCache)
+ if len(args) == 0 {
+ return sym.Decrypt(os.Stdout, os.Stdin, password, pwCache)
+ }
+ for _, fileName := range args {
+ if err := sym.DecryptFile(fileName, password, pwCache); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func main() {
+ flag.Parse()
+ if err := dec(); err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+}