Ë
    š,hì  ã                   ó´   — d dl Z d dlmZ d dlmZ d dlmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZ  G d„ d	e
«      Z G d
„ de	«      Z G d„ de«      Z G d„ de«      Zy)é    N)Údefault_backend)Úhashes)ÚdsaÚutils)ÚCryptographyPrivateKeyÚCryptographyPublicKey)Ú	Algorithm)ÚDNSKEYc                   ó¸   — e Zd ZU ej                  ed<   ej                  Zej                  Z	 e
j                  «       Zdededdfd„Zdefd„Zededd fd„«       Zy)	Ú	PublicDSAÚkeyÚ	signatureÚdataÚreturnNc                 óâ   — |dd }|dd  }t        j                  t        j                  |d«      t        j                  |d«      «      }| j                  j                  ||| j                  «       y )Né   é   Úbig)r   Úencode_dss_signatureÚintÚ
from_bytesr   ÚverifyÚchosen_hash)Úselfr   r   Úsig_rÚsig_sÚsigs         úT/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/dns/dnssecalgs/dsa.pyr   zPublicDSA.verify   s_   € Ø˜!˜BˆØ˜"˜#ˆÜ×(Ñ(ÜN‰N˜5 %Ó(¬#¯.©.¸ÀÓ*Fó
ˆð 	‰‰˜˜T 4×#3Ñ#3Õ4ó    c                 ó  — | j                   j                  «       }| j                   j                  dz  dz
  dz  }|dkD  rt        d«      ‚d|dz  z   }t	        j
                  d|«      }||j                  j                  j                  dd«      z  }||j                  j                  j                  |d«      z  }||j                  j                  j                  |d«      z  }||j                  j                  |d«      z  }|S )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_byteszPublicDSA.encode_key_bytes   sé   € àX‰X×$Ñ$Ó&ˆØ—‘×"Ñ" aÑ'¨"Ñ,°Ñ2ˆØ1Š9ÜÐ7Ó8Ð8Øe˜a‘i‘ˆÜk‰k˜$ Ó&ˆØˆr×#Ñ#×%Ñ%×.Ñ.¨r°5Ó9Ñ9ˆØˆr×#Ñ#×%Ñ%×.Ñ.¨v°uÓ=Ñ=ˆØˆr×#Ñ#×%Ñ%×.Ñ.¨v°uÓ=Ñ=ˆØˆrt‰t}‰}˜V UÓ+Ñ+ˆØˆ
r   c                 ó  — | j                  |«       |j                  }t        j                  d|dd «      \  }|dd  }d|dz  z   }|dd }|dd  }|d| }||d  }|d| }||d  }|d| } | t	        j
                  t        j                  |d«      t	        j                  t        j                  |d«      t        j                  |d«      t        j                  |d«      «      «      j                  t        «       «      ¬«      S )	Nr#   r   r   r"   r!   r$   r   ©r   )Ú!_ensure_algorithm_key_combinationr   r(   Úunpackr   ÚDSAPublicNumbersr   r   ÚDSAParameterNumbersÚ
public_keyr   )	Úclsr   ÚkeyptrÚtr2   Údsa_qÚdsa_pÚdsa_gÚdsa_ys	            r   Úfrom_dnskeyz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__r   ÚDSAPublicKeyÚ__annotations__Úkey_clsr	   ÚDSAÚ	algorithmr   ÚSHA1r   Úbytesr   r4   Úclassmethodr
   rC   © r   r   r   r      sw   … Ø	×	Ñ	ÓØ×Ñ€GØ—‘€IØ&—+‘+“-€Kð5 ð 5¨Uð 5°tó 5ð %ó ð ð
˜fð 
¨ò 
ó ñ
r   r   c            	       ó€   — e Zd ZU ej                  ed<   ej                  ZeZ	 	 d
de	de
de
de	fd„Zededd fd„«       Zy	)Ú
PrivateDSAr   r   r   Údeterministicr   c                 ó   — | j                   j                  «       }|j                  dkD  rt        d«      ‚| j                   j	                  || j
                  j                  «      }t        j                  |«      \  }}|j                  dz  dz
  dz  }d}	t        j                  d|«      t        j                  ||	d¬«      z   t        j                  ||	d¬«      z   }
|r | j                  «       j                  |
|«       |
S )	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   rR   Úpublic_dsa_keyÚder_signatureÚdsa_rÚdsa_sr1   r2   r   s              r   rV   zPrivateDSA.signG   sæ   € ð Ÿ™×,Ñ,Ó.ˆØ×"Ñ" TÒ)ÜÐ4Ó5Ð5ØŸ™Ÿ™ d¨D¯O©O×,GÑ,GÓHˆÜ×1Ñ1°-Ó@‰ˆˆuØ×(Ñ(¨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                 ó<   —  | t        j                  |¬«      ¬«      S )N)r&   r6   )r   Úgenerate_private_key)r<   r&   s     r   ÚgeneratezPrivateDSA.generate^   s   € áÜ×(Ñ(°(Ô;ô
ð 	
r   N)FT)rD   rE   rF   r   ÚDSAPrivateKeyrH   rI   r   rW   rM   ÚboolrV   rN   r   r_   rO   r   r   rQ   rQ   B   ss   … Ø	×	Ñ	ÓØ×Ñ€GØ€Jð
 Ø"ñ	àðð ðð ð	ð
 
óð. ð
 ð 
¨ò 
ó ñ
r   rQ   c                   ó$   — e Zd Zej                  Zy)ÚPublicDSANSEC3SHA1N)rD   rE   rF   r	   ÚDSANSEC3SHA1rK   rO   r   r   rc   rc   e   s   „ Ø×&Ñ&Ir   rc   c                   ó   — e Zd ZeZy)ÚPrivateDSANSEC3SHA1N)rD   rE   rF   rc   rW   rO   r   r   rf   rf   i   s   „ Ø#Jr   rf   )r(   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   Ú)cryptography.hazmat.primitives.asymmetricr   r   Údns.dnssecalgs.cryptographyr   r   Údns.dnssectypesr	   Údns.rdtypes.ANY.DNSKEYr
   r   rQ   rc   rf   rO   r   r   ú<module>rm      sN   ðÛ å 8Ý 1ß @ç UÝ %Ý )ô3
Ð%ô 3
ôl 
Ð'ô  
ôF'˜ô 'ô$˜*õ $r   