aboutsummaryrefslogtreecommitdiffstats
path: root/key/siggen.go
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2025-04-16 16:04:26 -0400
committerSam Anthony <sam@samanthony.xyz>2025-04-16 16:04:26 -0400
commitda12ad5b7b725c44aa3ef56163953cb9c57b7c04 (patch)
treef3a8912536899c683a35fb33a297f8d90070d449 /key/siggen.go
parentb86e733f6bfeeb9b7fcf7616be61bcaf42684659 (diff)
downloadhose-da12ad5b7b725c44aa3ef56163953cb9c57b7c04.zip
generate sign/verify keypair
Diffstat (limited to 'key/siggen.go')
-rw-r--r--key/siggen.go47
1 files changed, 47 insertions, 0 deletions
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
+}