ó
    ÌÅLg&  ã                   ól  • S SK r 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 " S S\5      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 " S S\5      rg) é    N)Údefault_backend)Úhashes)ÚpaddingÚrsa)ÚCryptographyPrivateKeyÚCryptographyPublicKey)Ú	Algorithm)ÚDNSKEYc                   ó´   • \ rS rSr% \R
                  \S'   \R
                  r\\S'   \	R                  \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)Ú	PublicRSAé   ÚkeyÚ	algorithmÚchosen_hashÚ	signatureÚdataÚreturnNc                 óx   • U R                   R                  X[        R                  " 5       U R                  5        g )N)r   Úverifyr   ÚPKCS1v15r   )Úselfr   r   s      Ú4/usr/lib/python3/dist-packages/dns/dnssecalgs/rsa.pyr   ÚPublicRSA.verify   s%   € Ø�‰�‰˜	¬×)9Ò)9Ó);¸T×=MÑ=MÕNó    c                 ó\  • U R                   R                  5       n[        R                  " [        R                  UR                  5      S-  5      n[        R                  UR                  USS9nUS:”  a  S[        R                  " SU5      -   nO[        R                  " SU5      nUR                  R                  5       S:  d  UR                  R                  5       S	:”  a  [        S
5      eXC-   UR                  R                  UR                  R                  5       S-   S-  S5      -   $ )z,Encode a public key per RFC 3110, section 2.é   Úbig)ÚlengthÚ	byteorderéÿ   ó    ú!Hú!Bi   i   zunsupported RSA key lengthé   )r   Úpublic_numbersÚmathÚceilÚintÚ
bit_lengthÚeÚto_bytesÚstructÚpackÚnÚ
ValueError)r   ÚpnÚ_exp_lenÚexpÚ
exp_headers        r   Úencode_key_bytesÚPublicRSA.encode_key_bytes   sÛ   € à�X‰X×$Ñ$Ó&ˆÜ—9’9œSŸ^™^¨B¯D©DÓ1°AÑ5Ó6ˆÜ�l‰l˜2Ÿ4™4¨¸EˆlÐBˆØ�c‹>Ø¤§¢¨T°8Ó!<Ñ<‰JäŸš T¨8Ó4ˆJØ�4‰4�?‰?Ó˜sÓ" b§d¡d§o¡oÓ&7¸$Ó&>ÜÐ9Ó:Ð:ØÑ "§$¡$§-¡-°·±·±Ó1BÀQÑ1FÈ1Ñ0LÈeÓ"TÑTÐTr   c           	      ó’  • U R                  U5        UR                  n[        R                  " SUSS 5      u  nUSS  nUS:X  a!  [        R                  " SUSS 5      u  nUSS  nUSU nX#S  nU " [        R
                  " [        R                  US5      [        R                  US5      5      R                  [        5       5      S9$ )Nr#   r   é   r"   é   r   ©r   )
Ú!_ensure_algorithm_key_combinationr   r,   Úunpackr   ÚRSAPublicNumbersr(   Ú
from_bytesÚ
public_keyr   )Úclsr   ÚkeyptrÚbytes_Úrsa_eÚrsa_ns         r   Úfrom_dnskeyÚPublicRSA.from_dnskey#   s¾   € à×-Ñ-¨cÔ2Ø—‘ˆÜ—M’M $¨¨q°¨Ó4‰	ˆØ˜˜�ˆØ�Q‹;ÜŸš d¨F°1°Q¨KÓ8‰IˆVØ˜A˜B�ZˆFØ�q˜Ð ˆØ�w�ˆÙÜ×$Ò$Ü—‘˜u eÓ,¬c¯n©n¸UÀEÓ.Jóç‰jœÓ*Ó+ñ
ð 	
r   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚRSAPublicKeyÚ__annotations__Úkey_clsr	   r   ÚHashAlgorithmÚbytesr   r4   Úclassmethodr
   rD   Ú__static_attributes__rF   r   r   r   r      sy   ‡ Ø	×	Ñ	ÓØ×Ñ€GØÓØ×%Ñ%Ó%ðO ð O¨Uð O°tô OðU %ô Uð ð
˜fð 
¨ó 
ó ó
r   r   c            	       ó’   • \ rS rSr% \R
                  \S'   \R
                  r\r	Sr
  SS\S\S\S\4S jjr\S	\SS 4S
 j5       rSrg)Ú
PrivateRSAé5   r   i  r   r   Údeterministicr   c                 óÚ   • U R                   R                  U[        R                  " 5       U R                  R
                  5      nU(       a  U R                  5       R                  XA5        U$ )z1Sign using a private key per RFC 3110, section 3.)r   Úsignr   r   Ú
public_clsr   r>   r   )r   r   r   rU   r   s        r   rW   ÚPrivateRSA.sign;   sK   € ð —H‘H—M‘M $¬×(8Ò(8Ó(:¸D¿O¹O×<WÑ<WÓXˆ	ÞØ�O‰OÓ×$Ñ$ YÔ5ØÐr   Úkey_sizec                 óZ   • U " [         R                  " U R                  U[        5       S9S9$ )N)Úpublic_exponentrZ   Úbackendr9   )r   Úgenerate_private_keyÚdefault_public_exponentr   )r?   rZ   s     r   ÚgenerateÚPrivateRSA.generateG   s/   € áÜ×(Ò(Ø #× ;Ñ ;Ø!Ü'Ó)ññ
ð 	
r   rF   N)FT)rG   rH   rI   rJ   r   ÚRSAPrivateKeyrL   rM   r   rX   r_   rO   ÚboolrW   rP   r(   r`   rQ   rF   r   r   rS   rS   5   sy   ‡ Ø	×	Ñ	ÓØ×Ñ€GØ€JØ#Ðð
 Ø"ñ	
àð
ð ð
ð ð	
ð
 
õ
ð ð
 ð 
¨ó 
ó ó
r   rS   c                   óN   • \ rS rSr\R
                  r\R                  " 5       r	Sr
g)ÚPublicRSAMD5éR   rF   N)rG   rH   rI   rJ   r	   ÚRSAMD5r   r   ÚMD5r   rQ   rF   r   r   re   re   R   s   † Ø× Ñ €IØ—*’*“,ƒKr   re   c                   ó   • \ rS rSr\rSrg)ÚPrivateRSAMD5éW   rF   N)rG   rH   rI   rJ   re   rX   rQ   rF   r   r   rj   rj   W   s   † ØƒJr   rj   c                   óN   • \ rS rSr\R
                  r\R                  " 5       r	Sr
g)ÚPublicRSASHA1é[   rF   N)rG   rH   rI   rJ   r	   ÚRSASHA1r   r   ÚSHA1r   rQ   rF   r   r   rm   rm   [   s   † Ø×!Ñ!€IØ—+’+“-ƒKr   rm   c                   ó   • \ rS rSr\rSrg)ÚPrivateRSASHA1é`   rF   N)rG   rH   rI   rJ   rm   rX   rQ   rF   r   r   rr   rr   `   s   † ØƒJr   rr   c                   óN   • \ rS rSr\R
                  r\R                  " 5       r	Sr
g)ÚPublicRSASHA1NSEC3SHA1éd   rF   N)rG   rH   rI   rJ   r	   ÚRSASHA1NSEC3SHA1r   r   rp   r   rQ   rF   r   r   ru   ru   d   s   † Ø×*Ñ*€IØ—+’+“-ƒKr   ru   c                   ó   • \ rS rSr\rSrg)ÚPrivateRSASHA1NSEC3SHA1éi   rF   N)rG   rH   rI   rJ   ru   rX   rQ   rF   r   r   ry   ry   i   s   † Ø'ƒJr   ry   c                   óN   • \ rS rSr\R
                  r\R                  " 5       r	Sr
g)ÚPublicRSASHA256ém   rF   N)rG   rH   rI   rJ   r	   Ú	RSASHA256r   r   ÚSHA256r   rQ   rF   r   r   r|   r|   m   ó   † Ø×#Ñ#€IØ—-’-“/ƒKr   r|   c                   ó   • \ rS rSr\rSrg)ÚPrivateRSASHA256ér   rF   N)rG   rH   rI   rJ   r|   rX   rQ   rF   r   r   r‚   r‚   r   ó   † Ø ƒJr   r‚   c                   óN   • \ rS rSr\R
                  r\R                  " 5       r	Sr
g)ÚPublicRSASHA512év   rF   N)rG   rH   rI   rJ   r	   Ú	RSASHA512r   r   ÚSHA512r   rQ   rF   r   r   r†   r†   v   r€   r   r†   c                   ó   • \ rS rSr\rSrg)ÚPrivateRSASHA512é{   rF   N)rG   rH   rI   rJ   r†   rX   rQ   rF   r   r   r‹   r‹   {   r„   r   r‹   )r&   r,   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   Ú)cryptography.hazmat.primitives.asymmetricr   r   Údns.dnssecalgs.cryptographyr   r   Údns.dnssectypesr	   Údns.rdtypes.ANY.DNSKEYr
   r   rS   re   rj   rm   rr   ru   ry   r|   r‚   r†   r‹   rF   r   r   Ú<module>r“      s°   ðÛ Û å 8Ý 1ß Bç UÝ %Ý )ô%
Ð%ô %
ôP
Ð'ô 
ô:�9ô ô
�Jô ô �Iô  ô
�Zô ô ˜Yô  ô
(˜jô (ô"�iô "ô
!�zô !ô"�iô "ô
!�zõ !r   