o
    Þý°jO  ã                   @   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   ú…/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/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   ÚgenerateI   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   T   ó    rS   c                   @   ó   e Zd ZeZdS )ÚPrivateRSAMD5N)r=   r>   r?   rS   rI   r   r   r   r   rX   Y   ó    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]   b   rY   r]   c                   @   rR   )ÚPublicRSASHA1NSEC3SHA1N)	r=   r>   r?   r   ÚRSASHA1NSEC3SHA1r   r   r\   r   r   r   r   r   r^   f   rV   r^   c                   @   rW   )ÚPrivateRSASHA1NSEC3SHA1N)r=   r>   r?   r^   rI   r   r   r   r   r`   k   rY   r`   c                   @   rR   )ÚPublicRSASHA256N)	r=   r>   r?   r   Ú	RSASHA256r   r   ÚSHA256r   r   r   r   r   ra   o   rV   ra   c                   @   rW   )ÚPrivateRSASHA256N)r=   r>   r?   ra   rI   r   r   r   r   rd   t   rY   rd   c                   @   rR   )ÚPublicRSASHA512N)	r=   r>   r?   r   Ú	RSASHA512r   r   ÚSHA512r   r   r   r   r   re   x   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(    (