diff options
| -rw-r--r-- | key/generate.go | 9 | ||||
| -rw-r--r-- | key/key.go | 19 |
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 } @@ -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 } |