U
    7Ód#/  ã                   @  sš   d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZ G dd„ dƒZG d	d
„ d
ƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZdS )é    )ÚannotationsN)Ú
exceptionsÚutils)Úaead)Úbackend)Ú	FixedPoolc                   @  st   e Zd ZdZddœdd„Zeddœdd„ƒZd	d
„ Zdddddœdd„Zdddddœdd„Z	dddddœdd„Z
dS )ÚChaCha20Poly1305éÿÿÿÚbytes©Úkeyc                 C  sP   t  | ¡st dtjj¡‚t d|¡ t|ƒdkr:t	dƒ‚|| _
t| jƒ| _d S )Nz<ChaCha20Poly1305 is not supported by this version of OpenSSLr   é    z&ChaCha20Poly1305 key must be 32 bytes.)r   Úaead_cipher_supportedr   ÚUnsupportedAlgorithmÚ_ReasonsÚUNSUPPORTED_CIPHERr   Ú_check_byteslikeÚlenÚ
ValueErrorÚ_keyr   Ú
_create_fnÚ_pool©Úselfr   © r   úm/var/www/html/alexa-login-pro/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/ciphers/aead.pyÚ__init__   s    
þzChaCha20Poly1305.__init__)Úreturnc                 C  s
   t  d¡S )Nr   )ÚosÚurandom)Úclsr   r   r   Úgenerate_key!   s    zChaCha20Poly1305.generate_keyc                 C  s   t  t| | j¡S ©N)r   Z_aead_create_ctxr   r   ©r   r   r   r   r   %   s    zChaCha20Poly1305._create_fnútyping.Optional[bytes]©ÚnonceÚdataÚassociated_datar   c              
   C  sx   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ | j ¡ &}t t| |||gd|¡W  5 Q R £ S Q R X d S ©Nó    ú5Data or associated data too long. Max 2**31 - 1 bytesé   )	r   Ú	_MAX_SIZEÚOverflowErrorÚ_check_paramsr   Úacquirer   Ú_encryptr   ©r   r&   r'   r(   Úctxr   r   r   Úencrypt(   s"    ÿ      ÿzChaCha20Poly1305.encryptc              
   C  sT   |d krd}|   |||¡ | j ¡ &}t t| |||gd|¡W  5 Q R £ S Q R X d S ©Nr*   r,   )r/   r   r0   r   Ú_decryptr   r2   r   r   r   Údecrypt=   s          ÿzChaCha20Poly1305.decryptÚNonec                 C  s<   t  d|¡ t  d|¡ t  d|¡ t|ƒdkr8tdƒ‚d S )Nr&   r'   r(   é   zNonce must be 12 bytes©r   r   r   r   ©r   r&   r'   r(   r   r   r   r/   L   s
    zChaCha20Poly1305._check_paramsN)Ú__name__Ú
__module__Ú__qualname__r-   r   Úclassmethodr!   r   r4   r7   r/   r   r   r   r   r      s   r   c                   @  s„   e Zd ZdZddddœdd„Zedddœd	d
„ƒZdddddœdd„Zdddddœdd„Zddddœdd„Z	dddddœdd„Z
dS )ÚAESCCMr	   r,   r
   Úint)r   Ú
tag_lengthc                 C  sl   t  d|¡ t|ƒdkr tdƒ‚|| _t|tƒs8tdƒ‚|dkrHtdƒ‚|| _t	 
| ¡sht dtjj¡‚d S )Nr   ©r,   é   r   z)AESCCM key must be 128, 192, or 256 bits.ztag_length must be an integer)é   é   é   é
   r9   é   r,   zInvalid tag_lengthz2AESCCM is not supported by this version of OpenSSL)r   r   r   r   r   Ú
isinstancerA   Ú	TypeErrorÚ_tag_lengthr   r   r   r   r   r   )r   r   rB   r   r   r   r   \   s    

þzAESCCM.__init__©Ú
bit_lengthr   c                 C  s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S ©Núbit_length must be an integer)é€   éÀ   é   z#bit_length must be 128, 192, or 256rG   ©rJ   rA   rK   r   r   r   ©r    rN   r   r   r   r!   p   s
    
zAESCCM.generate_keyr$   r%   c                 C  sf   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ |  |t |ƒ¡ t t| |||g| j¡S )Nr*   r+   )	r   r-   r.   r/   Ú_validate_lengthsr   r1   r   rL   r;   r   r   r   r4   z   s     ÿ     ÿzAESCCM.encryptc                 C  s2   |d krd}|   |||¡ t t| |||g| j¡S )Nr*   )r/   r   r6   r   rL   r;   r   r   r   r7      s         ÿzAESCCM.decryptr8   )r&   Údata_lenr   c                 C  s(   dt |ƒ }dd|  |k r$tdƒ‚d S )Né   é   rG   zData too long for nonce)r   r   )r   r&   rW   Zl_valr   r   r   rV      s    zAESCCM._validate_lengthsc                 C  sJ   t  d|¡ t  d|¡ t  d|¡ dt|ƒ  kr<dksFn tdƒ‚d S )Nr&   r'   r(   é   é   z$Nonce must be between 7 and 13 bytesr:   r;   r   r   r   r/   ¤   s
    zAESCCM._check_paramsN)r,   )r<   r=   r>   r-   r   r?   r!   r4   r7   rV   r/   r   r   r   r   r@   Y   s   	r@   c                   @  sn   e Zd ZdZddœdd„Zedddœdd	„ƒZddd
ddœdd„Zddd
ddœdd„Zdddddœdd„Z	dS )ÚAESGCMr	   r
   r   c                 C  s*   t  d|¡ t|ƒdkr tdƒ‚|| _d S )Nr   rC   z)AESGCM key must be 128, 192, or 256 bits.)r   r   r   r   r   r   r   r   r   r   ±   s    zAESGCM.__init__rA   rM   c                 C  s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S rO   rT   rU   r   r   r   r!   ¸   s
    
zAESGCM.generate_keyr$   r%   c                 C  sT   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ t t| |||gd¡S r)   ©r   r-   r.   r/   r   r1   r   r;   r   r   r   r4   Â   s    ÿzAESGCM.encryptc                 C  s0   |d krd}|   |||¡ t t| |||gd¡S r5   ©r/   r   r6   r   r;   r   r   r   r7   Ô   s    zAESGCM.decryptr8   c                 C  sH   t  d|¡ t  d|¡ t  d|¡ t|ƒdk s<t|ƒdkrDtdƒ‚d S )Nr&   r'   r(   rG   rQ   z%Nonce must be between 8 and 128 bytesr:   r;   r   r   r   r/   à   s
    zAESGCM._check_paramsN©
r<   r=   r>   r-   r   r?   r!   r4   r7   r/   r   r   r   r   r\   ®   s   	r\   c                   @  sn   e Zd ZdZddœdd„Zedddœdd	„ƒZddd
ddœdd„Zddd
ddœdd„Zdddddœdd„Z	dS )ÚAESOCB3r	   r
   r   c                 C  sD   t  d|¡ t|ƒdkr tdƒ‚|| _t | ¡s@t dtj	j
¡‚d S )Nr   rC   z*AESOCB3 key must be 128, 192, or 256 bits.z0OCB3 is not supported by this version of OpenSSL©r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ð   s    
þzAESOCB3.__init__rA   rM   c                 C  s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S rO   rT   rU   r   r   r   r!   ý   s
    
zAESOCB3.generate_keyr$   r%   c                 C  sT   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ t t| |||gd¡S r)   r]   r;   r   r   r   r4     s    ÿzAESOCB3.encryptc                 C  s0   |d krd}|   |||¡ t t| |||gd¡S r5   r^   r;   r   r   r   r7     s    zAESOCB3.decryptr8   c                 C  sH   t  d|¡ t  d|¡ t  d|¡ t|ƒdk s<t|ƒdkrDtdƒ‚d S )Nr&   r'   r(   r9   rX   z%Nonce must be between 12 and 15 bytesr:   r;   r   r   r   r/   %  s
    zAESOCB3._check_paramsNr_   r   r   r   r   r`   í   s   	r`   c                   @  sh   e Zd ZdZddœdd„Zedddœdd	„ƒZdd
ddœdd„Zdd
ddœdd„Zddddœdd„Z	dS )ÚAESSIVr	   r
   r   c                 C  sD   t  d|¡ t|ƒdkr tdƒ‚|| _t | ¡s@t dtj	j
¡‚d S )Nr   )r   é0   é@   z)AESSIV key must be 256, 384, or 512 bits.z3AES-SIV is not supported by this version of OpenSSLra   r   r   r   r   r   5  s    
þzAESSIV.__init__rA   rM   c                 C  s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S )NrP   )rS   i€  i   z#bit_length must be 256, 384, or 512rG   rT   rU   r   r   r   r!   B  s
    
zAESSIV.generate_keyz#typing.Optional[typing.List[bytes]])r'   r(   r   c                   sX   |d krg }ˆ   ||¡ t|ƒˆ jks<t‡ fdd„|D ƒƒrDtdƒ‚t tˆ d||d¡S )Nc                 3  s   | ]}t |ƒˆ jkV  qd S r"   )r   r-   )Ú.0Úadr#   r   r   Ú	<genexpr>V  s    z!AESSIV.encrypt.<locals>.<genexpr>r+   r*   r,   )r/   r   r-   Úanyr.   r   r1   r   ©r   r'   r(   r   r#   r   r4   L  s    ÿÿzAESSIV.encryptc                 C  s,   |d krg }|   ||¡ t t| d||d¡S r5   r^   ri   r   r   r   r7   `  s    zAESSIV.decryptztyping.List[bytes]r8   c                 C  sL   t  d|¡ t|ƒdkr tdƒ‚t|tƒs2tdƒ‚|D ]}t  d|¡ q6d S )Nr'   r   zdata must not be zero lengthz<associated_data must be a list of bytes-like objects or Nonezassociated_data elements)r   r   r   r   rJ   ÚlistrK   )r   r'   r(   Úxr   r   r   r/   l  s    
ÿzAESSIV._check_paramsNr_   r   r   r   r   rb   2  s   	rb   )Ú
__future__r   r   ÚtypingZcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   Z"cryptography.hazmat.bindings._rustr   r   r@   r\   r`   rb   r   r   r   r   Ú<module>   s   IU?E