'Perform an APOP login.
@type username: L{bytes}
@param username: The username with which to log in.
@type password: L{bytes}
@param password: The password with which to log in.
@type challenge: L{bytes}
@param challenge: A challenge string.
@rtype: L{Deferred <defer.Deferred>} which successfully fires with
L{bytes} or fails with L{ServerErrorResponse}
@return: A deferred which fires when the server response is received.
On a successful login, it returns the server response minus
the status indicator.'

def _apop(self, username, password, challenge):

    digest = md5((challenge + password)).hexdigest()
    return self.apop(username, digest)
