ó
    ÌÅLg•,  ã                   óž  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r " S S\R                  R                  5      r " S S\R                  R                  5      r " S S\R                  R                  5      r " S	 S
\R                  R                  5      r " S S\R                  R                  5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\R*                  R-                  S5      r\R*                  R-                  S5      r\R*                  R-                  S5      r\R*                  R-                  S5      r\R*                  R-                  S5      r\R*                  R-                  S5      r\R*                  R-                  S5      r\R*                  R-                  S5      r\R*                  R-                  S5      r\R*                  R-                  S5      r \r!\S\S \S!\S"\S#\S$\S%\S!\S"\ S&0
r" " S' S(5      r# " S) S*5      r$ " S+ S,5      r%S4S- jr&S. r'S5S/ jr( S6S0 jr)S1 r* " S2 S35      r+g)7zDNS TSIG support.é    Nc                   ó   • \ rS rSrSrSrg)ÚBadTimeé   z8The current time is not within the TSIG's validity time.© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú*/usr/lib/python3/dist-packages/dns/tsig.pyr   r      s   † ÜBr   r   c                   ó   • \ rS rSrSrSrg)ÚBadSignatureé#   z#The TSIG signature fails to verify.r   Nr   r   r   r   r   r   #   s   † Ü-r   r   c                   ó   • \ rS rSrSrSrg)ÚBadKeyé'   z2The TSIG record owner name does not match the key.r   Nr   r   r   r   r   r   '   s   † Ü<r   r   c                   ó   • \ rS rSrSrSrg)ÚBadAlgorithmé+   z*The TSIG algorithm does not match the key.r   Nr   r   r   r   r   r   +   ó   † Ü4r   r   c                   ó   • \ rS rSrSrSrg)Ú	PeerErroré/   z;Base class for all TSIG errors generated by the remote peerr   Nr   r   r   r   r   r   /   s   † ÜEr   r   c                   ó   • \ rS rSrSrSrg)Ú
PeerBadKeyé3   z$The peer didn't know the key we usedr   Nr   r   r   r   r   r   3   s   † Ü.r   r   c                   ó   • \ rS rSrSrSrg)ÚPeerBadSignatureé7   z*The peer didn't like the signature we sentr   Nr   r   r   r   r!   r!   7   r   r   r!   c                   ó   • \ rS rSrSrSrg)ÚPeerBadTimeé;   z%The peer didn't like the time we sentr   Nr   r   r   r   r$   r$   ;   s   † Ü/r   r$   c                   ó   • \ rS rSrSrSrg)ÚPeerBadTruncationé?   z=The peer didn't like amount of truncation in the TSIG we sentr   Nr   r   r   r   r'   r'   ?   s   † ÜGr   r'   zHMAC-MD5.SIG-ALG.REG.INTz	hmac-sha1zhmac-sha224zhmac-sha256zhmac-sha256-128zhmac-sha384zhmac-sha384-192zhmac-sha512zhmac-sha512-256úgss-tsigé   é   é    é   é0   é   é@   é€   c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚGSSTSigé`   a/  
GSS-TSIG TSIG implementation.  This uses the GSS-API context established
in the TKEY message handshake to sign messages using GSS-API message
integrity codes, per the RFC.

In order to avoid a direct GSSAPI dependency, the keyring holds a ref
to the GSSAPI object required, rather than the key itself.
c                 ó,   • Xl         SU l        SU l        g )Nr   r)   )Úgssapi_contextÚdataÚname)Úselfr6   s     r   Ú__init__ÚGSSTSig.__init__j   s   € Ø,ÔØˆŒ	Øˆ�	r   c                 ó.   • U =R                   U-  sl         g ©N)r7   ©r9   r7   s     r   ÚupdateÚGSSTSig.updateo   s   € Ø�	Š	�TÑŽ	r   c                 óL   • U R                   R                  U R                  5      $ r=   )r6   Úget_signaturer7   )r9   s    r   ÚsignÚGSSTSig.signr   s   € à×"Ñ"×0Ñ0°·±Ó;Ð;r   c                 óx   •  U R                   R                  U R                  U5      $ ! [         a    [        ef = fr=   )r6   Úverify_signaturer7   Ú	Exceptionr   )r9   Úexpecteds     r   ÚverifyÚGSSTSig.verifyv   s9   € ð	à×&Ñ&×7Ñ7¸¿	¹	À8ÓLÐLøÜó 	äÐð	ús   ‚%( ¨9)r7   r6   r8   N)
r   r	   r
   r   r   r:   r?   rC   rI   r   r   r   r   r3   r3   `   s   † ñòò
ò<õr   r3   c                   ó0   • \ rS rSrS rS r\S 5       rSrg)ÚGSSTSigAdapteré   c                 ó   • Xl         g r=   ©Úkeyring)r9   rP   s     r   r:   ÚGSSTSigAdapter.__init__€   s   € Ø�r   c                 óÐ   • X R                   ;   aW  U R                   U   n[        U[        5      (       a1  UR                  [        :X  a  U(       a  [
        R                  X1U5        U$ g r=   )rP   Ú
isinstanceÚKeyÚ	algorithmÚGSS_TSIGrL   Úparse_tkey_and_step)r9   ÚmessageÚkeynameÚkeys       r   Ú__call__ÚGSSTSigAdapter.__call__ƒ   sM   € Ø—l‘lÓ"Ø—,‘,˜wÑ'ˆCÜ˜#œs×#Ñ#¨¯©¼Ó(AÞÜ"×6Ñ6°sÀWÔMØˆJàr   c                 ó(  •  UR                  UR                  U[        R                  R                  [        R
                  R                  5      nU(       a,  US   R                  nUR                  nUR                  U5      $ g ! [         a     g f = f)Nr   )Ú
find_rrsetÚanswerÚdnsÚ
rdataclassÚANYÚ	rdatatypeÚTKEYrZ   ÚsecretÚstepÚKeyError)ÚclsrZ   rX   rY   ÚrrsetÚtokenr6   s          r   rW   Ú"GSSTSigAdapter.parse_tkey_and_step�   s}   € ð		Ø×&Ñ&Ø—‘ ¬¯©×);Ñ);¼S¿]¹]×=OÑ=OóˆEö Ø˜a™Ÿ™�Ø!$§¡�Ø%×*Ñ*¨5Ó1Ð1ð øô ó 	Ùð	ús   ‚B B Â
BÂBrO   N)	r   r	   r
   r   r:   r[   ÚclassmethodrW   r   r   r   r   rL   rL      s    † òòð ñó ór   rL   c                   ó  • \ rS rSrSr\\R                  \\R                  \
\R                  \\R                  S4\\R                  \\R                  S4\\R"                  \\R"                  S4\\R(                  0	rS rS rS rS	 rS
rg)ÚHMACTSigéŸ   zc
HMAC TSIG implementation.  This uses the HMAC python module to handle the
sign/verify operations.
r1   éÀ   é   c                 ó´  •  U R                   U   n[        U[        5      (       a'  [
        R                  " XS   S9U l        US   U l        O [
        R                  " XS9U l        S U l        U R                  R                  U l	        U R                  (       a#  U =R                  SU R                   3-  sl	        g g ! [         a    [        SU S35      ef = f)NzTSIG algorithm z is not supportedr   )Ú	digestmodé   Ú-)
Ú_hashesrg   ÚNotImplementedErrorrS   ÚtupleÚhmacÚnewÚhmac_contextÚsizer8   )r9   rZ   rU   Úhashinfos       r   r:   ÚHMACTSig.__init__±   s¼   € ð	VØ—|‘| IÑ.ˆHô
 �h¤×&Ñ&Ü $§¢¨À¹Ñ DˆDÔØ  ™ˆD�Iä $§¢¨Ñ AˆDÔØˆDŒIØ×%Ñ%×*Ñ*ˆŒ	Ø�9�9Ø�IŠI˜1˜TŸY™Y˜K˜Ñ(ŽIð øô ó 	VÜ%¨¸	°{ÐBSÐ&TÓUÐUð	Vús   ‚B= Â=Cc                 ó8   • U R                   R                  U5      $ r=   )r{   r?   r>   s     r   r?   ÚHMACTSig.updateÂ   s   € Ø× Ñ ×'Ñ'¨Ó-Ð-r   c                 ó€   • U R                   R                  5       nU R                  (       a  US U R                  S-   nU$ )Né   )r{   Údigestr|   )r9   rƒ   s     r   rC   ÚHMACTSig.signÅ   s7   € à×"Ñ"×)Ñ)Ó+ˆØ�9�9ØÐ.˜tŸy™y¨A™~Ð/ˆFØˆr   c                 óf   • U R                  5       n[        R                  " X!5      (       d  [        eg r=   )rC   ry   Úcompare_digestr   )r9   rH   Úmacs      r   rI   ÚHMACTSig.verifyÌ   s)   € à�i‰i‹kˆÜ×"Ò" 3×1Ñ1ÜÐð 2r   )r{   r8   r|   N)r   r	   r
   r   r   Ú	HMAC_SHA1ÚhashlibÚsha1ÚHMAC_SHA224Úsha224ÚHMAC_SHA256Úsha256ÚHMAC_SHA256_128ÚHMAC_SHA384Úsha384ÚHMAC_SHA384_192ÚHMAC_SHA512Úsha512ÚHMAC_SHA512_256ÚHMAC_MD5Úmd5rv   r:   r?   rC   rI   r   r   r   r   rn   rn   Ÿ   s„   † ñð 	�7—<‘<Ø�W—^‘^Ø�W—^‘^Ø˜'Ÿ.™.¨#Ð.Ø�W—^‘^Ø˜'Ÿ.™.¨#Ð.Ø�W—^‘^Ø˜'Ÿ.™.¨#Ð.Ø�'—+‘+ð
€Gò)ò".òõr   rn   c                 óX  • U=(       a    U(       + nU(       aR  [        U5      nU(       a@  UR                  [        R                  " S[	        U5      5      5        UR                  U5        UR                  [        R                  " SUR
                  5      5        UR                  U SS 5        U(       a�  UR                  UR                  R                  5       5        UR                  [        R                  " S[        R                  R                  5      5        UR                  [        R                  " SS5      5        Uc  UR                  nUS-	  S-  nUS-  n	[        R                  " S	X‰UR                  5      n
[	        UR                  5      nUS:”  a  [        S
5      eU(       al  UR                  UR                  R                  5       U
-   5        UR                  [        R                  " SUR                   U5      UR                  -   5        U$ UR                  U
5        U$ )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!Ir   r,   iÿÿ  l   ÿÿ z!HIHz TSIG Other Data is > 65535 bytesz!HH)Úget_contextr?   ÚstructÚpackÚlenÚoriginal_idr8   Úto_digestabler`   ra   rb   Útime_signedÚfudgeÚotherÚ
ValueErrorrU   Úerror)ÚwirerZ   ÚrdataÚtimeÚrequest_macÚctxÚmultiÚfirstÚ
upper_timeÚ
lower_timeÚtime_encodedÚ	other_lens               r   Ú_digestr²   Ó   sŒ  € ð —˜Ô€EÞÜ˜#ÓˆÞØ�J‰J”v—{’{ 4¬¨[Ó)9Ó:Ô;Ø�J‰J�{Ô#Ø‡J�JŒv�{Š{˜4 ×!2Ñ!2Ó3Ô4Ø‡J�Jˆt�A�BˆxÔÞØ�
‰
�3—8‘8×)Ñ)Ó+Ô,Ø�
‰
”6—;’;˜t¤S§^¡^×%7Ñ%7Ó8Ô9Ø�
‰
”6—;’;˜t QÓ'Ô(Ø�|Ø× Ñ ˆØ˜"‘* Ñ&€JØ˜
Ñ"€JÜ—;’;˜v z¸u¿{¹{ÓK€LÜ�E—K‘KÓ €IØ�5ÓÜÐ;Ó<Ð<ÞØ�
‰
�3—=‘=×.Ñ.Ó0°<Ñ?Ô@Ø�
‰
”6—;’;˜u e§k¡k°9Ó=ÀÇÁÑKÔLð €Jð 	�
‰
�<Ô Ø€Jr   c                 ó¬   • U(       aM  [        U 5      nUR                  [        R                  " S[	        U5      5      5        UR                  U5        U$ g)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
rš   N)rœ   r?   r�   rž   rŸ   )rZ   r‡   r¬   r«   s       r   Ú_maybe_start_digestr´   ö   s?   € ö
 Ü˜#ÓˆØ�
‰
”6—;’;˜t¤S¨£XÓ.Ô/Ø�
‰
�3ŒØˆ
àr   c           	      óx   • [        XX#XEU5      nUR                  5       nUR                  X7S9nU[        XU5      4$ )af  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¢   r‡   )r²   rC   Úreplacer´   )	r§   rZ   r¨   r©   rª   r«   r¬   r‡   Útsigs	            r   rC   rC     sB   € ô �$˜U¨+¸EÓ
B€CØ
�(‰(‹*€CØ�=‰= Tˆ=Ð3€DàÔ% c°Ó6Ð7Ð7r   c	           	      óÎ  • [         R                  " SU SS 5      u  n	U	S:X  a  [        R                  R                  eU	S-  n	U SS [         R
                  " SU	5      -   U SU -   n
UR                  S:w  aÐ  UR                  [        R                  R                  :X  a  [        eUR                  [        R                  R                  :X  a  [        eUR                  [        R                  R                  :X  a  [        eUR                  [        R                  R                  :X  a  [        e[!        SUR                  -  5      e[#        UR$                  U-
  5      UR&                  :”  a  [(        eUR*                  U:w  a  [,        eUR.                  UR.                  :w  a  [0        e[3        X¡USXWU5      nUR5                  UR6                  5        [9        XR6                  U5      $ )a2  Validate 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 objectrš   é
   é   r   rt   zunknown TSIG error code %dN)r�   Úunpackr`   Ú	exceptionÚ	FormErrorrž   r¦   ÚrcodeÚBADSIGr!   ÚBADKEYr   ÚBADTIMEr$   ÚBADTRUNCr'   r   Úabsr¢   r£   r   r8   r   rU   r   r²   rI   r‡   r´   )r§   rZ   Úownerr¨   Únowrª   Ú
tsig_startr«   r¬   ÚadcountÚnew_wires              r   ÚvalidaterÉ     so  € ô —’˜t T¨"¨R [Ó1�J€WØ�!ƒ|Ü�m‰m×%Ñ%Ð%Øˆq�L€GØ�A�bˆzœFŸKšK¨¨gÓ6Ñ6¸¸bÀÐ9LÑL€HØ‡{�{�aÓØ�;‰;œ#Ÿ)™)×*Ñ*Ó*Ü"Ð"Ø�[‰[œCŸI™I×,Ñ,Ó,ÜÐØ�[‰[œCŸI™I×-Ñ-Ó-ÜÐØ�[‰[œCŸI™I×.Ñ.Ó.Ü#Ð#äÐ8¸5¿;¹;ÑFÓGÐGÜ
ˆ5×Ñ˜sÑ"Ó# e§k¡kÓ1ÜˆØ
‡x�x�5ÓÜˆØ
‡}�}˜Ÿ™Ó'ÜÐÜ
�( ¨¨kÀÓ
F€CØ‡J�Jˆu�y‰yÔÜ˜s§I¡I¨uÓ5Ð5r   c                 ó”   • U R                   [        :X  a  [        U R                  5      $ [	        U R                  U R                   5      $ )z€Returns an HMAC context for the specified key.

@rtype: HMAC context
@raises NotImplementedError: I{algorithm} is not supported
)rU   rV   r3   re   rn   )rZ   s    r   rœ   rœ   :  s4   € ð ‡}�}œÓ Ü�s—z‘zÓ"Ð"ä˜Ÿ
™
 C§M¡MÓ2Ð2r   c                   ó,   • \ rS rSr\4S jrS rS rSrg)rT   iG  c                 ój  • [        U[        5      (       a  [        R                  R	                  U5      nXl        [        U[        5      (       a$  [
        R                  " UR                  5       5      nX l        [        U[        5      (       a  [        R                  R	                  U5      nX0l	        g r=   )
rS   Ústrr`   r8   Ú	from_textÚbase64ÚdecodebytesÚencodere   rU   )r9   r8   re   rU   s       r   r:   ÚKey.__init__H  sv   € Ü�dœC× Ñ Ü—8‘8×%Ñ% dÓ+ˆDØŒ	Ü�fœc×"Ñ"Ü×'Ò'¨¯©«Ó8ˆFØŒÜ�i¤×%Ñ%ÜŸ™×*Ñ*¨9Ó5ˆIØ"�r   c                 óâ   • [        U[        5      =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r=   )rS   rT   r8   re   rU   )r9   r¤   s     r   Ú__eq__Ú
Key.__eq__S  sR   € ä�uœcÓ"÷ 2Ø—	‘	˜UŸZ™ZÑ'÷2à—‘˜uŸ|™|Ñ+÷2ð —‘ %§/¡/Ñ1ð		
r   c                 óä   • SU R                    S3SU R                   S3-   nU R                  [        :w  a5  US[        R                  " U R
                  5      R                  5        S3-  nUS-  nU$ )Nz<DNS key name='z', zalgorithm='Ú'z
, secret='Ú>)r8   rU   rV   rÏ   Ú	b64encodere   Údecode)r9   Úrs     r   Ú__repr__ÚKey.__repr__[  sm   € Ø˜dŸi™i˜[¨Ð,°¸T¿^¹^Ð<LÈAÐ/NÑNˆØ�>‰>œXÓ%Ø�:œf×.Ò.¨t¯{©{Ó;×BÑBÓDÐEÀQÐGÑGˆAØ	ˆS‰ˆØˆr   )rU   r8   re   N)	r   r	   r
   r   Údefault_algorithmr:   rÔ   rÜ   r   r   r   r   rT   rT   G  s   † Ø/@ô 	#ò
õr   rT   )NNNN)NNNF)NF),r   rÏ   rŠ   ry   r�   Údns.exceptionr`   Údns.nameÚ	dns.rcodeÚdns.rdataclassr¼   ÚDNSExceptionr   r   r   r   r   r   r!   r$   r'   r8   rÎ   r—   r‰   rŒ   rŽ   r�   r‘   r“   r”   r–   rV   rÞ   Ú	mac_sizesr3   rL   rn   r²   r´   rC   rÉ   rœ   rT   r   r   r   Ú<module>rå      s!  ðñ$ ã Û Û Û ã Û Û Û ôCˆc�m‰m×(Ñ(ô Cô.�3—=‘=×-Ñ-ô .ô=ˆS�]‰]×'Ñ'ô =ô5�3—=‘=×-Ñ-ô 5ôF�—‘×*Ñ*ô Fô/�ô /ô5�yô 5ô0�)ô 0ôH˜	ô Hð �8‰8×ÑÐ8Ó9€Ø�H‰H×Ñ˜{Ó+€	Ø�h‰h× Ñ  Ó/€Ø�h‰h× Ñ  Ó/€Ø—(‘(×$Ñ$Ð%6Ó7€Ø�h‰h× Ñ  Ó/€Ø—(‘(×$Ñ$Ð%6Ó7€Ø�h‰h× Ñ  Ó/€Ø—(‘(×$Ñ$Ð%6Ó7€Ø�8‰8×Ñ˜jÓ)€àÐ ð ˆrØ�Ø�Ø�RØ�Ø�RØ�Ø�RØˆbØˆcð€	÷ñ ÷>ñ ÷@1ñ 1ôh òFô8ð" LQô#6òL
3÷ò r   