better checking of dht keys
License: MIT Signed-off-by: Jeromy <why@ipfs.io>
Jeromy committed
Jul 5, 2016 at 13:24 UTC
b56d4810801fecad294692d2a78dd8825973c2b2
1 file changed
+6
-1
routing/record/validation.go
+6
-1
@@ -3,11 +3,13 @@ package record
3
import (
4
"bytes"
5
"errors"
6
+ "fmt"
7
8
key "github.com/ipfs/go-ipfs/blocks/key"
9
path "github.com/ipfs/go-ipfs/path"
10
pb "github.com/ipfs/go-ipfs/routing/dht/pb"
11
ci "gx/ipfs/QmUWER4r4qMvaCnX5zREcfyiWN7cXN9g3a7fkRqNz8qWPP/go-libp2p-crypto"
12
+ mh "gx/ipfs/QmYf7ng2hG5XBtJA3tN34DQ2GUN5HNksEw1rLDkmr6vGku/go-multihash"
13
u "gx/ipfs/QmZNVWh8LLjAavuQ2JXuFmuYH3C11xo988vSgp7UQrTRj1/go-ipfs-util"
14
)
15
@@ -73,7 +75,7 @@ func (v Validator) IsSigned(k key.Key) (bool, error) {
75
// verifies that the passed in record value is the PublicKey
76
// that matches the passed in key.
77
func ValidatePublicKeyRecord(k key.Key, val []byte) error {
76
- if len(k) != 38 {
78
+ if len(k) < 5 {
79
return errors.New("invalid public key record key")
80
}
81
@@ -83,6 +85,9 @@ func ValidatePublicKeyRecord(k key.Key, val []byte) error {
85
}
86
87
keyhash := []byte(k[4:])
88
+ if _, err := mh.Cast(keyhash); err != nil {
89
+ return fmt.Errorf("key did not contain valid multihash: %s", err)
90
+ }
91
92
pkh := u.Hash(val)
93
if !bytes.Equal(keyhash, pkh) {