mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-11 19:27:51 +08:00
better checking of dht keys
License: MIT Signed-off-by: Jeromy <why@ipfs.io>
This commit is contained in:
parent
3e54fb47a9
commit
b56d481080
@ -3,11 +3,13 @@ package record
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
key "github.com/ipfs/go-ipfs/blocks/key"
|
||||
path "github.com/ipfs/go-ipfs/path"
|
||||
pb "github.com/ipfs/go-ipfs/routing/dht/pb"
|
||||
ci "gx/ipfs/QmUWER4r4qMvaCnX5zREcfyiWN7cXN9g3a7fkRqNz8qWPP/go-libp2p-crypto"
|
||||
mh "gx/ipfs/QmYf7ng2hG5XBtJA3tN34DQ2GUN5HNksEw1rLDkmr6vGku/go-multihash"
|
||||
u "gx/ipfs/QmZNVWh8LLjAavuQ2JXuFmuYH3C11xo988vSgp7UQrTRj1/go-ipfs-util"
|
||||
)
|
||||
|
||||
@ -73,7 +75,7 @@ func (v Validator) IsSigned(k key.Key) (bool, error) {
|
||||
// verifies that the passed in record value is the PublicKey
|
||||
// that matches the passed in key.
|
||||
func ValidatePublicKeyRecord(k key.Key, val []byte) error {
|
||||
if len(k) != 38 {
|
||||
if len(k) < 5 {
|
||||
return errors.New("invalid public key record key")
|
||||
}
|
||||
|
||||
@ -83,6 +85,9 @@ func ValidatePublicKeyRecord(k key.Key, val []byte) error {
|
||||
}
|
||||
|
||||
keyhash := []byte(k[4:])
|
||||
if _, err := mh.Cast(keyhash); err != nil {
|
||||
return fmt.Errorf("key did not contain valid multihash: %s", err)
|
||||
}
|
||||
|
||||
pkh := u.Hash(val)
|
||||
if !bytes.Equal(keyhash, pkh) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user