grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a àMÒe•,ã@súdZddlZddlZddlZddlZddlZddlZddlZddl ZGdd„dej j ƒZ Gdd„dej j ƒZ Gdd„dej j ƒZGd d „d ej j ƒZGd d „d ej j ƒZGd d„deƒZGdd„deƒZGdd„deƒZGdd„deƒZej d¡Zej d¡Zej d¡Zej d¡Zej d¡Zej d¡Zej d¡Zej d¡Zej d¡Zej d¡Z eZ!eded ed!ed"ed#ed$ed%ed!ed"e d&i Z"Gd'd(„d(ƒZ#Gd)d*„d*ƒZ$Gd+d,„d,ƒZ%d:d-d.„Z&d/d0„Z'd;d2d3„Z(d|j|}t|tƒr:|jtkr:|r:t |||¡|SdSdSr")r*Ú isinstanceÚKeyÚ algorithmÚGSS_TSIGr)Úparse_tkey_and_step)r ÚmessageÚkeynameÚkeyrrr Ú__call__ƒs  zGSSTSigAdapter.__call__cCsVz>| |j|tjjtjj¡}|r<|dj}|j}|  |¡WSWnt yPYn0dS)Nr) Z find_rrsetZanswerÚdnsÚ rdataclassÚANYZ rdatatypeZTKEYr2ÚsecretÚstepÚKeyError)Úclsr2r0r1ZrrsetÚtokenrrrr r/�sÿ  z"GSSTSigAdapter.parse_tkey_and_stepN)rrrr!r3Ú classmethodr/rrrr r)s r)c@sveZdZdZeejeeje ej e ej dfe ej eej dfeejeejdfeeji Zdd„Zdd„Zd d „Zd d „Zd S)ÚHMACTSigzo HMAC TSIG implementation. This uses the HMAC python module to handle the sign/verify operations. réÀécCsœz|j|}Wn"ty0td|›d�ƒ‚Yn0t|tƒr\tj||dd�|_|d|_ntj||d�|_d|_|jj |_ |jr˜|j d|j›�7_ dS)NzTSIG algorithm z is not supportedr)Z digestmodéú-) Ú_hashesr9ÚNotImplementedErrorr+ÚtupleÚhmacÚnewÚ hmac_contextÚsizer)r r2r-Zhashinforrr r!±s    zHMACTSig.__init__cCs |j |¡Sr")rGr$r#rrr r$ÂszHMACTSig.updatecCs&|j ¡}|jr"|d|jd…}|S)Né)rGÚdigestrH)r rJrrr r%Ås z HMACTSig.signcCs| ¡}t ||¡st‚dSr")r%rEZcompare_digestr )r r'Úmacrrr r(Ìs zHMACTSig.verifyN)rrrrÚ HMAC_SHA1ÚhashlibZsha1Ú HMAC_SHA224Zsha224Ú HMAC_SHA256Zsha256ÚHMAC_SHA256_128Ú HMAC_SHA384Zsha384ÚHMAC_SHA384_192Ú HMAC_SHA512Zsha512ÚHMAC_SHA512_256ÚHMAC_MD5Zmd5rBr!r$r%r(rrrr r=Ÿs   ÷ r=c Cs0|o| }|r:t|ƒ}|r:| t dt|ƒ¡¡| |¡| t d|j¡¡| |dd…¡|rœ| |j ¡¡| t dtj j ¡¡| t dd¡¡|durª|j }|d?d@}|d@} t d || |j ¡} t|j ƒ} | dkrêtd ƒ‚|�r"| |j ¡| ¡| t d |j| ¡|j ¡n | | ¡|S) zòReturn a context containing the TSIG rdata for the input parameters @rtype: dns.tsig.HMACTSig or dns.tsig.GSSTSig object @raises ValueError: I{other_data} is too long @raises NotImplementedError: I{algorithm} is not supported ú!HéNz!Irriÿÿlÿÿz!HIHz TSIG Other Data is > 65535 bytesz!HH)Ú get_contextr$ÚstructÚpackÚlenZ original_idrZ to_digestabler4r5r6Ú time_signedÚfudgeÚotherÚ ValueErrorr-Úerror) Úwirer2ÚrdataÚtimeÚ request_macÚctxÚmultiÚfirstZ upper_timeZ lower_timeZ time_encodedZ other_lenrrr Ú_digestÓs2     rhcCs8|r0t|ƒ}| t dt|ƒ¡¡| |¡|SdSdS)z�If this is the first message in a multi-message sequence, start a new context. @rtype: dns.tsig.HMACTSig or dns.tsig.GSSTSig object rVN)rXr$rYrZr[)r2rKrfrerrr Ú_maybe_start_digestös  riFc Cs:t|||||||ƒ}| ¡}|j||d�}|t|||ƒfS)a~Return a (tsig_rdata, mac, ctx) tuple containing the HMAC TSIG rdata for the input parameters, the HMAC MAC calculated by applying the TSIG signature algorithm, and the TSIG digest context. @rtype: (string, dns.tsig.HMACTSig or dns.tsig.GSSTSig object) @raises ValueError: I{other_data} is too long @raises NotImplementedError: I{algorithm} is not supported )r\rK)rhr%Úreplaceri) rar2rbrcrdrerfrKZtsigrrr r%s r%c Cst d|dd…¡\} | dkr&tjj‚| d8} |dd…t d| ¡|d|…} |jdkrº|jtjjkrpt ‚nJ|jtjj kr„t ‚n6|jtjj kr˜t ‚n"|jtjjkr¬t‚ntd|jƒ‚t|j|ƒ|jkrÒt‚|j|kràt‚|j|jkrðt‚t| ||d|||ƒ}| |j¡t||j|ƒS)aFValidate the specified TSIG rdata against the other input parameters. @raises FormError: The TSIG is badly formed. @raises BadTime: There is too much time skew between the client and the server. @raises BadSignature: The TSIG signature did not validate @rtype: dns.tsig.HMACTSig or dns.tsig.GSSTSig objectrVé é rr@zunknown TSIG error code %dN)rYÚunpackr4Ú exceptionZ FormErrorrZr`ZrcodeZBADSIGrZBADKEYrZBADTIMErZBADTRUNCrr Úabsr\r]rrr r-r rhr(rKri) rar2ÚownerrbZnowrdZ tsig_startrerfZadcountZnew_wirerrr Úvalidates0 $    rqcCs&|jtkrt|jƒSt|j|jƒSdS)zŒReturns an HMAC context for the specified key. @rtype: HMAC context @raises NotImplementedError: I{algorithm} is not supported N)r-r.rr7r=)r2rrr rX:s  rXc@s(eZdZefdd„Zdd„Zdd„ZdS)r,cCsZt|tƒrtj |¡}||_t|tƒr4t | ¡¡}||_t|tƒrPtj |¡}||_ dSr") r+Ústrr4rÚ from_textÚbase64Z decodebytesÚencoder7r-)r rr7r-rrr r!Hs     z Key.__init__cCs.t|tƒo,|j|jko,|j|jko,|j|jkSr")r+r,rr7r-)r r^rrr Ú__eq__Ss  ÿ þ üz Key.__eq__cCsNd|j›d�d|j›d�}|jtkrB|dt |j¡ ¡›d�7}|d7}|S)Nz