diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-04-16 16:04:26 -0400 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-04-16 16:04:26 -0400 |
| commit | da12ad5b7b725c44aa3ef56163953cb9c57b7c04 (patch) | |
| tree | f3a8912536899c683a35fb33a297f8d90070d449 | |
| parent | b86e733f6bfeeb9b7fcf7616be61bcaf42684659 (diff) | |
| download | hose-da12ad5b7b725c44aa3ef56163953cb9c57b7c04.zip | |
generate sign/verify keypair
| -rw-r--r-- | key/boxgen.go | 4 | ||||
| -rw-r--r-- | key/file.go | 4 | ||||
| -rw-r--r-- | key/siggen.go | 47 |
3 files changed, 51 insertions, 4 deletions
diff --git a/key/boxgen.go b/key/boxgen.go index bb4a61e..06ff360 100644 --- a/key/boxgen.go +++ b/key/boxgen.go @@ -18,14 +18,14 @@ func generateBoxKeypair() error { util.Logf("generating new encryption/decryption keypair...") // Create public key file. - pubFile, err := createFile(boxPubKeyFile, pubFileMode) + pubFile, err := createFileIfNotExist(boxPubKeyFile, pubFileMode) if err != nil { return err } defer pubFile.Close() // Create private key file. - privFile, err := createFile(boxPrivKeyFile, privFileMode) + privFile, err := createFileIfNotExist(boxPrivKeyFile, privFileMode) if err != nil { pubFile.Close() _ = os.Remove(boxPubKeyFile) diff --git a/key/file.go b/key/file.go index 59039ba..cdc32cd 100644 --- a/key/file.go +++ b/key/file.go @@ -26,9 +26,9 @@ var ( privFileMode os.FileMode = 0600 ) -// createFile creates a file with the specified permissions and returns it for writing. +// createFileIfNotExist creates a file with the specified permissions and returns it for writing. // It does not truncate an existing file. If the file already exists, an error is returned. -func createFile(name string, mode os.FileMode) (*os.File, error) { +func createFileIfNotExist(name string, mode os.FileMode) (*os.File, error) { exists, err := fileExists(name) if err != nil { return nil, err // unexpected error. diff --git a/key/siggen.go b/key/siggen.go new file mode 100644 index 0000000..84d26fb --- /dev/null +++ b/key/siggen.go @@ -0,0 +1,47 @@ +package key + +import ( + crypto_rand "crypto/rand" + "encoding/hex" + "golang.org/x/crypto/nacl/sign" + + "git.samanthony.xyz/hose/util" +) + +func generateSigKeypair() error { + util.Logf("generating new sign/verify keypair...") + + // Create public key file. + pubFile, err := createFileIfNotExist(sigPubKeyFile, pubFileMode) + if err != nil { + return err + } + defer pubFile.Close() + + // Create private key file. + privFile, err := createFileIfNotExist(sigPrivKeyFile, privFileMode) + if err != nil { + return err + } + defer privFile.Close() + + // Generate keypair. + pubkey, privkey, err := sign.GenerateKey(crypto_rand.Reader) + if err != nil { + return err + } + + // Write keypair to files. + buf := make([]byte, hex.EncodedLen(len(*pubkey))) + hex.Encode(buf, (*pubkey)[:]) + if _, err := pubFile.Write(buf); err != nil { + return err + } + buf = make([]byte, hex.EncodedLen(len(*privkey))) + hex.Encode(buf, (*privkey)[:]) + if _, err := privFile.Write(buf); err != nil { + return err + } + + return nil +} |