o
    ™¨Êh‰  ã                   @   sp  d dl mZmZmZ d dlZd dlZd dlZd dlmZ d dl	Z	d dl
mZ d dlmZ d dlmZmZm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d„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ 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#e	 $ej%¡G d+d,„ d,e&ƒƒZ'e (e'¡G d-d.„ d.e&ƒƒZ)e (e'¡G d/d0„ d0e&ƒƒZ*dS )1é    )Úabsolute_importÚdivisionÚprint_functionN)ÚEnum)Úutils)ÚUnsupportedAlgorithm)ÚdsaÚecÚrsac                 C   ó   |  | |¡S ©N)Úload_pem_private_key©ÚdataÚpasswordÚbackend© r   ú^/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/serialization.pyr      ó   r   c                 C   ó
   |  | ¡S r   )Úload_pem_public_key©r   r   r   r   r   r      ó   
r   c                 C   r   r   )Úload_pem_parametersr   r   r   r   r      r   r   c                 C   r   r   )Úload_der_private_keyr   r   r   r   r      r   r   c                 C   r   r   )Úload_der_public_keyr   r   r   r   r   #   r   r   c                 C   r   r   )Úload_der_parametersr   r   r   r   r   '   r   r   c           	      C   s°   |   dd¡}t|ƒdk rtdƒ‚|d }|dkrt}n|dkr"t}n|dv r)t}ntdƒ‚|d	 }zt |¡}W n t	yC   td
ƒ‚w t
|ƒ\}}||krRtdƒ‚||||ƒS )Nó    é   z7Key is not in the proper format or contains extra data.r   s   ssh-rsas   ssh-dss)s   ecdsa-sha2-nistp256s   ecdsa-sha2-nistp384s   ecdsa-sha2-nistp521zKey type is not supported.é   z Key is not in the proper format.ú:Key header and key body contain different key type values.)ÚsplitÚlenÚ
ValueErrorÚ_load_ssh_rsa_public_keyÚ_load_ssh_dss_public_keyÚ_load_ssh_ecdsa_public_keyr   Úbase64Ú	b64decodeÚ	TypeErrorÚ_ssh_read_next_string)	r   r   Ú	key_partsÚkey_typeÚloaderÚkey_bodyÚdecoded_dataÚinner_key_typeÚrestr   r   r   Úload_ssh_public_key+   s2   ÿÿÿr2   c                 C   s6   t |ƒ\}}t |ƒ\}}|rtdƒ‚t ||¡ |¡S ©NúKey body contains extra bytes.)Ú_ssh_read_next_mpintr#   r
   ÚRSAPublicNumbersÚ
public_key)r,   r/   r   Úer1   Únr   r   r   r$   P   s
   r$   c           
      C   s`   t |ƒ\}}t |ƒ\}}t |ƒ\}}t |ƒ\}}|rtdƒ‚t |||¡}t ||¡}	|	 |¡S r3   )r5   r#   r   ÚDSAParameterNumbersÚDSAPublicNumbersr7   )
r,   r/   r   Úpr1   ÚqÚgÚyÚparameter_numbersÚpublic_numbersr   r   r   r%   Z   s   
r%   c                 C   s€   t |ƒ\}}t |ƒ\}}| d| krtdƒ‚|rtdƒ‚tjtjtjdœ| ƒ }t |d¡dkr4tdƒ‚tj	 
||¡}| |¡S )Ns   ecdsa-sha2-r    r4   )s   nistp256s   nistp384s   nistp521r   é   z2Compressed elliptic curve points are not supported)r*   r#   r	   Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1ÚsixÚ
indexbytesÚNotImplementedErrorÚEllipticCurvePublicNumbersÚfrom_encoded_pointr7   )Úexpected_key_typer/   r   Ú
curve_namer1   r   ÚcurveÚnumbersr   r   r   r&   i   s(   ÿýüÿ
r&   c                 C   sb   t | ƒdk r
tdƒ‚t d| dd… ¡\}t | ƒ|d k r!tdƒ‚| dd| … | d| d… fS )z‹
    Retrieves the next RFC 4251 string value from the data.

    While the RFC calls these strings, in Python they are bytes objects.
    rB   zKey is not in the proper formatú>IN)r"   r#   ÚstructÚunpack)r   Ústr_lenr   r   r   r*   „   s    r*   c                 C   s    t | ƒ\}}tj|ddd�|fS )ze
    Reads the next mpint from the data.

    Currently, all mpints are interpreted as unsigned.
    ÚbigF)Ú	byteorderÚsigned)r*   r   Úint_from_bytes)r   Ú
mpint_datar1   r   r   r   r5   ”   s   ÿr5   c                 C   s   t  dt| ƒ¡|  S )NrO   )rP   Úpackr"   )r   r   r   r   Ú_ssh_write_string¡   s   rY   c                 C   s*   t  | ¡}t |d¡d@ rd| }t|ƒS )Nr   é€   ó    )r   Úint_to_bytesrF   rG   rY   )Úvaluer   r   r   r   Ú_ssh_write_mpint¥   s   
r^   c                   @   ó   e Zd ZdZdZdZdS )ÚEncodingÚPEMÚDERÚOpenSSHN)Ú__name__Ú
__module__Ú__qualname__ra   rb   rc   r   r   r   r   r`   ¬   ó    r`   c                   @   s   e Zd ZdZdZdS )ÚPrivateFormatÚPKCS8ÚTraditionalOpenSSLN)rd   re   rf   ri   rj   r   r   r   r   rh   ²   s    rh   c                   @   r_   )ÚPublicFormatz&X.509 subjectPublicKeyInfo with PKCS#1z
Raw PKCS#1rc   N)rd   re   rf   ÚSubjectPublicKeyInfoÚPKCS1rc   r   r   r   r   rk   ·   rg   rk   c                   @   s   e Zd ZdZdS )ÚParameterFormatÚPKCS3N)rd   re   rf   ro   r   r   r   r   rn   ½   s    rn   c                   @   ó   e Zd ZdS )ÚKeySerializationEncryptionN©rd   re   rf   r   r   r   r   rq   Á   ó    rq   c                   @   s   e Zd Zdd„ ZdS )ÚBestAvailableEncryptionc                 C   s(   t |tƒrt|ƒdkrtdƒ‚|| _d S )Nr   z!Password must be 1 or more bytes.)Ú
isinstanceÚbytesr"   r#   r   )Úselfr   r   r   r   Ú__init__È   s   
z BestAvailableEncryption.__init__N)rd   re   rf   rx   r   r   r   r   rt   Æ   s    rt   c                   @   rp   )ÚNoEncryptionNrr   r   r   r   r   ry   Ï   rs   ry   )+Ú
__future__r   r   r   Úabcr'   rP   Úenumr   rF   Úcryptographyr   Úcryptography.exceptionsr   Ú)cryptography.hazmat.primitives.asymmetricr   r	   r
   r   r   r   r   r   r   r2   r$   r%   r&   r*   r5   rY   r^   r`   rh   rk   rn   Úadd_metaclassÚABCMetaÚobjectrq   Úregister_interfacert   ry   r   r   r   r   Ú<module>   sB   %

