⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 association.php

📁 简介:IceBB是一个强大
💻 PHP
📖 第 1 页 / 共 2 页
字号:
        $signed_list[] = 'signed';        sort($signed_list);        $signed_message->setArg(Auth_OpenID_OPENID_NS, 'signed',                                implode(',', $signed_list));        $sig = $this->getMessageSignature($signed_message);        $signed_message->setArg(Auth_OpenID_OPENID_NS, 'sig', $sig);        return $signed_message;    }    /**     * Given a {@link Auth_OpenID_Message}, return the key/value pairs     * to be signed according to the signed list in the message.  If     * the message lacks a signed list, return null.     *     * @access private     */    function _makePairs(&$message)    {        $signed = $message->getArg(Auth_OpenID_OPENID_NS, 'signed');        if (!$signed) {            // raise ValueError('Message has no signed list: %s' % (message,))            return null;        }        $signed_list = explode(',', $signed);        $pairs = array();        $data = $message->toPostArgs();        foreach ($signed_list as $field) {            $pairs[] = array($field, Auth_OpenID::arrayGet($data,                                                           'openid.' .                                                           $field, ''));        }        return $pairs;    }    /**     * Given an {@link Auth_OpenID_Message}, return the signature for     * the signed list in the message.     *     * @access private     */    function getMessageSignature(&$message)    {        $pairs = $this->_makePairs($message);        return base64_encode($this->sign($pairs));    }    /**     * Confirm that the signature of these fields matches the     * signature contained in the data.     *     * @access private     */    function checkMessageSignature(&$message)    {        $sig = $message->getArg(Auth_OpenID_OPENID_NS,                                'sig');        if (!$sig) {            return false;        }        $calculated_sig = $this->getMessageSignature($message);        return $calculated_sig == $sig;    }}function Auth_OpenID_getSecretSize($assoc_type){    if ($assoc_type == 'HMAC-SHA1') {        return 20;    } else if ($assoc_type == 'HMAC-SHA256') {        return 32;    } else {        return null;    }}function Auth_OpenID_getAllAssociationTypes(){    return array('HMAC-SHA1', 'HMAC-SHA256');}function Auth_OpenID_getSupportedAssociationTypes(){    $a = array('HMAC-SHA1');    if (Auth_OpenID_HMACSHA256_SUPPORTED) {        $a[] = 'HMAC-SHA256';    }    return $a;}function Auth_OpenID_getSessionTypes($assoc_type){    $assoc_to_session = array(       'HMAC-SHA1' => array('DH-SHA1', 'no-encryption'));    if (Auth_OpenID_HMACSHA256_SUPPORTED) {        $assoc_to_session['HMAC-SHA256'] =            array('DH-SHA256', 'no-encryption');    }    return Auth_OpenID::arrayGet($assoc_to_session, $assoc_type, array());}function Auth_OpenID_checkSessionType($assoc_type, $session_type){    if (!in_array($session_type,                  Auth_OpenID_getSessionTypes($assoc_type))) {        return false;    }    return true;}function Auth_OpenID_getDefaultAssociationOrder(){    $order = array();    if (!Auth_OpenID_noMathSupport()) {        $order[] = array('HMAC-SHA1', 'DH-SHA1');        if (Auth_OpenID_HMACSHA256_SUPPORTED) {            $order[] = array('HMAC-SHA256', 'DH-SHA256');        }    }    $order[] = array('HMAC-SHA1', 'no-encryption');    if (Auth_OpenID_HMACSHA256_SUPPORTED) {        $order[] = array('HMAC-SHA256', 'no-encryption');    }    return $order;}function Auth_OpenID_getOnlyEncryptedOrder(){    $result = array();    foreach (Auth_OpenID_getDefaultAssociationOrder() as $pair) {        list($assoc, $session) = $pair;        if ($session != 'no-encryption') {            if (Auth_OpenID_HMACSHA256_SUPPORTED &&                ($assoc == 'HMAC-SHA256')) {                $result[] = $pair;            } else if ($assoc != 'HMAC-SHA256') {                $result[] = $pair;            }        }    }    return $result;}function &Auth_OpenID_getDefaultNegotiator(){    $x = new Auth_OpenID_SessionNegotiator(                 Auth_OpenID_getDefaultAssociationOrder());    return $x;}function &Auth_OpenID_getEncryptedNegotiator(){    $x = new Auth_OpenID_SessionNegotiator(                 Auth_OpenID_getOnlyEncryptedOrder());    return $x;}/** * A session negotiator controls the allowed and preferred association * types and association session types. Both the {@link * Auth_OpenID_Consumer} and {@link Auth_OpenID_Server} use * negotiators when creating associations. * * You can create and use negotiators if you: * - Do not want to do Diffie-Hellman key exchange because you use * transport-layer encryption (e.g. SSL) * * - Want to use only SHA-256 associations * * - Do not want to support plain-text associations over a non-secure * channel * * It is up to you to set a policy for what kinds of associations to * accept. By default, the library will make any kind of association * that is allowed in the OpenID 2.0 specification. * * Use of negotiators in the library * ================================= * * When a consumer makes an association request, it calls {@link * getAllowedType} to get the preferred association type and * association session type. * * The server gets a request for a particular association/session type * and calls {@link isAllowed} to determine if it should create an * association. If it is supported, negotiation is complete. If it is * not, the server calls {@link getAllowedType} to get an allowed * association type to return to the consumer. * * If the consumer gets an error response indicating that the * requested association/session type is not supported by the server * that contains an assocation/session type to try, it calls {@link * isAllowed} to determine if it should try again with the given * combination of association/session type. * * @package OpenID */class Auth_OpenID_SessionNegotiator {    function Auth_OpenID_SessionNegotiator($allowed_types)    {        $this->allowed_types = array();        $this->setAllowedTypes($allowed_types);    }    /**     * Set the allowed association types, checking to make sure each     * combination is valid.     *     * @access private     */    function setAllowedTypes($allowed_types)    {        foreach ($allowed_types as $pair) {            list($assoc_type, $session_type) = $pair;            if (!Auth_OpenID_checkSessionType($assoc_type, $session_type)) {                return false;            }        }        $this->allowed_types = $allowed_types;        return true;    }    /**     * Add an association type and session type to the allowed types     * list. The assocation/session pairs are tried in the order that     * they are added.     *     * @access private     */    function addAllowedType($assoc_type, $session_type = null)    {        if ($this->allowed_types === null) {            $this->allowed_types = array();        }        if ($session_type === null) {            $available = Auth_OpenID_getSessionTypes($assoc_type);            if (!$available) {                return false;            }            foreach ($available as $session_type) {                $this->addAllowedType($assoc_type, $session_type);            }        } else {            if (Auth_OpenID_checkSessionType($assoc_type, $session_type)) {                $this->allowed_types[] = array($assoc_type, $session_type);            } else {                return false;            }        }        return true;    }    // Is this combination of association type and session type allowed?    function isAllowed($assoc_type, $session_type)    {        $assoc_good = in_array(array($assoc_type, $session_type),                               $this->allowed_types);        $matches = in_array($session_type,                            Auth_OpenID_getSessionTypes($assoc_type));        return ($assoc_good && $matches);    }    /**     * Get a pair of assocation type and session type that are     * supported.     */    function getAllowedType()    {        if (!$this->allowed_types) {            return array(null, null);        }        return $this->allowed_types[0];    }}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -