o
    'h&                     @   s$  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	 d	eZG d
d de
ZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdS )     N)default_backend)hashes)paddingrsa)CryptographyPrivateKeyCryptographyPublicKey)	Algorithm)DNSKEYc                   @   sj   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d	Zde
fd
dZededd fddZdS )	PublicRSAkey	algorithmchosen_hash	signaturedatareturnNc                 C   s   | j ||t | j d S )N)r   verifyr   PKCS1v15r   )selfr   r    r   N/var/www/html/olx_land/venv/lib/python3.10/site-packages/dns/dnssecalgs/rsa.pyr      s   zPublicRSA.verifyc                 C   s   | j  }tt|jd }tj|j|dd}|dkr&dt	d| }nt	d|}|j
 dk s:|j
 d	kr>td
|| |j
|j
 d d d 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_headerr   r   r   encode_key_bytes   s   
$zPublicRSA.encode_key_bytesc                 C   s   |  | |j}td|dd \}|dd  }|dkr.td|dd \}|dd  }|d| }||d  }| tt|dt|dt	 dS )Nr   r      r      r   r   )
!_ensure_algorithm_key_combinationr   r&   unpackr   RSAPublicNumbersr"   
from_bytes
public_keyr   )clsr   keyptrbytes_rsa_ersa_nr   r   r   from_dnskey#   s   
zPublicRSA.from_dnskey)__name__
__module____qualname__r   RSAPublicKey__annotations__key_clsr   r   HashAlgorithmbytesr   r.   classmethodr	   r<   r   r   r   r   r
      s   
 

r
   c                	   @   s\   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	d
Zededd fddZdS )
PrivateRSAr   i  FTr   r   deterministicr   c                 C   s0   | j |t | jj}|r|  || |S )z1Sign using a private key per RFC 3110, section 3.)r   signr   r   
public_clsr   r6   r   )r   r   r   rG   r   r   r   r   rH   ;   s   zPrivateRSA.signkey_sizec                 C   s   | t j| j|t ddS )N)public_exponentrJ   backendr1   )r   generate_private_keydefault_public_exponentr   )r7   rJ   r   r   r   generateG   s   zPrivateRSA.generateN)FT)r=   r>   r?   r   RSAPrivateKeyrA   rB   r
   rI   rN   rD   boolrH   rE   r"   rO   r   r   r   r   rF   5   s$   
 

rF   c                   @      e Zd ZejZe ZdS )PublicRSAMD5N)	r=   r>   r?   r   RSAMD5r   r   MD5r   r   r   r   r   rS   R       rS   c                   @      e Zd ZeZdS )PrivateRSAMD5N)r=   r>   r?   rS   rI   r   r   r   r   rX   W       rX   c                   @   rR   )PublicRSASHA1N)	r=   r>   r?   r   RSASHA1r   r   SHA1r   r   r   r   r   rZ   [   rV   rZ   c                   @   rW   )PrivateRSASHA1N)r=   r>   r?   rZ   rI   r   r   r   r   r]   `   rY   r]   c                   @   rR   )PublicRSASHA1NSEC3SHA1N)	r=   r>   r?   r   RSASHA1NSEC3SHA1r   r   r\   r   r   r   r   r   r^   d   rV   r^   c                   @   rW   )PrivateRSASHA1NSEC3SHA1N)r=   r>   r?   r^   rI   r   r   r   r   r`   i   rY   r`   c                   @   rR   )PublicRSASHA256N)	r=   r>   r?   r   	RSASHA256r   r   SHA256r   r   r   r   r   ra   m   rV   ra   c                   @   rW   )PrivateRSASHA256N)r=   r>   r?   ra   rI   r   r   r   r   rd   r   rY   rd   c                   @   rR   )PublicRSASHA512N)	r=   r>   r?   r   	RSASHA512r   r   SHA512r   r   r   r   r   re   v   rV   re   c                   @   rW   )PrivateRSASHA512N)r=   r>   r?   re   rI   r   r   r   r   rh   {   rY   rh   )r    r&   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   dns.dnssecalgs.cryptographyr   r   dns.dnssectypesr   dns.rdtypes.ANY.DNSKEYr	   r
   rF   rS   rX   rZ   r]   r^   r`   ra   rd   re   rh   r   r   r   r   <module>   s(    (