X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcmd%2Fnncp-cfgenc%2Fmain.go;h=465963d7fefc2e2c47ae6eeb88b369fbab22ae6a;hb=b47dbfe6687569650fa544a4ecf3e4ea388390cb;hp=a77eaed1e84c44aa0b4aaf362b7e3c2d22033695;hpb=c8b26fe06596d26bdb14c5be85760fb3ddb197b3;p=nncp.git diff --git a/src/cmd/nncp-cfgenc/main.go b/src/cmd/nncp-cfgenc/main.go index a77eaed..465963d 100644 --- a/src/cmd/nncp-cfgenc/main.go +++ b/src/cmd/nncp-cfgenc/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2019 Sergey Matveev +Copyright (C) 2016-2021 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,18 +27,18 @@ import ( "log" "os" - "github.com/davecgh/go-xdr/xdr2" - "go.cypherpunks.ru/nncp/v4" + xdr "github.com/davecgh/go-xdr/xdr2" + "go.cypherpunks.ru/nncp/v8" "golang.org/x/crypto/blake2b" - "golang.org/x/crypto/ssh/terminal" + "golang.org/x/term" ) func usage() { fmt.Fprintf(os.Stderr, nncp.UsageHeader()) fmt.Fprintf(os.Stderr, "nncp-cfgenc -- encrypt/decrypt configuration file\n\n") - fmt.Fprintf(os.Stderr, "Usage: %s [options] cfg.yaml > cfg.yaml.eblob\n", os.Args[0]) - fmt.Fprintf(os.Stderr, " %s [options] -d cfg.yaml.eblob > cfg.yaml\n", os.Args[0]) - fmt.Fprintf(os.Stderr, " %s [options] -dump cfg.yaml.eblob\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "Usage: %s [options] cfg.hjson > cfg.hjson.eblob\n", os.Args[0]) + fmt.Fprintf(os.Stderr, " %s [options] -d cfg.hjson.eblob > cfg.hjson\n", os.Args[0]) + fmt.Fprintf(os.Stderr, " %s [options] -dump cfg.hjson.eblob\n", os.Args[0]) fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() } @@ -53,6 +53,7 @@ func main() { version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") ) + log.SetFlags(log.Lshortfile) flag.Usage = usage flag.Parse() if *warranty { @@ -78,7 +79,13 @@ func main() { if _, err := xdr.Unmarshal(bytes.NewReader(data), &eblob); err != nil { log.Fatalln(err) } - if eblob.Magic != nncp.MagicNNCPBv3 { + switch eblob.Magic { + case nncp.MagicNNCPBv1.B: + log.Fatalln(nncp.MagicNNCPBv1.TooOld()) + case nncp.MagicNNCPBv2.B: + log.Fatalln(nncp.MagicNNCPBv2.TooOld()) + case nncp.MagicNNCPBv3.B: + default: log.Fatalln(errors.New("Unknown eblob type")) } fmt.Println("Strengthening function: Balloon with BLAKE2b-256") @@ -86,40 +93,34 @@ func main() { fmt.Printf("Number of rounds: %d\n", eblob.TCost) fmt.Printf("Number of parallel jobs: %d\n", eblob.PCost) fmt.Printf("Blob size: %d\n", len(eblob.Blob)) - os.Exit(0) + return + } + + os.Stderr.WriteString("Passphrase:") + password1, err := term.ReadPassword(0) + if err != nil { + log.Fatalln(err) } if *decrypt { - os.Stderr.WriteString("Passphrase:") - password, err := terminal.ReadPassword(0) - if err != nil { - log.Fatalln(err) - } - os.Stderr.WriteString("\n") - cfgRaw, err := nncp.DeEBlob(data, password) + cfgRaw, err := nncp.DeEBlob(data, password1) if err != nil { log.Fatalln(err) } os.Stdout.Write(cfgRaw) - } else { - os.Stderr.WriteString("Passphrase:") - password1, err := terminal.ReadPassword(0) - if err != nil { - log.Fatalln(err) - } - os.Stderr.WriteString("\n") - os.Stderr.WriteString("Repeat passphrase:") - password2, err := terminal.ReadPassword(0) - if err != nil { - log.Fatalln(err) - } - os.Stderr.WriteString("\n") - if bytes.Compare(password1, password2) != 0 { - log.Fatalln(errors.New("Passphrases do not match")) - } - eblob, err := nncp.NewEBlob(*sOpt, *tOpt, *pOpt, password1, data) - if err != nil { - log.Fatalln(err) - } - os.Stdout.Write(eblob) + return + } + os.Stderr.WriteString("\nRepeat passphrase:") + password2, err := term.ReadPassword(0) + if err != nil { + log.Fatalln(err) + } + os.Stderr.WriteString("\n") + if bytes.Compare(password1, password2) != 0 { + log.Fatalln(errors.New("Passphrases do not match")) + } + eblob, err := nncp.NewEBlob(*sOpt, *tOpt, *pOpt, password1, data) + if err != nil { + log.Fatalln(err) } + os.Stdout.Write(eblob) }