o
    �õ±jÃ  ã                   @   sH   d dl Z d dlZd dlmZ d dlmZ G dd„ dƒZG dd„ dƒZdS )é    N)Úrsa)Údefault_backendc                   @   óD   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	d
„ Zdd„ Z	dS )ÚRSAPrivateKeyBlobc                 C   sX   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d S ©N)ÚtypeÚversionÚreservedÚkeyalgÚmagicÚbitlenÚpubexpÚmodulusÚpÚqÚdpÚdqÚiqÚd©Úself© r   úŽ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/winacl/dtyp/wcee/rsaprivkey.pyÚ__init__	   s   
zRSAPrivateKeyBlob.__init__c                 C   ó   t  t | ¡¡S r   )r   Úfrom_bufferÚioÚBytesIO©Údatar   r   r   Ú
from_bytes   ó   zRSAPrivateKeyBlob.from_bytesc                 C   sr  t ƒ }|  d¡d |_|  d¡d |_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_	tt
 |j	d ¡ƒ}tt
 |j	d	 ¡ƒ}tj|  d¡ddd�|_tj|  |¡ddd�|_tj|  |¡ddd�|_tj|  |¡ddd�|_tj|  |¡ddd�|_tj|  |¡ddd�|_tj|  |¡ddd�|_tj|  |¡ddd�|_|S )
Né   r   é   ÚlittleF)Ú	byteorderÚsignedé   é   é   )r   Úreadr   r   Úintr    r	   r
   r   r   ÚmathÚceilr   r   r   r   r   r   r   r   )ÚbuffÚpkÚc8Úc16r   r   r   r      s$   zRSAPrivateKeyBlob.from_bufferc              	   C   sB   t  | j| j¡}t  | j| j| j| j| j	| j
|¡}tƒ j|dd�S )NF©Úunsafe_skip_rsa_key_validation)r   ÚRSAPublicNumbersr   r   ÚRSAPrivateNumbersr   r   r   r   r   r   r   Úload_rsa_private_numbers)r   Úpublic_numbersÚnumbersr   r   r   Úget_key2   s   "zRSAPrivateKeyBlob.get_keyc                 C   ó   t  | j| j¡}tƒ  |¡S r   ©r   r4   r   r   r   Úload_rsa_public_numbers©r   r7   r   r   r   Ú
get_pubkey7   ó   zRSAPrivateKeyBlob.get_pubkeyc                 C   ó*   d}| j D ]}|d|| j | f 7 }q|S ©NÚ z%s: %s
©Ú__dict__©r   ÚtÚkr   r   r   Ú__str__;   ó   
zRSAPrivateKeyBlob.__str__N©
Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr    r   r9   r>   rH   r   r   r   r   r      s    

r   c                   @   r   )ÚBCRYPTRSAKeyBlobc                 C   s@   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d S r   )
r   r   Ú	pubexplenÚ
moduluslenÚplenÚqlenr   r   r   r   r   r   r   r   r   C   s   
zBCRYPTRSAKeyBlob.__init__c                 C   r   r   )rO   r   r   r   r   r   r   r   r    O   r!   zBCRYPTRSAKeyBlob.from_bytesc                 C   sö   t ƒ }|  d¡|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_	tj|  |j¡ddd�|_
tj|  |j¡ddd�|_tj|  |j¡ddd�|_tj|  |j	¡ddd�|_|S )Nr'   r$   F)r&   Úbig)rO   r*   r   r+   r    r   rP   rQ   rR   rS   r   r   r   r   )r.   r/   r   r   r   r   S   s   zBCRYPTRSAKeyBlob.from_bufferc                 C   sˆ   | j d | jd  }t | j|¡}t || j ¡}t || j¡}t | j | j¡}tj| j | j||||tj	| j| j
d�d�}tƒ j|dd�S )Nr"   )ÚeÚn)r   r   r   Údmp1Údmq1Úiqmpr7   Fr2   )r   r   r   Ú_modinvr   Úrsa_crt_dmp1Úrsa_crt_dmq1Úrsa_crt_iqmpr5   r4   r   r   r6   )r   Úphir   rW   rX   rY   r8   r   r   r   r9   b   s$   þùzBCRYPTRSAKeyBlob.get_keyc                 C   r:   r   r;   r=   r   r   r   r>   v   r?   zBCRYPTRSAKeyBlob.get_pubkeyc                 C   r@   rA   rC   rE   r   r   r   rH   z   rI   zBCRYPTRSAKeyBlob.__str__NrJ   r   r   r   r   rO   B   s    

rO   )r   r,   Ú)cryptography.hazmat.primitives.asymmetricr   Úcryptography.hazmat.backendsr   r   rO   r   r   r   r   Ú<module>   s    :