U
    
W[  ć                   @   sZ   d Z ddlmZmZ ddlmZ ddlmZmZ eeedZ	dddZ
d	d
 Zdd ZdS )z^
Calculations for HTTP Digest authentication.

@see: U{http://www.faqs.org/rfcs/rfc2617.html}
é    )ŚdivisionŚabsolute_import)Śhexlify)Śmd5Śsha1)s   md5ó   md5-sesss   shaNc           	      C   sĀ   |r|s|s|rt d|dkrjt|   }| |” | d” | |” | d” | |” t| ” }n|}| dkr¾t|   }| |” | d” | |” | d” | |” t| ” }|S )a:  
    Compute H(A1) from RFC 2617.

    @param pszAlg: The name of the algorithm to use to calculate the digest.
        Currently supported are md5, md5-sess, and sha.
    @param pszUserName: The username
    @param pszRealm: The realm
    @param pszPassword: The password
    @param pszNonce: The nonce
    @param pszCNonce: The cnonce

    @param preHA1: If available this is a str containing a previously
       calculated H(A1) as a hex string.  If this is given then the values for
       pszUserName, pszRealm, and pszPassword must be L{None} and are ignored.
    zPpreHA1 is incompatible with the pszUserName, pszRealm, and pszPassword argumentsNó   :r   )Ś	TypeErrorŚ
algorithmsŚupdater   Śdigest)	ZpszAlgZpszUserNameZpszRealmZpszPasswordŚpszNonceŚ	pszCNonceZpreHA1ŚmŚHA1© r   ś6/usr/lib/python3/dist-packages/twisted/cred/_digest.pyŚcalcHA1$   s(    











r   c                 C   sP   t |   }| |” | d” | |” |dkrD| d” | |” t| ” S )a÷  
    Compute H(A2) from RFC 2617.

    @param pszAlg: The name of the algorithm to use to calculate the digest.
        Currently supported are md5, md5-sess, and sha.
    @param pszMethod: The request method.
    @param pszDigestUri: The request URI.
    @param pszQop: The Quality-of-Protection value.
    @param pszHEntity: The hash of the entity body or L{None} if C{pszQop} is
        not C{'auth-int'}.
    @return: The hash of the A2 value for the calculation of the response
        digest.
    r   s   auth-int©r
   r   r   r   )ŚalgoZ	pszMethodZpszDigestUriŚpszQopZ
pszHEntityr   r   r   r   ŚcalcHA2S   s    





r   c           	      C   s   t |  }| | ” | d” | |” | d” |rv|rv| |” | d” | |” | d” | |” | d” | |” t| ” }|S )a  
    Compute the digest for the given parameters.

    @param HA1: The H(A1) value, as computed by L{calcHA1}.
    @param HA2: The H(A2) value, as computed by L{calcHA2}.
    @param pszNonce: The challenge nonce.
    @param pszNonceCount: The (client) nonce count value for this response.
    @param pszCNonce: The client nonce.
    @param pszQop: The Quality-of-Protection value.
    r   r   )	r   ZHA2r   r   ZpszNonceCountr   r   r   ZrespHashr   r   r   ŚcalcResponsek   s    











r   )N)Ś__doc__Z
__future__r   r   Zbinasciir   Zhashlibr   r   r
   r   r   r   r   r   r   r   Ś<module>   s   	ō ’
/