aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hosts/hosts.go25
-rw-r--r--key/box.go5
-rw-r--r--key/sig.go4
3 files changed, 16 insertions, 18 deletions
diff --git a/hosts/hosts.go b/hosts/hosts.go
index 3dc3f33..0412e4a 100644
--- a/hosts/hosts.go
+++ b/hosts/hosts.go
@@ -2,7 +2,7 @@ package hosts
import (
"bufio"
- "encoding/hex"
+ "bytes"
"errors"
"fmt"
"github.com/adrg/xdg"
@@ -10,7 +10,6 @@ import (
"os"
"path/filepath"
"slices"
- "strings"
"git.samanthony.xyz/hose/key"
"git.samanthony.xyz/hose/util"
@@ -57,7 +56,7 @@ func Load() ([]Host, error) {
scanner := bufio.NewScanner(f)
for line := 1; scanner.Scan(); line++ {
- host, err := parseHost(scanner.Text())
+ host, err := parseHost(scanner.Bytes())
if err != nil {
return hosts, fmt.Errorf("error parsing known hosts file: %s:%d: %v", knownHostsFile, line, err)
}
@@ -71,30 +70,24 @@ func Load() ([]Host, error) {
}
// parseHost parses a line of the known hosts file.
-func parseHost(s string) (Host, error) {
- fields := strings.Fields(s)
+func parseHost(b []byte) (Host, error) {
+ fields := bytes.Fields(b)
if len(fields) != 3 {
return Host{}, fmt.Errorf("expected 3 fields; got %d", len(fields))
}
- addr, err := netip.ParseAddr(fields[0])
+ addr, err := netip.ParseAddr(string(fields[0]))
if err != nil {
return Host{}, err
}
- var boxPubKey key.BoxPublicKey
- if hex.DecodedLen(len(fields[1])) != len(boxPubKey) {
- return Host{}, fmt.Errorf("malformed box public key: %s", fields[1])
- }
- if _, err := hex.Decode(boxPubKey[:], []byte(fields[1])); err != nil {
+ boxPubKey, err := key.DecodeBoxPublicKey(fields[1])
+ if err != nil {
return Host{}, err
}
- var sigPubKey key.SigPublicKey
- if hex.DecodedLen(len(fields[2])) != len(sigPubKey) {
- return Host{}, fmt.Errorf("malformed signature public key: %s", fields[2])
- }
- if _, err := hex.Decode(sigPubKey[:], []byte(fields[2])); err != nil {
+ sigPubKey, err := key.DecodeSigPublicKey(fields[2])
+ if err != nil {
return Host{}, err
}
diff --git a/key/box.go b/key/box.go
index 38997eb..984447f 100644
--- a/key/box.go
+++ b/key/box.go
@@ -67,6 +67,11 @@ func (bpk1 BoxPublicKey) Compare(bpk2 BoxPublicKey) int {
return bytes.Compare(bpk1[:], bpk2[:])
}
+func DecodeBoxPublicKey(buf []byte) (BoxPublicKey, error) {
+ key, err := decodeBoxKey(buf)
+ return BoxPublicKey(key), err
+}
+
func decodeBoxKey(buf []byte) ([32]byte, error) {
var key [32]byte
if hex.DecodedLen(len(buf)) != len(key) {
diff --git a/key/sig.go b/key/sig.go
index 6be68f9..1a33468 100644
--- a/key/sig.go
+++ b/key/sig.go
@@ -37,14 +37,14 @@ func LoadSigPublicKey() (SigPublicKey, error) {
}
// Decode key.
- return decodeSigPublicKey(buf)
+ return DecodeSigPublicKey(buf)
}
func (spk1 SigPublicKey) Compare(spk2 SigPublicKey) int {
return bytes.Compare(spk1[:], spk2[:])
}
-func decodeSigPublicKey(buf []byte) (SigPublicKey, error) {
+func DecodeSigPublicKey(buf []byte) (SigPublicKey, error) {
var key SigPublicKey
if hex.DecodedLen(len(buf)) != len(key) {
return SigPublicKey{}, fmt.Errorf("malformed signature verification key: expected %d bytes; got %d",