ó
    ÌÅLgd  ã                   óØ   • 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 " S S\5      r " S S\5      rg)é    )Údefault_backend)Úhashes)ÚecÚutils)ÚCryptographyPrivateKeyÚCryptographyPublicKey)Ú	Algorithm)ÚDNSKEYc                   óÜ   • \ rS rSr% \R
                  \S'   \R
                  r\\S'   \	R                  \S'   \R                  \S'   \\S'   S\S\S	S
4S jrS	\4S jr\S\S	S 4S j5       rSrg
)ÚPublicECDSAé
   ÚkeyÚ	algorithmÚchosen_hashÚcurveÚoctetsÚ	signatureÚdataÚreturnNc                 ó0  • USU R                    nXR                   S  n[        R                  " [        R	                  US5      [        R	                  US5      5      nU R
                  R                  XR[        R                  " U R                  5      5        g )Nr   Úbig)
r   r   Úencode_dss_signatureÚintÚ
from_bytesr   Úverifyr   ÚECDSAr   )Úselfr   r   Úsig_rÚsig_sÚsigs         Ú6/usr/lib/python3/dist-packages/dns/dnssecalgs/ecdsa.pyr   ÚPublicECDSA.verify   sn   € Ø˜!˜dŸk™kÐ*ˆØŸ+™+˜-Ð(ˆÜ×(Ò(Ü�N‰N˜5 %Ó(¬#¯.©.¸ÀÓ*Fó
ˆð 	�‰�‰˜¤2§8¢8¨D×,<Ñ,<Ó#=Õ>ó    c                 óÐ   • U R                   R                  5       nUR                  R                  U R                  S5      UR
                  R                  U R                  S5      -   $ )z,Encode a public key per RFC 6605, section 4.r   )r   Úpublic_numbersÚxÚto_bytesr   Úy)r   Úpns     r!   Úencode_key_bytesÚPublicECDSA.encode_key_bytes   sE   € à�X‰X×$Ñ$Ó&ˆØ�t‰t�}‰}˜TŸ[™[¨%Ó0°2·4±4·=±=ÀÇÁÈeÓ3TÑTÐTr#   c           
      óh  • U R                  U5        UR                  SU R                   nUR                  U R                  U R                  S-   nU " [        R                  " U R
                  [        R                  US5      [        R                  US5      S9R                  [        5       5      S9$ )Nr   é   r   )r   r&   r(   ©r   )
Ú!_ensure_algorithm_key_combinationr   r   r   ÚEllipticCurvePublicNumbersr   r   r   Ú
public_keyr   )Úclsr   Úecdsa_xÚecdsa_ys       r!   Úfrom_dnskeyÚPublicECDSA.from_dnskey   s�   € à×-Ñ-¨cÔ2Ø—'‘'˜!˜cŸj™jÐ)ˆØ—'‘'˜#Ÿ*™* s§z¡z°A¡~Ð6ˆÙÜ×-Ò-Ø—i‘iÜ—.‘. ¨%Ó0Ü—.‘. ¨%Ó0ñ÷ ‰jœÓ*Ó+ñ
ð 	
r#   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚEllipticCurvePublicKeyÚ__annotations__Úkey_clsr	   r   ÚHashAlgorithmÚEllipticCurver   Úbytesr   r*   Úclassmethodr
   r5   Ú__static_attributes__r7   r#   r!   r   r   
   s†   ‡ Ø	×	"Ñ	"Ó"Ø×'Ñ'€GØÓØ×%Ñ%Ó%Ø×ÑÓØƒKð? ð ?¨Uð ?°tô ?ðU %ô Uð
 ð

˜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 j5       rS	rg
)ÚPrivateECDSAé-   r   r   r   Údeterministicr   c                 ó¬  • [         R                  " U R                  R                  US9nU R                  R                  X5      n[        R                  " U5      u  pg[        R                  X`R                  R                  SS9[        R                  XpR                  R                  SS9-   nU(       a  U R                  5       R                  X�5        U$ )z1Sign using a private key per RFC 6605, section 4.)Údeterministic_signingr   )ÚlengthÚ	byteorder)r   r   Ú
public_clsr   r   Úsignr   Údecode_dss_signaturer   r'   r   r1   r   )	r   r   r   rG   r   Úder_signatureÚdsa_rÚdsa_sr   s	            r!   rM   ÚPrivateECDSA.sign2   s©   € ô —H’HØ�O‰O×'Ñ'¸}ñ
ˆ	ð Ÿ™Ÿ™ dÓ6ˆÜ×1Ò1°-Ó@‰ˆÜ—L‘LØŸ/™/×0Ñ0¸Eð !ð 
ä�L‰L˜§¡×'=Ñ'=ÈˆLÐOñPˆ	ö Ø�O‰OÓ×$Ñ$ YÔ5ØÐr#   c                 ól   • U " [         R                  " U R                  R                  [	        5       S9S9$ )N)r   Úbackendr.   )r   Úgenerate_private_keyrL   r   r   )r2   s    r!   ÚgenerateÚPrivateECDSA.generateE   s/   € áÜ×'Ò'Ø—n‘n×*Ñ*´OÓ4Eññ
ð 	
r#   r7   N)FT)r   rE   )r8   r9   r:   r;   r   ÚEllipticCurvePrivateKeyr=   r>   r   rL   rA   ÚboolrM   rB   rV   rC   r7   r#   r!   rE   rE   -   se   ‡ Ø	×	#Ñ	#Ó#Ø×(Ñ(€GØ€Jð
 Ø"ñ	àðð ðð ð	ð
 
õð& ó
ó ó
r#   rE   c                   ót   • \ rS rSr\R
                  r\R                  " 5       r	\
R                  " 5       rSrSrg)ÚPublicECDSAP256SHA256éN   é    r7   N)r8   r9   r:   r;   r	   ÚECDSAP256SHA256r   r   ÚSHA256r   r   Ú	SECP256R1r   r   rC   r7   r#   r!   r[   r[   N   ó(   † Ø×)Ñ)€IØ—-’-“/€KØ�LŠL‹N€EØƒFr#   r[   c                   ó   • \ rS rSr\rSrg)ÚPrivateECDSAP256SHA256éU   r7   N)r8   r9   r:   r;   r[   rL   rC   r7   r#   r!   rc   rc   U   ó   † Ø&ƒJr#   rc   c                   ót   • \ rS rSr\R
                  r\R                  " 5       r	\
R                  " 5       rSrSrg)ÚPublicECDSAP384SHA384éY   é0   r7   N)r8   r9   r:   r;   r	   ÚECDSAP384SHA384r   r   ÚSHA384r   r   Ú	SECP384R1r   r   rC   r7   r#   r!   rg   rg   Y   ra   r#   rg   c                   ó   • \ rS rSr\rSrg)ÚPrivateECDSAP384SHA384é`   r7   N)r8   r9   r:   r;   rg   rL   rC   r7   r#   r!   rn   rn   `   re   r#   rn   N)Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   Ú)cryptography.hazmat.primitives.asymmetricr   r   Údns.dnssecalgs.cryptographyr   r   Údns.dnssectypesr	   Údns.rdtypes.ANY.DNSKEYr
   r   rE   r[   rc   rg   rn   r7   r#   r!   Ú<module>rv      sc   ðÝ 8Ý 1ß ?ç UÝ %Ý )ô 
Ð'ô  
ôF
Ð)ô 
ôB˜Kô ô'˜\ô 'ô˜Kô ô'˜\õ 'r#   