diff options
Diffstat (limited to 'key/siggen.go')
| -rw-r--r-- | key/siggen.go | 47 |
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 +} |