
    g&                     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      K/home/matz/Project1/venv/lib/python3.13/site-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    XX$$&99S^^BDD1A56ll244ElBc>T8!<<JT84J44??s"bddoo&7$&>9::"$$--1BQ1F10Le"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MM$q4	Q;dF1QK8IVABZFq w$$ue,cnnUE.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)
PrivateRSA5   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     HHMM$(8(8(:DOO<W<WX	OO$$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)PublicRSAMD5R   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)PrivateRSAMD5W   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)PublicRSASHA1NSEC3SHA1d   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)PrivateRSASHA1NSEC3SHA1i   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)PublicRSASHA256m   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)PrivateRSASHA256r   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)PublicRSASHA512v   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   