From fd0a23bf6caf5c8dd14ea756bcc9076d0b099085 Mon Sep 17 00:00:00 2001 From: Senis John Date: Sat, 14 Oct 2023 21:46:00 +0800 Subject: [PATCH] "Add option to input private key for x25519 command" Added a command line flag to allow the user to provide an input for the private key while utilizing the x25519 command. The function `x25519` was also modified to account for the possibility of a user-inputted private key. If no private key is provided, random bytes will be generated for the private key as before. This feature provides flexibility for the user in key management. --- cmd/x25519.go | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) 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: