
    *DCf                     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      R/var/www/highfloat_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
fdZededd fd       Zy	)
PrivateRSAr   i  r   r   r   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   r   s       r   rO   zPrivateRSA.sign;   sK    HHMM$(8(8(:DOO<W<WX	OO$$Y5r   key_sizec                 d     | t        j                  | j                  |t                           S )N)public_exponentrQ   backendr6   )r   generate_private_keydefault_public_exponentr   )r<   rQ   s     r   generatezPrivateRSA.generateB   s/    (( # ; ;!')
 	
r   N)F)rB   rC   rD   r   RSAPrivateKeyrF   rG   r   rP   rV   rI   boolrO   rJ   r&   rW   rK   r   r   rM   rM   5   s`    			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[   M   s      I&**,Kr   r[   c                       e Zd ZeZy)PrivateRSAMD5N)rB   rC   rD   r[   rP   rK   r   r   r_   r_   R   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   ra   ra   V   s    !!I&++-Kr   ra   c                       e Zd ZeZy)PrivateRSASHA1N)rB   rC   rD   ra   rP   rK   r   r   re   re   [   s    Jr   re   c                   F    e Zd Zej                  Z ej                         Zy)PublicRSASHA1NSEC3SHA1N)	rB   rC   rD   r	   RSASHA1NSEC3SHA1r   r   rc   r   rK   r   r   rg   rg   _   s    **I&++-Kr   rg   c                       e Zd ZeZy)PrivateRSASHA1NSEC3SHA1N)rB   rC   rD   rg   rP   rK   r   r   rj   rj   d   s    'Jr   rj   c                   F    e Zd Zej                  Z ej                         Zy)PublicRSASHA256N)	rB   rC   rD   r	   	RSASHA256r   r   SHA256r   rK   r   r   rl   rl   h       ##I&--/Kr   rl   c                       e Zd ZeZy)PrivateRSASHA256N)rB   rC   rD   rl   rP   rK   r   r   rq   rq   m        Jr   rq   c                   F    e Zd Zej                  Z ej                         Zy)PublicRSASHA512N)	rB   rC   rD   r	   	RSASHA512r   r   SHA512r   rK   r   r   rt   rt   q   ro   r   rt   c                       e Zd ZeZy)PrivateRSASHA512N)rB   rC   rD   rt   rP   rK   r   r   rx   rx   v   rr   r   rx   )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_   ra   re   rg   rj   rl   rq   rt   rx   rK   r   r   <module>r      s      8 1 B U % )%
% %
P
' 
09 
J  I  
Z  Y  
(j ("i "
!z !"i "
!z !r   