public function authenticate($password)
    {
        $packet = $this->createPacket(Packet::SERVERDATA_AUTH, $password);

        $response = $this->sendPacket($packet);

        if ($response->getType() !== Packet::SERVERDATA_AUTH_RESPONSE) {
            throw new Exception\AuthenticationFailed('Invalid packet type returned, SERVERDATA_AUTH_RESPONSE expected');
        }

        if ($response->getId() !== $this->packetId) {
            throw new Exception\AuthenticationFailed('Invalid packet id returned, possibly a badly unpacked -1 (failure)');
        }

        return true;
    }