<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def auth_recv(self):
 """ Handle peer's IKE_AUTH response. """

        id_r = auth_data = None
        for p in self.packets[-1].payloads:
            if p._type == payloads.Type.IDr:
                id_r = p
                logger.debug('Got responder ID: {}'.format(dump(bytes(p))))
            if p._type == payloads.Type.AUTH:
                auth_data = p._data
            if p._type == payloads.Type.SA:
                logger.debug('ESP_SPIin: {}'.format(p.spi))
                self.esp_SPIin = p.spi
                for proposal in p.proposals:
                    logger.debug("Proposal: {}".format(proposal.__dict__))
                    logger.debug(proposal.spi)
        if id_r is None or auth_data is None:
            raise IkeError('IDr missing from IKE_AUTH response')
        message2 = bytes(self.packets[1])
        authenticated = self.authenticate_peer(auth_data, id_r, message2)
        assert authenticated
        keymat = prfplus(self.SK_d, self.Ni + self.Nr, 4 * 32)
        (self.esp_ei,
          self.esp_ai,
          self.esp_er,
          self.esp_ar,
         ) = unpack("32s" * 4, keymat)
        # TODO: Figure out the names for the params, they _ARE_ in correct places, just the names migth mismatch.
        self.install_ipsec_sas()