hyb
2026-01-30 15bc7727b58bf9ca0c8f21702fa893daac232b8d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Ë
¸^i»Fã ó&—UdZddlZddlZddlZddlZddlZddlmZmZm    Z    m
Z
m Z m Z m Z mZmZddlmZddlmZddlmZddlmZdd    lmZmZdd
lmZGd „d ed ¬«Zej<ej<ej>ej>ej@ej@ej@ej@ejBejBejBejBdœ Z"ee#ee$gdffe%d<ejLejNdkrdnd«Z(dZ)e    e e ddfe%d<e*e+e"jY«««Z-e    e e#dfe%d<e.hd£«Z/e    e
e#e%d<de#de#fd„Z0de#de#fd„Z1de#dee#e#ffd „Z2Gd!„d"«Z3y)#av
Digest authentication middleware for aiohttp client.
 
This middleware implements HTTP Digest Authentication according to RFC 7616,
providing a more secure alternative to Basic Authentication. It supports all
standard hash algorithms including MD5, SHA, SHA-256, SHA-512 and their session
variants, as well as both 'auth' and 'auth-int' quality of protection (qop) options.
éN)    ÚCallableÚDictÚFinalÚ    FrozenSetÚListÚLiteralÚTupleÚ    TypedDictÚUnion)ÚURLé)Úhdrs)Ú ClientError)ÚClientHandlerType)Ú ClientRequestÚClientResponse)ÚPayloadcóT—eZdZUeed<eed<eed<eed<eed<eed<eed<y)    ÚDigestAuthChallengeÚrealmÚnonceÚqopÚ    algorithmÚopaqueÚdomainÚstaleN)Ú__name__Ú
__module__Ú __qualname__ÚstrÚ__annotations__©óõxH:\项目\archive\测试组\脚本\Change_password\venv_build\Lib\site-packages\aiohttp/client_middleware_digest_auth.pyrr$s%…Ø ƒJØ ƒJØ     ƒH؃NØ ƒKØ ƒKØ „Jr#rF)Útotal) ÚMD5zMD5-SESSÚSHAzSHA-SESSÚSHA256z SHA256-SESSzSHA-256z SHA-256-SESSÚSHA512z SHA512-SESSzSHA-512z SHA-512-SESSz hashlib._HashÚDigestFunctions)éé z:(?:^|\s|,\s*)(\w+)\s*=\s*(?:"((?:[^"\\]|\\.)*)"|([^\s,]+))z>(?:^|\s|,\s*)((?>\w+))\s*=\s*(?:"((?:[^"\\]|\\.)*)"|([^\s,]+)))rrrrrrr.ÚCHALLENGE_FIELDSÚSUPPORTED_ALGORITHMS>ÚurirrÚcnoncerÚresponseÚusernameÚQUOTED_AUTH_FIELDSÚvalueÚreturncó&—|jdd«S)z,Escape double quotes for HTTP header values.ú"ú\"©Úreplace©r4s r$Ú escape_quotesr<us€à =‰=˜˜eÓ $Ð$r#có&—|jdd«S)z-Unescape double quotes in HTTP header values.r8r7r9r;s r$Úunescape_quotesr>zs€à =‰=˜ Ó $Ð$r#Úheaderc    ó¦—tj|«Dcic](\}}}|j«x}r||r t|«n|“Œ*c}}}Scc}}}w)a
    Parse key-value pairs from WWW-Authenticate or similar HTTP headers.
 
    This function handles the complex format of WWW-Authenticate header values,
    supporting both quoted and unquoted values, proper handling of commas in
    quoted values, and whitespace variations per RFC 7616.
 
    Examples of supported formats:
      - key1="value1", key2=value2
      - key1 = "value1" , key2="value, with, commas"
      - key1=value1,key2="value2"
      - realm="example.com", nonce="12345", qop="auth"
 
    Args:
        header: The header value string to parse
 
    Returns:
        Dictionary mapping parameter names to their values
    )Ú_HEADER_PAIRS_PATTERNÚfindallÚstripr>)r?ÚkeyÚ
quoted_valÚ unquoted_valÚ stripped_keys     r$Úparse_header_pairsrHsZ€ô,.C×-JÑ-JÈ6Ó-R÷ ð á )ˆC˜\ØŸI™I›KÐ 'ˆLÐ 'ð    ±Z”o jÔ1À\ÑQô ðùô sš-A c    óˆ—eZdZdZ    ddedededdfd„Zded    ed
ee    e
d fdefd „Z d    edefd „Z de defd„Zdedede fd„Zy)ÚDigestAuthMiddlewarea
    HTTP digest authentication middleware for aiohttp client.
 
    This middleware intercepts 401 Unauthorized responses containing a Digest
    authentication challenge, calculates the appropriate digest credentials,
    and automatically retries the request with the proper Authorization header.
 
    Features:
    - Handles all aspects of Digest authentication handshake automatically
    - Supports all standard hash algorithms:
      - MD5, MD5-SESS
      - SHA, SHA-SESS
      - SHA256, SHA256-SESS, SHA-256, SHA-256-SESS
      - SHA512, SHA512-SESS, SHA-512, SHA-512-SESS
    - Supports 'auth' and 'auth-int' quality of protection modes
    - Properly handles quoted strings and parameter parsing
    - Includes replay attack protection with client nonce count tracking
    - Supports preemptive authentication per RFC 7616 Section 3.6
 
    Standards compliance:
    - RFC 7616: HTTP Digest Access Authentication (primary reference)
    - RFC 2617: HTTP Authentication (deprecated by RFC 7616)
    - RFC 1945: Section 11.1 (username restrictions)
 
    Implementation notes:
    The core digest calculation is inspired by the implementation in
    https://github.com/requests/requests/blob/v2.18.4/requests/auth.py
    with added support for modern digest auth features and error handling.
    ÚloginÚpasswordÚ
preemptiver5Ncó—|€ td«‚|€ td«‚d|vr td«‚||_|jd«|_|jd«|_d|_d|_i|_||_g|_    y)Nz"None is not allowed as login valuez%None is not allowed as password valueú:z8A ":" is not allowed in username (RFC 1945#section-11.1)úutf-8r#r)
Ú
ValueErrorÚ
_login_strÚencodeÚ _login_bytesÚ_password_bytesÚ_last_nonce_bytesÚ _nonce_countÚ
_challengeÚ _preemptiveÚ_protection_space)ÚselfrKrLrMs    r$Ú__init__zDigestAuthMiddleware.__init__¹sŠ€ð ˆ=ÜÐAÓBÐ Bà Ð ÜÐDÓEÐ Eà %‰<ÜÐWÓXÐ Xà&+ˆŒØ*/¯,©,°wÓ*?ˆÔØ-5¯_©_¸WÓ-EˆÔà!$ˆÔØˆÔØ/1ˆŒØ!+ˆÔà,.ˆÕr#ÚmethodÚurlÚbodyr#c
ƒóð‡#‡$K—|j}d|vr td«‚d|vr td«‚|d}|d}|s td«‚|jdd«}|jdd    «}|j«}    |jd
d«}
|j    d «} |j    d «} t |«j } d}d }|rxd dhj|jd«Dchc]#}|j«sŒ|j«’Œ%c}«}|std|›«‚d|vrdnd }|j    d «}|    tvr$td|    ›ddjt«›«‚t|    Š$dtdtfˆ$fd„ Š#dtdtdtfˆ#fd„ }dj|j| |jf«}|j«›d| ›j    «}|dk(rFt!|t"«r|j%«ƒd{–—†}n|}‰#|«}dj||f«}‰#|«}‰#|«}| |j&k(r|xj(dz c_nd|_| |_|j(d›}|j    d «}t+j,d jt/|j(«j    d «| t1j2«j    d «t5j6d«g««j9«dd }|j    d «}|    j«j;d!«r‰#dj|| |f««}|r dj| ||||f«}|||«}n||dj| |f««}t=|j>«t=|«t=|«| |jA«|d"œ}|
rt=|
«|d
<|r||d<||d#<||d$<g} |jC«D];\}!}"|!tDvr| jG|!›d%|"›d&«Œ&| jG|!›d'|"›«Œ=d(dj| «›Scc}w7Œ`­w))aÕ
        Build digest authorization header for the current challenge.
 
        Args:
            method: The HTTP method (GET, POST, etc.)
            url: The request URL
            body: The request body (used for qop=auth-int)
 
        Returns:
            A fully formatted Digest authorization header string
 
        Raises:
            ClientError: If the challenge is missing required parameters or
                         contains unsupported values
 
        rz:Malformed Digest auth challenge: Missing 'realm' parameterrz:Malformed Digest auth challenge: Missing 'nonce' parameterzBSecurity issue: Digest auth challenge contains empty 'nonce' valuerÚrr&rrPr#Úauthzauth-intú,zEDigest auth error: Unsupported Quality of Protection (qop) value(s): z/Digest auth error: Unsupported hash algorithm: z. Supported algorithms: z, Úxr5cóL•—‰|«j«j«S)z<RFC 7616 Section 3: Hash function H(data) = hex(hash(data)).)Ú    hexdigestrS)rdÚhash_fns €r$ÚHz'DigestAuthMiddleware._encode.<locals>.Hsø€á˜1“:×'Ñ'Ó)×0Ñ0Ó2Ð 2r#ÚsÚdcó6•—‰dj||f««S)zDRFC 7616 Section 3: KD(secret, data) = H(concat(secret, ":", data)).ó:)Újoin)rirjrhs  €r$ÚKDz(DigestAuthMiddleware._encode.<locals>.KD sø€áT—Y‘Y  1˜vÓ&Ó'Ð 'r#rlrONr Ú08xééz-SESS)r2rrr/r1rÚncr0z="r7ú=zDigest )$rXrÚgetÚupperrSr Úpath_qsÚ intersectionÚsplitrCr*rmr.ÚbytesrTrUÚ
isinstancerÚas_bytesrVrWÚhashlibÚsha1r ÚtimeÚctimeÚosÚurandomrfÚendswithr<rRÚdecodeÚitemsr3Úappend)%r[r]r^r_Ú    challengerrÚqop_rawÚalgorithm_originalrrÚ nonce_bytesÚ realm_bytesÚpathrÚ    qop_bytesÚqÚ
valid_qopsrnÚA1ÚA2Ú entity_bytesÚ entity_hashÚHA1ÚHA2ÚncvalueÚ ncvalue_bytesr0Ú cnonce_bytesÚnoncebitÚresponse_digestÚ header_fieldsÚpairsÚfieldr4rhrgs%                                   @@r$Ú_encodezDigestAuthMiddleware._encodeÓsŸùèø€ð&—O‘Oˆ    Ø ˜)Ñ #ÜØLóð ð ˜)Ñ #ÜØLóð ð
˜'Ñ"ˆØ˜'Ñ"ˆñÜØTóð ð—-‘-  rÓ*ˆà&Ÿ]™]¨;¸Ó>ÐØ&×,Ñ,Ó.ˆ    Ø—‘˜x¨Ó,ˆð—l‘l 7Ó+ˆ Ø—l‘l 7Ó+ˆ ܐ3‹x×ÑˆðˆØˆ    Ù Ø  *Ð-×:Ñ:Ø$+§M¡M°#Ó$6ÖD˜q¸!¿'¹'½)—‘•ÒDóˆJñÜ!Ø[Ð\cÐ[dÐeóðð!+¨jÑ 8‘*¸fˆCØŸ
™
 7Ó+ˆIà œOÑ +ÜØAÀ)ÀðM)Ø)-¯©Ô3GÓ)HÐ(IðKóð ô)¨Ñ3ˆð    3”ð    3œ5õ    3ð    (”%ð    (œEð    (¤eõ    (ð
Y‰Y˜×)Ñ)¨;¸×8LÑ8LÐMÓ NˆØ— ‘ “Иq  Ð '× .Ñ .Ó 0ˆØ *Ò Ü˜$¤Ô(Ø%)§]¡]£_×4‘ à# Ù˜L›/ˆKØ—‘˜B  Ð,Ó-ˆBᐋeˆÙ‹eˆð ˜$×0Ñ0Ò 0Ø × Ò  Ñ "Ö à !ˆDÔ à!,ˆÔØ×&Ñ& sÐ+ˆØŸ™ wÓ/ˆ ô—‘Ø H‰Hä˜×)Ñ)Ó*×1Ñ1°'Ó:ØÜ—J‘J“L×'Ñ'¨Ó0Ü—J‘J˜q“Mð    ó ó    
÷ ‰)‹+crð    ˆð—}‘} WÓ-ˆ ð ?‰?Ó × %Ñ % gÔ .ِD—I‘I˜s K°Ð>Ó?Ó@ˆCñ Ø—y‘yؘm¨\¸9ÀcÐJóˆHñ!  hÓ/‰Oá   d§i¡i°¸cÐ0BÓ&CÓDˆOô & d§o¡oÓ6Ü" 5Ó)Ü" 5Ó)ØØ'×.Ñ.Ó0Ø+ñ
ˆ ñ Ü&3°FÓ&;ˆM˜(Ñ #ñ Ø#&ˆM˜%Ñ  Ø")ˆM˜$Ñ Ø&,ˆM˜(Ñ #ðˆØ)×/Ñ/Ó1ò    1‰LˆE5ØÔ*Ñ*Ø— ‘  ˜w b¨¨¨qÐ1Õ2à— ‘  ˜w a¨ wÐ/Õ0ð        1𠘟™ 5Ó)Ð*Ð+Ð+ùòSEð< 5ûs&„C%Q6Ã)Q.Ã?Q.ÄDQ6ÈQ3ÈI Q6cóȗt|«}|jD]H}|j|«sŒt|«t|«k(s|ddk(ry|t|«dk(sŒHyy)zô
        Check if the given URL is within the current protection space.
 
        According to RFC 7616, a URI is in the protection space if any URI
        in the protection space is a prefix of it (after both have been made absolute).
        éÿÿÿÿú/TF)r rZÚ
startswithÚlen)r[r^Ú request_strÚ    space_strs    r$Ú_in_protection_spacez)DigestAuthMiddleware._in_protection_spacevsk€ô˜#“hˆ Ø×/Ñ/ò        ˆIà×)Ñ)¨)Ô4Øä;Ó¤3 y£>Ò1°Y¸r±]ÀcÒ5IÙàœ3˜y›>Ñ*¨cÓ1Ùð        ðr#r1c
óP—|jdk7ry|jjdd«}|sy|jd«\}}}|sy|j    «dk7ry|syt |«x}syi|_tD]%}|j|«x}sŒ||j |<Œ'|jj«}    |j jd«x}
r©g|_
|
j«D]Ž} | jd«} | jd    «r=|jjt|    j!t#| ««««Œb|jjtt#| «««Œnt|    «g|_
t%|j «S)
        Takes the given response and tries digest-auth, if needed.
 
        Returns true if the original request must be resent.
        i‘Fzwww-authenticateraú Údigestrr7r )ÚstatusÚheadersrtÚ    partitionÚlowerrHrXr-r^ÚoriginrZrxrCr¡r…r rmr Úbool) r[r1Ú auth_headerr]ÚseprªÚ header_pairsrœr4r­rr/s             r$Ú _authenticatez"DigestAuthMiddleware._authenticateŠs‚€ð ?‰?˜cÒ !Øà×&Ñ&×*Ñ*Ð+=¸rÓBˆ ÙØà*×4Ñ4°SÓ9шWÙàà <‰<‹>˜XÒ %àáàô!3°7Ó ;Ð; Ð;àðˆŒÜ%ò    /ˆEØ$×(Ñ(¨Ó/Ð/ˆuÑ/Ø).—‘ Ò&ð    /ð
—‘×$Ñ$Ó&ˆà—_‘_×(Ñ(¨Ó2Ð 2ˆ6Ð 2à%'ˆDÔ "Ø—|‘|“~ò Aà—i‘i “nØ—>‘> #Ô&à×*Ñ*×1Ñ1´#°f·k±kÄ#ÀcÃ(Ó6KÓ2LÕMð×*Ñ*×1Ñ1´#´c¸#³h³-Õ@ñ Aô'*¨&£k ]ˆDÔ "ôD—O‘OÓ$Ð$r#ÚrequestÚhandlercƒó K—d}td«D]±}|dkDs3|jr{|jro|j|j«rT|j |j |j|j«ƒd{–—†|jtj<||«ƒd{–—†}|j|«rŒ±n|€J‚|S7ŒJ7Œ!­w)zRun the digest auth middleware.Nér) ÚrangerYrXr¥r^rr]r_rªrÚ AUTHORIZATIONr²)r[r³r´r1Ú retry_counts     r$Ú__call__zDigestAuthMiddleware.__call__ÅsÀèø€ðˆÜ  ›8ò    ˆKð˜QŠØ× Ò Ø—O’OØ×-Ñ-¨g¯k©kÔ:à<@¿L¹LØ—N‘N G§K¡K°·±ó=÷7—‘¤× 2Ñ 2Ñ3ñ
% WÓ-×-ˆHð×%Ñ% hÕ/Ùð%    ð*Ð#Ð#Ð#؈ð7øð
.ús*‚A=CÁ?C
Â*CÂ*C Â+CÃ
Cà C)T)rrrÚ__doc__r r®r\r r rrrr¥rr²rrrºr"r#r$rJrJšsµ„ñðD ñ    /àð/ðð/ðð    /ð
 
ó /ð4a,Øða,Ø #ða,Ø+0°¸'À#¹,Ð1FÑ+Gða,à     óa,ðF¨ð°óð(9% nð9%¸ó9%ðvØ$ðØ/@ðà    ôr#rJ)4r»r|r€ÚreÚsysr~Útypingrrrrrrr    r
r Úyarlr rarÚclient_exceptionsrÚclient_middlewaresrÚ client_reqreprrÚpayloadrrÚmd5r}Úsha256Úsha512r*r ryr!ÚcompileÚ version_inforAr-ÚtupleÚsortedÚkeysr.Ú    frozensetr3r<r>rHrJr"r#r$ú<module>rÍs¸ðòóÛ    Û    Û
Û ÷
÷
õ
õåÝ*Ý1ß8Ýô˜)¨5õð ;‰;Ø— ‘ Ø <‰<Ø— ‘ ؏n‰nØ—>‘>؏~‰~Ø—N‘N؏n‰nØ—>‘>؏~‰~Ø—N‘Nñ B€c˜8 U G¨_Ð$<Ñ=Ð=Ñ>ó ð"#˜Ÿ
™
à
×ј'Ò!ñBà    JóÐð<ð    %Ø    ØÐQÑRÐTWÐWññó ñ 05±V¸O×<PÑ<PÓ<RÓ5SÓ/TАe˜E # s (™OÑ,ÓTñ-6ÚIó-АE˜) C™.Ñ)óð
%˜ð% ó%ð
%˜3ð% 3ó%ð
˜sð t¨C°¨H¡~ó÷6FòFr#