diff --git a/cmd/x25519.go b/cmd/x25519.go index fb121e8..43febe5 100644 --- a/cmd/x25519.go +++ b/cmd/x25519.go @@ -9,8 +9,9 @@ import ( "golang.org/x/crypto/curve25519" ) -func init() { - rootCmd.AddCommand(&cobra.Command{ +var ( + priKey string + x25519Cmd = &cobra.Command{ Use: "x25519", Short: "Generate key pair for x25519 key exchange", Run: func(cmd *cobra.Command, args []string) { @@ -18,14 +19,27 @@ func init() { fmt.Println(err) } }, - }) + } +) + +func init() { + x25519Cmd.PersistentFlags().StringVarP(&priKey, "input", "i", "", "Input private key (base64.RawURLEncoding)") + rootCmd.AddCommand(x25519Cmd) } func x25519() error { - var publicKey []byte privateKey := make([]byte, curve25519.ScalarSize) - if _, err := rand.Read(privateKey); err != nil { - return err + + if priKey == "" { + if _, err := rand.Read(privateKey); err != nil { + return err + } + } else { + p, err := base64.RawURLEncoding.DecodeString(priKey) + if err != nil { + return err + } + privateKey = p } // Modify random bytes using algorithm described at: