ó
    ÌÅLgì  ã                   ó´   • S SK r S SKJr  S SKJr  S SKJrJr  S SKJ	r	J
r
  S SKJr  S SKJr   " S S	\
5      r " S
 S\	5      r " S S\5      r " S S\5      rg)é    N)Údefault_backend)Úhashes)ÚdsaÚutils)ÚCryptographyPrivateKeyÚCryptographyPublicKey)Ú	Algorithm)ÚDNSKEYc                   óÆ   • \ rS rSr% \R
                  \S'   \R
                  r\R                  r
\R                  " 5       rS\S\SS4S jrS\4S jr\S\SS 4S	 j5       rS
rg)Ú	PublicDSAé   ÚkeyÚ	signatureÚdataÚreturnNc                 óâ   • USS nUSS  n[         R                  " [        R                  US5      [        R                  US5      5      nU R                  R                  XRU R                  5        g )Né   é   Úbig)r   Úencode_dss_signatureÚintÚ
from_bytesr   ÚverifyÚchosen_hash)Úselfr   r   Úsig_rÚsig_sÚsigs         Ú4/usr/lib/python3/dist-packages/dns/dnssecalgs/dsa.pyr   ÚPublicDSA.verify   s]   € Ø˜!˜B�ˆØ˜"˜#�ˆÜ×(Ò(Ü�N‰N˜5 %Ó(¬#¯.©.¸ÀÓ*Fó
ˆð 	�‰�‰˜ 4×#3Ñ#3Õ4ó    c                 ó  • U R                   R                  5       nU R                   R                  S-  S-
  S-  nUS:”  a  [        S5      eSUS-  -   n[        R
                  " SU5      nXAR                  R                  R                  SS5      -  nXAR                  R                  R                  US5      -  nXAR                  R                  R                  US5      -  nXAR                  R                  US5      -  nU$ )z,Encode a public key per RFC 2536, section 2.é   é@   zunsupported DSA key sizeú!Bé   r   )r   Úpublic_numbersÚkey_sizeÚ
ValueErrorÚstructÚpackÚparameter_numbersÚqÚto_bytesÚpÚgÚy)r   ÚpnÚdsa_tÚoctetsÚress        r   Úencode_key_bytesÚPublicDSA.encode_key_bytes   sá   € à�X‰X×$Ñ$Ó&ˆØ—‘×"Ñ" aÑ'¨"Ñ,°Ñ2ˆØ�1‹9ÜÐ7Ó8Ð8Ø�e˜a‘i‘ˆÜ�kŠk˜$ Ó&ˆØ×#Ñ#×%Ñ%×.Ñ.¨r°5Ó9Ñ9ˆØ×#Ñ#×%Ñ%×.Ñ.¨v°uÓ=Ñ=ˆØ×#Ñ#×%Ñ%×.Ñ.¨v°uÓ=Ñ=ˆØ�t‰t�}‰}˜V UÓ+Ñ+ˆØˆ
r!   c                 ó   • U R                  U5        UR                  n[        R                  " SUSS 5      u  nUSS  nSUS-  -   nUSS nUSS  nUSU nX$S  nUSU nX$S  nUSU nU " [        R
                  " [        R                  US5      [        R                  " [        R                  US5      [        R                  US5      [        R                  US5      5      5      R                  [        5       5      S9$ )	Nr%   r   r   r$   r#   r&   r   ©r   )Ú!_ensure_algorithm_key_combinationr   r*   Úunpackr   ÚDSAPublicNumbersr   r   ÚDSAParameterNumbersÚ
public_keyr   )	Úclsr   ÚkeyptrÚtr4   Údsa_qÚdsa_pÚdsa_gÚdsa_ys	            r   Úfrom_dnskeyÚPublicDSA.from_dnskey(   s  € à×-Ñ-¨cÔ2Ø—‘ˆÜ�}Š}˜T 6¨!¨A ;Ó/‰ˆØ˜˜�ˆØ�a˜!‘e‘ˆØ�q˜�ˆØ˜˜�ˆØ�q˜Ð ˆØ˜�ˆØ�q˜Ð ˆØ˜�ˆØ�q˜Ð ˆÙÜ×$Ò$Ü—‘˜u eÓ,Ü×'Ò'Ü—N‘N 5¨%Ó0Ü—N‘N 5¨%Ó0Ü—N‘N 5¨%Ó0óó÷ ‰jœÓ*Ó+ñ	
ð 		
r!   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚDSAPublicKeyÚ__annotations__Úkey_clsr	   ÚDSAÚ	algorithmr   ÚSHA1r   Úbytesr   r6   Úclassmethodr
   rF   Ú__static_attributes__rH   r!   r   r   r      su   ‡ Ø	×	Ñ	ÓØ×Ñ€GØ—‘€IØ—+’+“-€Kð5 ð 5¨Uð 5°tô 5ð %ô ð ð
˜fð 
¨ó 
ó ó
r!   r   c            	       óŽ   • \ rS rSr% \R
                  \S'   \R
                  r\r	  SS\
S\S\S\
4S jjr\S\SS 4S	 j5       rS
rg)Ú
PrivateDSAéB   r   r   r   Údeterministicr   c                 óú  • U R                   R                  5       nUR                  S:”  a  [        S5      eU R                   R	                  XR
                  R                  5      n[        R                  " U5      u  pgUR                  S-  S-
  S-  nSn	[        R                  " SU5      [        R                  XiSS9-   [        R                  XySS9-   n
U(       a  U R                  5       R                  X¡5        U
$ )	z1Sign using a private key per RFC 2536, section 3.i   zDSA key size overflowr#   r$   r&   r%   r   )ÚlengthÚ	byteorder)r   r>   r(   r)   ÚsignÚ
public_clsr   r   Údecode_dss_signaturer*   r+   r   r.   r   )r   r   r   rY   Úpublic_dsa_keyÚder_signatureÚdsa_rÚdsa_sr3   r4   r   s              r   r]   ÚPrivateDSA.signG   sÜ   € ð Ÿ™×,Ñ,Ó.ˆØ×"Ñ" TÓ)ÜÐ4Ó5Ð5ØŸ™Ÿ™ d¯O©O×,GÑ,GÓHˆÜ×1Ò1°-Ó@‰ˆØ×(Ñ(¨AÑ-°Ñ2°qÑ8ˆØˆä�KŠK˜˜eÓ$Ü�l‰l˜5¸5ˆlÐAñBä�l‰l˜5¸5ˆlÐAñBð 	ö
 Ø�O‰OÓ×$Ñ$ YÔ5ØÐr!   r(   c                 ó2   • U " [         R                  " US9S9$ )N)r(   r9   )r   Úgenerate_private_key)r?   r(   s     r   ÚgenerateÚPrivateDSA.generate^   s   € áÜ×(Ò(°(Ñ;ñ
ð 	
r!   rH   N)FT)rI   rJ   rK   rL   r   ÚDSAPrivateKeyrN   rO   r   r^   rS   Úboolr]   rT   r   rg   rU   rH   r!   r   rW   rW   B   ss   ‡ Ø	×	Ñ	ÓØ×Ñ€GØ€Jð
 Ø"ñ	àðð ðð ð	ð
 
õð. ð
 ð 
¨ó 
ó ó
r!   rW   c                   ó,   • \ rS rSr\R
                  rSrg)ÚPublicDSANSEC3SHA1ée   rH   N)rI   rJ   rK   rL   r	   ÚDSANSEC3SHA1rQ   rU   rH   r!   r   rl   rl   e   s   † Ø×&Ñ&ƒIr!   rl   c                   ó   • \ rS rSr\rSrg)ÚPrivateDSANSEC3SHA1éi   rH   N)rI   rJ   rK   rL   rl   r^   rU   rH   r!   r   rp   rp   i   s   † Ø#ƒJr!   rp   )r*   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   Ú)cryptography.hazmat.primitives.asymmetricr   r   Údns.dnssecalgs.cryptographyr   r   Údns.dnssectypesr	   Údns.rdtypes.ANY.DNSKEYr
   r   rW   rl   rp   rH   r!   r   Ú<module>rx      sN   ðÛ å 8Ý 1ß @ç UÝ %Ý )ô3
Ð%ô 3
ôl 
Ð'ô  
ôF'˜ô 'ô$˜*õ $r!   