aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2025-04-11 16:21:47 -0400
committerSam Anthony <sam@samanthony.xyz>2025-04-11 16:21:47 -0400
commit9f31d05492b560292e0f41eb129ddbe7b8ca8f3c (patch)
treeaae9ffccc6f33974af1014f7f4fe78a345297c83
parent67f29298ca79da839f4fdfe9ffad8d39a703b124 (diff)
downloadhose-9f31d05492b560292e0f41eb129ddbe7b8ca8f3c.zip
hex-encode keys
-rw-r--r--key/generate.go9
-rw-r--r--key/key.go19
2 files changed, 23 insertions, 5 deletions
diff --git a/key/generate.go b/key/generate.go
index 01ae33e..32055aa 100644
--- a/key/generate.go
+++ b/key/generate.go
@@ -2,6 +2,7 @@ package key
import (
crypto_rand "crypto/rand"
+ "encoding/hex"
"fmt"
"golang.org/x/crypto/nacl/box"
"os"
@@ -38,10 +39,14 @@ func Generate() error {
}
// Write keypair to files.
- if _, err := pubFile.Write((*pubkey)[:]); err != nil {
+ buf := make([]byte, hex.EncodedLen(len(*pubkey)))
+ hex.Encode(buf, (*pubkey)[:])
+ if _, err := pubFile.Write(buf); err != nil {
return err
}
- if _, err := privFile.Write((*privkey)[:]); err != nil {
+ buf = make([]byte, hex.EncodedLen(len(*privkey)))
+ hex.Encode(buf, (*privkey)[:])
+ if _, err := privFile.Write(buf); err != nil {
return err
}
diff --git a/key/key.go b/key/key.go
index a427769..2aac124 100644
--- a/key/key.go
+++ b/key/key.go
@@ -1,6 +1,8 @@
package key
import (
+ "encoding/hex"
+ "fmt"
"io"
"os"
)
@@ -21,9 +23,20 @@ func LoadPublicKey() ([32]byte, error) {
defer f.Close()
// Read key.
- var pubkey [32]byte
- if _, err := io.ReadFull(f, pubkey[:]); err != nil {
+ buf, err := io.ReadAll(f)
+ if err != nil {
+ return [32]byte{}, err
+ }
+
+ // Decode.
+ var key [32]byte
+ if hex.DecodedLen(len(buf)) != len(key) {
+ return [32]byte{}, fmt.Errorf("malformed key: expected %d bytes; got %d",
+ len(key), hex.DecodedLen(len(buf)))
+ }
+ if _, err := hex.Decode(key[:], buf); err != nil {
return [32]byte{}, err
}
- return pubkey, nil
+
+ return key, nil
}