3
ãde)'  ã            
   @   sX  d dl Z d dlmZ e jrVd dlmZ d dlmZmZm	Z	m
Z
mZ e jeee	e
ef ZdZd Zdedœdd	„Zed
dœdd„Zd
dedœdd„Zd
eeee je eedœdd„Zeddœdd„Zeeddœdd„Zd
eddœdd„Zd
eddœdd„Zd
eed œd!d"„Zd(d
deee je ee jed#œd$d%„Zd)d
deee je ee jed#œd&d'„ZdS )*é    N)Ú
InvalidTag)ÚBackend)ÚAESCCMÚAESGCMÚAESOCB3ÚAESSIVÚChaCha20Poly1305é   Ú
_AEADTypes)ÚcipherÚreturnc             C   sÎ   ddl m}m}m}m}m} t| |ƒr*dS t| |ƒrPdt| jƒd › d�j	dƒS t| |ƒrvdt| jƒd › d�j	dƒS t| |ƒr dt| jƒd d	 › d
�j	dƒS t| |ƒs®t
‚dt| jƒd › d�j	dƒS d S )Nr   )r   r   r   r   r   s   chacha20-poly1305zaes-é   z-ccmÚasciiz-ocbé   z-sivz-gcm)Ú+cryptography.hazmat.primitives.ciphers.aeadr   r   r   r   r   Ú
isinstanceÚlenÚ_keyÚencodeÚAssertionError)r   r   r   r   r   r   © r   ú`/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/aead.pyÚ_aead_cipher_name   s    



 r   r   )Úcipher_nameÚbackendc             C   sj   | j dƒrH|jj|jj| |jjƒ}|j||jjkƒ |jj||jjƒ}n|jj| ƒ}|j||jjkƒ |S )Ns   -siv)	ÚendswithÚ_libZEVP_CIPHER_fetchÚ_ffiÚNULLÚopenssl_assertÚgcZEVP_CIPHER_freeZEVP_get_cipherbyname)r   r   Ú
evp_cipherr   r   r   Ú_evp_cipher1   s    

r"   )r   r   Úkeyc             C   s|   | j jƒ }| j|| jjkƒ | jj|| j jƒ}t|ƒ}t|| ƒ}| jj	|ƒ}| j j
||| jj|| jjdƒ}| j|dkƒ |S )Nr   )r   ÚEVP_CIPHER_CTX_newr   r   r   r    ÚEVP_CIPHER_CTX_freer   r"   Úfrom_bufferÚEVP_CipherInit_ex)r   r   r#   Úctxr   r!   Úkey_ptrÚresr   r   r   Ú_aead_create_ctxA   s    

r+   )r   r   r#   ÚnonceÚtagÚtag_lenÚ	operationc          	   C   s.  t || ƒ}| jjƒ }| jj|| jjƒ}| jj||| jj| jj| jjt|t	kƒƒ}	| j
|	dkƒ | jj|| jjt|ƒ| jjƒ}	| j
|	dkƒ |tkr¬|d k	sžt‚t| ||ƒ n2|jdƒrÞ| jj|| jj|| jjƒ}	| j
|	dkƒ | jj|ƒ}
| jj|ƒ}| jj|| jj| jj||
t|t	kƒƒ}	| j
|	dkƒ |S )Nr   s   -ccm)r"   r   r$   r   r    r%   r'   r   ÚintÚ_ENCRYPTr   ÚEVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLENr   Ú_DECRYPTr   Ú_set_tagr   ÚEVP_CTRL_AEAD_SET_TAGr&   )r   r   r#   r,   r-   r.   r/   r!   r(   r*   Ú	nonce_ptrr)   r   r   r   Ú_aead_setupX   sF    	



r7   )r-   r   c             C   s8   | j j|ƒ}| jj|| jjt|ƒ|ƒ}| j|dkƒ d S )Nr   )r   r&   r   r2   r5   r   r   )r   r(   r-   Ztag_ptrr*   r   r   r   r4   Œ   s    r4   )r,   r/   r   c          	   C   sH   | j j|ƒ}| jj|| j j| j j| j j|t|tkƒƒ}| j|dkƒ d S )Nr   )r   r&   r   r'   r   r0   r1   r   )r   r(   r,   r/   r6   r*   r   r   r   Ú_set_nonce_operation”   s    r8   )r   Údata_lenr   c             C   s:   | j jdƒ}| jj|| j j|| j j|ƒ}| j|dkƒ d S )Nzint *r   )r   Únewr   ÚEVP_CipherUpdater   r   )r   r(   r9   Zintptrr*   r   r   r   Ú_set_length¡   s    r<   )r   Úassociated_datar   c             C   sF   | j jdƒ}| j j|ƒ}| jj|| j j||t|ƒƒ}| j|dkƒ d S )Nzint *r   )r   r:   r&   r   r;   r   r   r   )r   r(   r=   ÚoutlenZ
a_data_ptrr*   r   r   r   Ú_process_aad©   s
    r?   )r   Údatar   c             C   sp   | j jdƒ}| j jdt|ƒƒ}| j j|ƒ}| jj||||t|ƒƒ}|dkrV| jƒ  t‚| j j||d ƒd d … S )Nzint *zunsigned char[]r   )	r   r:   r   r&   r   r;   Ú_consume_errorsr   Úbuffer)r   r(   r@   r>   ÚbufZdata_ptrr*   r   r   r   Ú_process_data²   s    rD   )r   r   r,   r@   r=   Ú
tag_lengthr(   r   c             C   sT  ddl m}m} |d kr8t|ƒ}	t| |	|j|d |tƒ}nt| ||tƒ t||ƒr`t	| |t
|ƒƒ x|D ]}
t| ||
ƒ qfW t| ||ƒ}| jjdƒ}| jjddƒ}| jj|||ƒ}| j|dkƒ || jj||d ƒd d … 7 }| jjd|ƒ}| jj|| jj||ƒ}| j|dkƒ | jj|ƒd d … }t||ƒ�rH| jt
|ƒdkƒ || S || S d S )Nr   )r   r   zint *zunsigned char[]é   )r   r   r   r   r7   r   r1   r8   r   r<   r   r?   rD   r   r:   r   ÚEVP_CipherFinal_exr   rB   r2   ZEVP_CTRL_AEAD_GET_TAG)r   r   r,   r@   r=   rE   r(   r   r   r   ÚadÚprocessed_datar>   rC   r*   Ztag_bufr-   r   r   r   Ú_encrypt¾   s>    	

rJ   c             C   sÄ  ddl m}m} t|ƒ|k r t‚t||ƒrD|d |… }	||d … }n|| d … }	|d | … }|d krˆt|ƒ}
t| |
|j||	|t	ƒ}nt
| ||t	ƒ t| ||	ƒ t||ƒr¼t| |t|ƒƒ x|D ]}t| ||ƒ qÂW t||ƒ�rV| jjdƒ}| jjdt|ƒƒ}| jj|ƒ}| jj||||t|ƒƒ}|dk�r:| jƒ  t‚| jj||d ƒd d … }njt| ||ƒ}| jjdƒ}| jjddƒ}| jj|||ƒ}|| jj||d ƒd d … 7 }|dk�rÀ| jƒ  t‚|S )Nr   )r   r   zint *zunsigned char[]r	   rF   )r   r   r   r   r   r   r   r7   r   r3   r8   r4   r<   r?   r   r:   r&   r   r;   rA   rB   rD   rG   )r   r   r,   r@   r=   rE   r(   r   r   r-   r   rH   r>   rC   Zd_ptrr*   rI   r   r   r   Ú_decryptø   sH    	




rK   )N)N) ÚtypingZcryptography.exceptionsr   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r   r   r   r   r   r   ÚUnionr
   r1   r3   Úbytesr   r"   r+   ÚOptionalr0   r7   r4   r8   r<   r?   rD   ÚListÚAnyrJ   rK   r   r   r   r   Ú<module>   s:   -	9