From 6d9e7ca21637a46e643c88ff8c74e884ae908ceb Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Fri, 11 Apr 2025 15:49:46 -0400 Subject: create util package --- key/generate.go | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ key/keygen.go | 68 ----------------------------------------------------- 2 files changed, 72 insertions(+), 68 deletions(-) create mode 100644 key/generate.go delete mode 100644 key/keygen.go (limited to 'key') diff --git a/key/generate.go b/key/generate.go new file mode 100644 index 0000000..01ae33e --- /dev/null +++ b/key/generate.go @@ -0,0 +1,72 @@ +package key + +import ( + crypto_rand "crypto/rand" + "fmt" + "golang.org/x/crypto/nacl/box" + "os" + + "git.samanthony.xyz/hose/util" +) + +// Generate generates a new public/private keypair. It stores the private key in the +// private key file and the public key in the public key file. If either of the key +// files already exist, they will not be overwritten; instead an error will be returned. +func Generate() error { + util.Logf("generating new keypair...") + + // Create public key file. + pubFile, err := createFile(pubKeyFile, pubKeyFileMode) + if err != nil { + return err + } + defer pubFile.Close() + + // Create private key file. + privFile, err := createFile(privKeyFile, privKeyFileMode) + if err != nil { + pubFile.Close() + _ = os.Remove(pubKeyFile) + return err + } + defer privFile.Close() + + // Generate keypair. + pubkey, privkey, err := box.GenerateKey(crypto_rand.Reader) + if err != nil { + return err + } + + // Write keypair to files. + if _, err := pubFile.Write((*pubkey)[:]); err != nil { + return err + } + if _, err := privFile.Write((*privkey)[:]); err != nil { + return err + } + + return nil +} + +// Generate a keypair if it doesn't already exist. +func generateIfNoExist() error { + pubExists, err := fileExists(pubKeyFile) + if err != nil { + return err + } + privExists, err := fileExists(privKeyFile) + if err != nil { + return err + } + + if pubExists && privExists { + // Keypair already exists. + return nil + } else if pubExists && !privExists { + return fmt.Errorf("found public key file but not private key file") + } else if privExists && !pubExists { + return fmt.Errorf("found private key file but not public key file") + } + // Neither public nor private key file exists; generate new keypair. + return Generate() +} diff --git a/key/keygen.go b/key/keygen.go deleted file mode 100644 index 813df31..0000000 --- a/key/keygen.go +++ /dev/null @@ -1,68 +0,0 @@ -package key - -import ( - crypto_rand "crypto/rand" - "fmt" - "golang.org/x/crypto/nacl/box" - "os" -) - -// Generate generates a new public/private keypair. It stores the private key in the -// private key file and the public key in the public key file. If either of the key -// files already exist, they will not be overwritten; instead an error will be returned. -func Generate() error { - // Create public key file. - pubFile, err := createFile(pubKeyFile, pubKeyFileMode) - if err != nil { - return err - } - defer pubFile.Close() - - // Create private key file. - privFile, err := createFile(privKeyFile, privKeyFileMode) - if err != nil { - pubFile.Close() - _ = os.Remove(pubKeyFile) - return err - } - defer privFile.Close() - - // Generate keypair. - pubkey, privkey, err := box.GenerateKey(crypto_rand.Reader) - if err != nil { - return err - } - - // Write keypair to files. - if _, err := pubFile.Write((*pubkey)[:]); err != nil { - return err - } - if _, err := privFile.Write((*privkey)[:]); err != nil { - return err - } - - return nil -} - -// Generate a keypair if it doesn't already exist. -func generateIfNoExist() error { - pubExists, err := fileExists(pubKeyFile) - if err != nil { - return err - } - privExists, err := fileExists(privKeyFile) - if err != nil { - return err - } - - if pubExists && privExists { - // Keypair already exists. - return nil - } else if pubExists && !privExists { - return fmt.Errorf("found public key file but not private key file") - } else if privExists && !pubExists { - return fmt.Errorf("found private key file but not public key file") - } - // Neither public nor private key file exists; generate new keypair. - return Generate() -} -- cgit v1.2.3