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);
    }
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);
    }
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 ) ; }
Return the final client message.

@return string  Final client message.
Return the final client message .