ϪfFdZddlmZddlmZmZeeedZ d dZdZdZ y) z^ Calculations for HTTP Digest authentication. @see: U{http://www.faqs.org/rfcs/rfc2617.html} )hexlify)md5sha1)smd5md5-sesssshaNc,|r|s|s|r td||t|}|j||jd|j||jd|j|t|j }n|}|dk(r{t|}|j||jd|j||jd|j|t|j }|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 arguments:r) TypeError algorithmsupdaterdigest) pszAlg pszUserNamepszRealm pszPasswordpszNonce pszCNoncepreHA1mHA1s 6/usr/lib/python3/dist-packages/twisted/cred/_digest.pycalcHA1r!s&;(k 2  ~ v       ahhj!  v        ahhj! Jct|}|j||jd|j||dk(r"|jd|j|t|jS)a Compute H(A2) from RFC 2617. @param algo: 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. rsauth-intr r rr )algo pszMethod pszDigestUripszQop pszHEntityrs rcalcHA2r Ssd 4AHHYHHTNHH\    188: rct|}|j||jd|j||jd|rh|rf|j||jd|j||jd|j||jd|j|t|j}|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. rr) rHA2rr pszNonceCountrrrrespHashs r calcResponser%ks 4AHHSMHHTNHHXHHTN      HHSMqxxz"H Or)N) __doc__binasciirhashlibrrr rr r%rrr*s=     "MQ/d0r