original_string: public function getClientFinalMessage()
      {
          $final_msg = 'c=biws,r=' . $this->_nonce;
  
          /* Salted password. */
          $s_pass = strval(new Horde_Crypt_Blowfish_Pbkdf2(
              $this->_pass,
              strlen(hash($this->_hash, '', true)),
              array(
                  'algo' => $this->_hash,
                  'i_count' => $this->_iterations,
                  'salt' => $this->_salt
              )
          ));
  
          /* Client key. */
          $c_key = hash_hmac($this->_hash, 'Client Key', $s_pass, true);
  
          /* Stored key. */
          $s_key = hash($this->_hash, $c_key, true);
  
          /* Client signature. */
          $auth_msg = $this->_authmsg . ',' . $final_msg;
          $c_sig = hash_hmac($this->_hash, $auth_msg, $s_key, true);
  
          /* Proof. */
          $proof = $c_key ^ $c_sig;
  
          /* Server signature. */
          $this->_serversig = hash_hmac(
              $this->_hash,
              $auth_msg,
              hash_hmac($this->_hash, 'Server Key', $s_pass, true),
              true
          );
  
          /* c=biws: channel-binding ("biws" = base64('n,,')),
           * p=<proof>: base64 encoded ClientProof,
           * r=<nonce>: Nonce as returned from the server. */
          return $final_msg . ',p=' . base64_encode($proof);
      }
code: public function getClientFinalMessage()
      {
          $final_msg = 'c=biws,r=' . $this->_nonce;
  
          /* Salted password. */
          $s_pass = strval(new Horde_Crypt_Blowfish_Pbkdf2(
              $this->_pass,
              strlen(hash($this->_hash, '', true)),
              array(
                  'algo' => $this->_hash,
                  'i_count' => $this->_iterations,
                  'salt' => $this->_salt
              )
          ));
  
          /* Client key. */
          $c_key = hash_hmac($this->_hash, 'Client Key', $s_pass, true);
  
          /* Stored key. */
          $s_key = hash($this->_hash, $c_key, true);
  
          /* Client signature. */
          $auth_msg = $this->_authmsg . ',' . $final_msg;
          $c_sig = hash_hmac($this->_hash, $auth_msg, $s_key, true);
  
          /* Proof. */
          $proof = $c_key ^ $c_sig;
  
          /* Server signature. */
          $this->_serversig = hash_hmac(
              $this->_hash,
              $auth_msg,
              hash_hmac($this->_hash, 'Server Key', $s_pass, true),
              true
          );
  
          /* c=biws: channel-binding ("biws" = base64('n,,')),
           * p=<proof>: base64 encoded ClientProof,
           * r=<nonce>: Nonce as returned from the server. */
          return $final_msg . ',p=' . base64_encode($proof);
      }
code_tokens: public function getClientFinalMessage ( ) { $ final_msg = 'c=biws,r=' . $ this -> _nonce ; /* Salted password. */ $ s_pass = strval ( new Horde_Crypt_Blowfish_Pbkdf2 ( $ this -> _pass , strlen ( hash ( $ this -> _hash , '' , true ) ) , array ( 'algo' => $ this -> _hash , 'i_count' => $ this -> _iterations , 'salt' => $ this -> _salt ) ) ) ; /* Client key. */ $ c_key = hash_hmac ( $ this -> _hash , 'Client Key' , $ s_pass , true ) ; /* Stored key. */ $ s_key = hash ( $ this -> _hash , $ c_key , true ) ; /* Client signature. */ $ auth_msg = $ this -> _authmsg . ',' . $ final_msg ; $ c_sig = hash_hmac ( $ this -> _hash , $ auth_msg , $ s_key , true ) ; /* Proof. */ $ proof = $ c_key ^ $ c_sig ; /* Server signature. */ $ this -> _serversig = hash_hmac ( $ this -> _hash , $ auth_msg , hash_hmac ( $ this -> _hash , 'Server Key' , $ s_pass , true ) , true ) ; /* c=biws: channel-binding ("biws" = base64('n,,')),
           * p=<proof>: base64 encoded ClientProof,
           * r=<nonce>: Nonce as returned from the server. */ return $ final_msg . ',p=' . base64_encode ( $ proof ) ; }
docstring: Return the final client message.
  
  @return string  Final client message.
docstring_tokens: Return the final client message .