]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/cmd/nncp-cfgenc/main.go
Raise copyright years
[nncp.git] / src / cmd / nncp-cfgenc / main.go
index 7adc6fab94f9f1c350e54e7192e0d9fc0a048a04..cce42dac950e890b7789c4521840422cd397fdfe 100644 (file)
@@ -1,6 +1,6 @@
 /*
 NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2019 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2022 Sergey Matveev <stargrave@stargrave.org>
 
 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,10 +27,10 @@ import (
        "log"
        "os"
 
-       "github.com/davecgh/go-xdr/xdr2"
-       "go.cypherpunks.ru/nncp/v5"
+       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() {
@@ -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)
 }