
    ,h&                     l   d dl Z 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 G d de      Z G d de      Z G d de      Z G d de      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)paddingrsa)CryptographyPrivateKeyCryptographyPublicKey)	Algorithm)DNSKEYc                       e Zd ZU ej                  ed<   ej                  Zeed<   ej                  ed<   de
de
ddfdZde
fd	Zededd fd
       Zy)	PublicRSAkey	algorithmchosen_hash	signaturedatareturnNc                 x    | j                   j                  ||t        j                         | j                         y )N)r   verifyr   PKCS1v15r   )selfr   r   s      T/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/dns/dnssecalgs/rsa.pyr   zPublicRSA.verify   s'    	4)9)9);T=M=MN    c                 X   | j                   j                         }t        j                  t        j                  |j                        dz        }t        j                  |j                  |d      }|dkD  rdt        j                  d|      z   }nt        j                  d|      }|j                  j                         dk  s|j                  j                         d	kD  rt        d
      ||z   |j                  j                  |j                  j                         dz   dz  d      z   S )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_byteszPublicRSA.encode_key_bytes   s    XX$$&99S^^BDD1A56ll244ElBc>T8!<<JT84J44??s"bddoo&7$&>9::C"$$--1BQ1F10Le"TTTr   c           	         | j                  |       |j                  }t        j                  d|dd       \  }|dd  }|dk(  r t        j                  d|dd       \  }|dd  }|d| }||d  } | t	        j
                  t        j                  |d      t        j                  |d            j                  t                           S )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_dnskeyzPublicRSA.from_dnskey#   s    --c2MM$q4	Q;dF1QK8IVABZFq vw$$ue,cnnUE.Jj*+
 	
r   )__name__
__module____qualname__r   RSAPublicKey__annotations__key_clsr	   r   HashAlgorithmbytesr   r2   classmethodr
   rA    r   r   r   r      sy    			G%%%O OU Ot OU% U 
f 
 
 
r   r   c            	           e Zd ZU ej                  ed<   ej                  ZeZdZ		 	 dde
dedede
fdZededd fd	       Zy
)
PrivateRSAr   i  r   r   deterministicr   c                     | j                   j                  |t        j                         | j                  j
                        }|r | j                         j                  ||       |S )z1Sign using a private key per RFC 3110, section 3.)r   signr   r   
public_clsr   r;   r   )r   r   r   rN   r   s        r   rP   zPrivateRSA.sign;   sM     HHMM$(8(8(:DOO<W<WX	OO$$Y5r   key_sizec                 d     | t        j                  | j                  |t                           S )N)public_exponentrR   backendr6   )r   generate_private_keydefault_public_exponentr   )r<   rR   s     r   generatezPrivateRSA.generateG   s/    (( # ; ;!')
 	
r   N)FT)rB   rC   rD   r   RSAPrivateKeyrF   rG   r   rQ   rW   rI   boolrP   rJ   r&   rX   rK   r   r   rM   rM   5   sy    			GJ#
 "	

 
 	

 

 
 
 
 
r   rM   c                   F    e Zd Zej                  Z ej                         Zy)PublicRSAMD5N)	rB   rC   rD   r	   RSAMD5r   r   MD5r   rK   r   r   r\   r\   R   s      I&**,Kr   r\   c                       e Zd ZeZy)PrivateRSAMD5N)rB   rC   rD   r\   rQ   rK   r   r   r`   r`   W   s    Jr   r`   c                   F    e Zd Zej                  Z ej                         Zy)PublicRSASHA1N)	rB   rC   rD   r	   RSASHA1r   r   SHA1r   rK   r   r   rb   rb   [   s    !!I&++-Kr   rb   c                       e Zd ZeZy)PrivateRSASHA1N)rB   rC   rD   rb   rQ   rK   r   r   rf   rf   `   s    Jr   rf   c                   F    e Zd Zej                  Z ej                         Zy)PublicRSASHA1NSEC3SHA1N)	rB   rC   rD   r	   RSASHA1NSEC3SHA1r   r   rd   r   rK   r   r   rh   rh   d   s    **I&++-Kr   rh   c                       e Zd ZeZy)PrivateRSASHA1NSEC3SHA1N)rB   rC   rD   rh   rQ   rK   r   r   rk   rk   i   s    'Jr   rk   c                   F    e Zd Zej                  Z ej                         Zy)PublicRSASHA256N)	rB   rC   rD   r	   	RSASHA256r   r   SHA256r   rK   r   r   rm   rm   m       ##I&--/Kr   rm   c                       e Zd ZeZy)PrivateRSASHA256N)rB   rC   rD   rm   rQ   rK   r   r   rr   rr   r        Jr   rr   c                   F    e Zd Zej                  Z ej                         Zy)PublicRSASHA512N)	rB   rC   rD   r	   	RSASHA512r   r   SHA512r   rK   r   r   ru   ru   v   rp   r   ru   c                       e Zd ZeZy)PrivateRSASHA512N)rB   rC   rD   ru   rQ   rK   r   r   ry   ry   {   rs   r   ry   )r$   r*   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   dns.dnssecalgs.cryptographyr   r   dns.dnssectypesr	   dns.rdtypes.ANY.DNSKEYr
   r   rM   r\   r`   rb   rf   rh   rk   rm   rr   ru   ry   rK   r   r   <module>r      s      8 1 B U % )%
% %
P
' 
:9 
J  I  
Z  Y  
(j ("i "
!z !"i "
!z !r   