U
    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                   @   sd   e Zd ZU ejed< ejZeed< ej	ed< e
e
ddddZe
dd	d
Zeed dddZdS )	PublicRSAkey	algorithmchosen_hashN)	signaturedatareturnc                 C   s   | j ||t | j d S )N)r   verifyr   PKCS1v15r   )selfr   r    r   8./venv/lib/python3.8/site-packages/dns/dnssecalgs/rsa.pyr      s    zPublicRSA.verify)r   c                 C   s   | j  }tt|jd }tj|j|dd}|dkrLdt	d| }nt	d|}|j
 dk st|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   Zpublic_numbersmathZceilint
bit_lengtheto_bytesstructpackn
ValueError)r   ZpnZ_exp_lenZexpZ
exp_headerr   r   r   encode_key_bytes   s    
zPublicRSA.encode_key_bytes)r   r   c                 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   )
Z!_ensure_algorithm_key_combinationr   r$   unpackr   ZRSAPublicNumbersr    
from_bytes
public_keyr   )clsr   ZkeyptrZbytes_Zrsa_eZrsa_nr   r   r   from_dnskey#   s"    

 
zPublicRSA.from_dnskey)__name__
__module____qualname__r   ZRSAPublicKey__annotations__key_clsr   r   ZHashAlgorithmbytesr   r(   classmethodr	   r0   r   r   r   r   r
      s   


r
   c                   @   sN   e Zd ZU ejed< ejZeZdZ	de
ee
dddZeed ddd	Zd
S )
PrivateRSAr   i  F)r   r   r   c                 C   s0   | j |t | jj}|r,|  || |S )z1Sign using a private key per RFC 3110, section 3.)r   signr   r   
public_clsr   r.   r   )r   r   r   r   r   r   r   r9   ;   s    zPrivateRSA.sign)key_sizer   c                 C   s   | t j| j|t ddS )N)Zpublic_exponentr;   Zbackendr+   )r   Zgenerate_private_keydefault_public_exponentr   )r/   r;   r   r   r   generateB   s    zPrivateRSA.generateN)F)r1   r2   r3   r   ZRSAPrivateKeyr4   r5   r
   r:   r<   r6   boolr9   r7   r    r=   r   r   r   r   r8   5   s   

r8   c                   @   s   e Zd ZejZe ZdS )PublicRSAMD5N)	r1   r2   r3   r   ZRSAMD5r   r   ZMD5r   r   r   r   r   r?   M   s   r?   c                   @   s   e Zd ZeZdS )PrivateRSAMD5N)r1   r2   r3   r?   r:   r   r   r   r   r@   R   s   r@   c                   @   s   e Zd ZejZe ZdS )PublicRSASHA1N)	r1   r2   r3   r   ZRSASHA1r   r   SHA1r   r   r   r   r   rA   V   s   rA   c                   @   s   e Zd ZeZdS )PrivateRSASHA1N)r1   r2   r3   rA   r:   r   r   r   r   rC   [   s   rC   c                   @   s   e Zd ZejZe ZdS )PublicRSASHA1NSEC3SHA1N)	r1   r2   r3   r   ZRSASHA1NSEC3SHA1r   r   rB   r   r   r   r   r   rD   _   s   rD   c                   @   s   e Zd ZeZdS )PrivateRSASHA1NSEC3SHA1N)r1   r2   r3   rD   r:   r   r   r   r   rE   d   s   rE   c                   @   s   e Zd ZejZe ZdS )PublicRSASHA256N)	r1   r2   r3   r   Z	RSASHA256r   r   ZSHA256r   r   r   r   r   rF   h   s   rF   c                   @   s   e Zd ZeZdS )PrivateRSASHA256N)r1   r2   r3   rF   r:   r   r   r   r   rG   m   s   rG   c                   @   s   e Zd ZejZe ZdS )PublicRSASHA512N)	r1   r2   r3   r   Z	RSASHA512r   r   ZSHA512r   r   r   r   r   rH   q   s   rH   c                   @   s   e Zd ZeZdS )PrivateRSASHA512N)r1   r2   r3   rH   r:   r   r   r   r   rI   v   s   rI   )r   r$   Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   Z)cryptography.hazmat.primitives.asymmetricr   r   Zdns.dnssecalgs.cryptographyr   r   Zdns.dnssectypesr   Zdns.rdtypes.ANY.DNSKEYr	   r
   r8   r?   r@   rA   rC   rD   rE   rF   rG   rH   rI   r   r   r   r   <module>   s&   (