@cryptotaxi247 / kubo / commits / b56d48108

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) {