o
    ™¨ÊhM(  ã                   @   sD  d dl mZmZmZ d dlZzd dlmZ W n ey%   d dlmZ Y nw d dl	Z	d dl
mZ d dlmZmZ d dlmZ e	 ej¡G dd„ deƒƒZe	 ej¡G d	d
„ d
eƒƒZe	 ej¡G dd„ deƒƒZeZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdZ dd„ Z!G d d!„ d!eƒZ"G d"d#„ d#eƒZ#dS )$é    )Úabsolute_importÚdivisionÚprint_functionN)Úgcd)Úutils)ÚUnsupportedAlgorithmÚ_Reasons)Ú
RSABackendc                   @   sR   e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZ	ejd	d
„ ƒZ
dS )ÚRSAPrivateKeyc                 C   ó   dS )zN
        Returns an AsymmetricSignatureContext used for signing data.
        N© )ÚselfÚpaddingÚ	algorithmr   r   ú_/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.pyÚsigner   ó    zRSAPrivateKey.signerc                 C   r   )z3
        Decrypts the provided ciphertext.
        Nr   )r   Ú
ciphertextr   r   r   r   Údecrypt   r   zRSAPrivateKey.decryptc                 C   r   ©z7
        The bit length of the public modulus.
        Nr   ©r   r   r   r   Úkey_size#   r   zRSAPrivateKey.key_sizec                 C   r   )zD
        The RSAPublicKey associated with this private key.
        Nr   r   r   r   r   Ú
public_key)   r   zRSAPrivateKey.public_keyc                 C   r   )z!
        Signs the data.
        Nr   )r   Údatar   r   r   r   r   Úsign/   r   zRSAPrivateKey.signN)Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodr   r   Úabstractpropertyr   r   r   r   r   r   r   r
      s    



r
   c                   @   s(   e Zd Zejdd„ ƒZejdd„ ƒZdS )ÚRSAPrivateKeyWithSerializationc                 C   r   )z/
        Returns an RSAPrivateNumbers.
        Nr   r   r   r   r   Úprivate_numbers8   r   z.RSAPrivateKeyWithSerialization.private_numbersc                 C   r   ©z6
        Returns the key serialized as bytes.
        Nr   )r   ÚencodingÚformatÚencryption_algorithmr   r   r   Úprivate_bytes>   r   z,RSAPrivateKeyWithSerialization.private_bytesN)r   r   r   r   r   r"   r'   r   r   r   r   r!   6   s
    
r!   c                   @   s`   e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZ	ejd	d
„ ƒZ
ejdd„ ƒZdS )ÚRSAPublicKeyc                 C   r   )zY
        Returns an AsymmetricVerificationContext used for verifying signatures.
        Nr   )r   Ú	signaturer   r   r   r   r   ÚverifierG   r   zRSAPublicKey.verifierc                 C   r   )z/
        Encrypts the given plaintext.
        Nr   )r   Ú	plaintextr   r   r   r   ÚencryptM   r   zRSAPublicKey.encryptc                 C   r   r   r   r   r   r   r   r   S   r   zRSAPublicKey.key_sizec                 C   r   )z-
        Returns an RSAPublicNumbers
        Nr   r   r   r   r   Úpublic_numbersY   r   zRSAPublicKey.public_numbersc                 C   r   r#   r   )r   r$   r%   r   r   r   Úpublic_bytes_   r   zRSAPublicKey.public_bytesc                 C   r   )z5
        Verifies the signature of the data.
        Nr   )r   r)   r   r   r   r   r   r   Úverifye   r   zRSAPublicKey.verifyN)r   r   r   r   r   r*   r,   r    r   r-   r.   r/   r   r   r   r   r(   E   s    




r(   c                 C   s,   t |tƒstdtjƒ‚t| |ƒ | | |¡S )Nz-Backend object does not implement RSABackend.)Ú
isinstancer	   r   r   ÚBACKEND_MISSING_INTERFACEÚ_verify_rsa_parametersÚgenerate_rsa_private_key)Úpublic_exponentr   Úbackendr   r   r   Úgenerate_private_keyo   s   
þ
r6   c                 C   s8   | dk rt dƒ‚| d@ dkrt dƒ‚|dk rt dƒ‚d S )Né   zpublic_exponent must be >= 3.é   r   úpublic_exponent must be odd.i   z#key_size must be at least 512-bits.©Ú
ValueError)r4   r   r   r   r   r2   z   s   ÿr2   c                 C   sÜ   |dk rt dƒ‚| |krt dƒ‚||krt dƒ‚||kr t dƒ‚||kr(t dƒ‚||kr0t dƒ‚||kr8t dƒ‚|dk s@||krDt d	ƒ‚|d
@ dkrNt dƒ‚|d
@ dkrXt dƒ‚|d
@ dkrbt dƒ‚| | |krlt dƒ‚d S )Nr7   zmodulus must be >= 3.zp must be < modulus.zq must be < modulus.zdmp1 must be < modulus.zdmq1 must be < modulus.ziqmp must be < modulus.z#private_exponent must be < modulus.z+public_exponent must be >= 3 and < modulus.r8   r   r9   zdmp1 must be odd.zdmq1 must be odd.zp*q must equal modulus.r:   )ÚpÚqÚprivate_exponentÚdmp1Údmq1Úiqmpr4   Úmodulusr   r   r   Ú_check_private_key_components…   s2   ÿrC   c                 C   s@   |dk rt dƒ‚| dk s| |krt dƒ‚| d@ dkrt dƒ‚d S )Nr7   zn must be >= 3.ze must be >= 3 and < n.r8   r   ze must be odd.r:   )ÚeÚnr   r   r   Ú_check_public_key_components¬   s   ÿrF   c                 C   sr   d\}}}}| |}}|dkr5t ||ƒ\}}	|||  |||  }
}||	|||
|f\}}}}}}|dks|| S )zO
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    )r8   r   r   r8   r   )Údivmod)rD   ÚmÚx1Úy1Úx2Úy2ÚaÚbr=   ÚrÚxnÚynr   r   r   Ú_modinv·   s   
ýrR   c                 C   s
   t || ƒS )zF
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    )rR   )r<   r=   r   r   r   Úrsa_crt_iqmpÄ   s   
rS   c                 C   ó   | |d  S )zg
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    r8   r   )r>   r<   r   r   r   Úrsa_crt_dmp1Ë   ó   rU   c                 C   rT   )zg
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    r8   r   )r>   r=   r   r   r   Úrsa_crt_dmq1Ó   rV   rW   iè  c                 C   sú   || d }|}|d dkr|d }|d dksd}d}|s\|t k r\|}||k rRt||| ƒ}|dkrJ|| d krJt|d| ƒdkrJt|d | ƒ}	d}n|d9 }||k s(|d7 }|s\|t k s"|sbtdƒ‚t| |	ƒ\}
}|dksoJ ‚t|	|
fdd�\}	}
|	|
fS )z¡
    Compute factors p and q from the private exponent d. We assume that n has
    no more than two factors. This function is adapted from code in PyCrypto.
    r8   é   r   FTz2Unable to compute factors p and q from exponent d.)Úreverse)Ú_MAX_RECOVERY_ATTEMPTSÚpowr   r;   rG   Úsorted)rE   rD   ÚdÚktotÚtÚspottedrM   ÚkÚcandr<   r=   rO   r   r   r   Úrsa_recover_prime_factorsá   s2   ÿ$÷òrc   c                   @   sz   e Zd Zdd„ Ze d¡Ze d¡Ze d¡Ze d¡Z	e d¡Z
e d¡Ze d	¡Zd
d„ Zdd„ Zdd„ Zdd„ ZdS )ÚRSAPrivateNumbersc                 C   s�   t |tjƒr$t |tjƒr$t |tjƒr$t |tjƒr$t |tjƒr$t |tjƒs(tdƒ‚t |tƒs1tdƒ‚|| _|| _|| _|| _|| _	|| _
|| _d S )NzNRSAPrivateNumbers p, q, d, dmp1, dmq1, iqmp arguments must all be an integers.zFRSAPrivateNumbers public_numbers must be an RSAPublicNumbers instance.)r0   ÚsixÚinteger_typesÚ	TypeErrorÚRSAPublicNumbersÚ_pÚ_qÚ_dÚ_dmp1Ú_dmq1Ú_iqmpÚ_public_numbers)r   r<   r=   r]   r?   r@   rA   r-   r   r   r   Ú__init__  s4   
ÿ
þ
ý
ü
û
úÿ
ÿ
zRSAPrivateNumbers.__init__ri   rj   rk   rl   rm   rn   ro   c                 C   ó
   |  | ¡S ©N)Úload_rsa_private_numbers©r   r5   r   r   r   Úprivate_key2  ó   
zRSAPrivateNumbers.private_keyc                 C   sb   t |tƒstS | j|jko0| j|jko0| j|jko0| j|jko0| j|jko0| j|jko0| j	|j	kS rr   )
r0   rd   ÚNotImplementedr<   r=   r]   r?   r@   rA   r-   ©r   Úotherr   r   r   Ú__eq__5  s   

ÿ
þ
ý
ü
û
ùzRSAPrivateNumbers.__eq__c                 C   ó
   | |k S rr   r   rx   r   r   r   Ú__ne__C  rv   zRSAPrivateNumbers.__ne__c                 C   s$   t | j| j| j| j| j| j| jfƒS rr   )Úhashr<   r=   r]   r?   r@   rA   r-   r   r   r   r   Ú__hash__F  s   ùzRSAPrivateNumbers.__hash__N)r   r   r   rp   r   Úread_only_propertyr<   r=   r]   r?   r@   rA   r-   ru   rz   r|   r~   r   r   r   r   rd     s    






rd   c                   @   sP   e Zd Zdd„ Ze d¡Ze d¡Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zdd„ ZdS )rh   c                 C   s0   t |tjƒrt |tjƒstdƒ‚|| _|| _d S )Nz,RSAPublicNumbers arguments must be integers.)r0   re   rf   rg   Ú_eÚ_n)r   rD   rE   r   r   r   rp   S  s   
ÿ
þ
zRSAPublicNumbers.__init__r€   r�   c                 C   rq   rr   )Úload_rsa_public_numbersrt   r   r   r   r   `  rv   zRSAPublicNumbers.public_keyc                 C   s
   d  | ¡S )Nz$<RSAPublicNumbers(e={0.e}, n={0.n})>)r%   r   r   r   r   Ú__repr__c  rv   zRSAPublicNumbers.__repr__c                 C   s&   t |tƒstS | j|jko| j|jkS rr   )r0   rh   rw   rD   rE   rx   r   r   r   rz   f  s   
zRSAPublicNumbers.__eq__c                 C   r{   rr   r   rx   r   r   r   r|   l  rv   zRSAPublicNumbers.__ne__c                 C   s   t | j| jfƒS rr   )r}   rD   rE   r   r   r   r   r~   o  s   zRSAPublicNumbers.__hash__N)r   r   r   rp   r   r   rD   rE   r   rƒ   rz   r|   r~   r   r   r   r   rh   R  s    


rh   )$Ú
__future__r   r   r   r   Úmathr   ÚImportErrorÚ	fractionsre   Úcryptographyr   Úcryptography.exceptionsr   r   Ú'cryptography.hazmat.backends.interfacesr	   Úadd_metaclassÚABCMetaÚobjectr
   r!   r(   ÚRSAPublicKeyWithSerializationr6   r2   rC   rF   rR   rS   rU   rW   rZ   rc   rd   rh   r   r   r   r   Ú<module>   s<   ÿ

 
&'+F