code: func recoverNodeID(hash, sig []byte) (id NodeID, err error) {
  	pubkey, err := crypto.Ecrecover(hash, sig)
  	if err != nil {
  		return id, err
  	}
  	if len(pubkey)-1 != len(id) {
  		return id, fmt.Errorf("recovered pubkey has %d bits, want %d bits", len(pubkey)*8, (len(id)+1)*8)
  	}
  	for i := range id {
  		id[i] = pubkey[i+1]
  	}
  	return id, nil
  }
docs: // recoverNodeID computes the public key used to sign the
  // given hash from the signature.