public function get_challenge_response($decoded) { $response = array(); $nc = '00000001'; if (!isset($decoded['digest-uri'])) { $decoded['digest-uri'] = 'xmpp/' . $this->jid->domain; } $decoded['cnonce'] = base64_encode(JAXLUtil::get_nonce()); if (isset($decoded['qop']) && $decoded['qop'] != 'auth' && strpos($decoded['qop'], 'auth') !== false) { $decoded['qop'] = 'auth'; } $data = array_merge($decoded, array('nc' => $nc)); $response = array('username' => $this->jid->node, 'response' => $this->encrypt_password($data, $this->jid->node, $this->pass), 'charset' => 'utf-8', 'nc' => $nc, 'qop' => 'auth'); foreach (array('nonce', 'digest-uri', 'realm', 'cnonce') as $key) { if (isset($decoded[$key])) { $response[$key] = $decoded[$key]; } } return base64_encode($this->implode_data($response)); }