Ë
    ýQµi_>  ã                  óf  — d dl mZ d dlZd dlmZ ej
                  r(d 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d„Zdd„Z	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	„Z	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
„Z	 d	 	 	 	 	 	 	 dd„Zd d„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„ZdZ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d„Z$	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z%y))é    )ÚannotationsN)Ú
InvalidTag)ÚBackend©ÚAESCCMÚAESGCMÚAESOCB3ÚAESSIVÚChaCha20Poly1305c                óV   — ddl m} | j                  j                  xr t	        ||«      S )zz
    Checks whether the given cipher is supported through
    EVP_AEAD rather than the normal OpenSSL EVP_CIPHER API.
    r   ©r   )Ú+cryptography.hazmat.primitives.ciphers.aeadr   Ú_libÚCryptography_HAS_EVP_AEADÚ
isinstance©ÚbackendÚcipherr   s      úK/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/aead.pyÚ_is_evp_aead_supported_cipherr      s,   € õ Mà�<‰<×1Ñ1ò ´jØÐ ó7ð ó    c                ó   — t        | |«      ryt        |«      }| j                  r|| j                  vry|j	                  d«      r| j
                  j                  dk(  S | j
                  j                  |«      | j                  j                  k7  S )NTFó   -sivé   )
r   Ú_evp_cipher_cipher_nameÚ_fips_enabledÚ
_fips_aeadÚendswithr   Ú#CRYPTOGRAPHY_OPENSSL_300_OR_GREATERÚEVP_get_cipherbynameÚ_ffiÚNULL)r   r   Úcipher_names      r   Ú_aead_cipher_supportedr$   (   s‚   € Ü$ W¨fÔ5Øä-¨fÓ5ˆØ× Ò  [¸×8JÑ8JÑ%JØð ×Ñ Ô(Ø—<‘<×CÑCÀqÑHÐHð —‘×1Ñ1°+Ó>Ø—<‘<×$Ñ$ñ%ðr   c                óN   — t        | |«      rt        | ||«      S t        | ||«      S ©N)r   Ú_evp_aead_create_ctxÚ_evp_cipher_create_ctx)r   r   Úkeys      r   Ú_aead_create_ctxr*   ;   s,   € ô
 % W¨fÔ5Ü# G¨V°SÓ9Ð9ä% g¨v°sÓ;Ð;r   c           	     ó^   — t        | |«      rt        | ||||||«      S t        | ||||||«      S r&   )r   Ú_evp_aead_encryptÚ_evp_cipher_encrypt©r   r   ÚnonceÚdataÚassociated_dataÚ
tag_lengthÚctxs          r   Ú_encryptr4   F   óH   € ô % W¨fÔ5Ü Ø�V˜U D¨/¸:Àsó
ð 	
ô #Ø�V˜U D¨/¸:Àsó
ð 	
r   c           	     ó^   — t        | |«      rt        | ||||||«      S t        | ||||||«      S r&   )r   Ú_evp_aead_decryptÚ_evp_cipher_decryptr.   s          r   Ú_decryptr9   Y   r5   r   c                óŽ  — t        | |«      }|€J ‚| j                  j                  |«      }|€| j                  j                  n|}| j                  j                  ||t        |«      |«      }| j                  || j                  j                  k7  «       | j                  j                  || j                  j                  «      }|S r&   )Ú_evp_aead_get_cipherr!   Úfrom_bufferr   ÚEVP_AEAD_DEFAULT_TAG_LENGTHÚCryptography_EVP_AEAD_CTX_newÚlenÚopenssl_assertr"   ÚgcÚEVP_AEAD_CTX_free)r   r   r)   Útag_lenÚaead_cipherÚkey_ptrr3   s          r   r'   r'   l   s³   € ô ' w°Ó7€KØÐ"Ð"Ð"Ø�l‰l×&Ñ& sÓ+€Gð ˆ?ð 	�‰×0Ò0àð ð
 �,‰,×
4Ñ
4Ø�Wœc #›h¨ó€Cð ×Ñ˜3 '§,¡,×"3Ñ"3Ñ3Ô4Ø
�,‰,�/‰/˜#˜wŸ|™|×=Ñ=Ó
>€CØ€Jr   c                ó^   — ddl m} t        ||«      sJ ‚| j                  j	                  «       S )Nr   r   )r   r   r   r   ÚEVP_aead_chacha20_poly1305r   s      r   r;   r;   ‚   s-   € õô
 �fÐ.Ô/Ð/Ð/Ø�<‰<×2Ñ2Ó4Ð4r   c                ó˜  — |€J ‚t        | |«      }|€J ‚| j                  j                  d«      }t        |«      | j                  j                  |«      z   }	| j                  j                  d|	«      }
| j                  j                  |«      }| j                  j                  |«      }dj                  |«      }| j                  j                  |«      }| j                  j                  ||
||	|t        |«      |t        |«      |t        |«      «
      }| j                  |dk(  «       | j                  j                  |
|d   «      d d  }|S )Núsize_t *ú	uint8_t[]r   r   r   )r;   r!   Únewr?   r   ÚEVP_AEAD_max_overheadr<   ÚjoinÚEVP_AEAD_CTX_sealr@   Úbuffer)r   r   r/   r0   r1   r2   r3   rD   Úout_lenÚmax_out_lenÚout_bufÚdata_ptrÚ	nonce_ptrÚaadÚaad_ptrÚresÚencrypted_datas                    r   r,   r,   Œ   s0  € ð ˆ?Ðˆ?ä& w°Ó7€KØÐ"Ð"Ð"à�l‰l×Ñ˜zÓ*€Gô �d“)˜gŸl™l×@Ñ@ÀÓMÑM€KØ�l‰l×Ñ˜{¨KÓ8€GØ�|‰|×'Ñ'¨Ó-€HØ—‘×(Ñ(¨Ó/€IØ
�(‰(�?Ó
#€CØ�l‰l×&Ñ& sÓ+€Gà
�,‰,×
(Ñ
(ØØØØØÜˆE‹
ØÜˆD‹	ØÜˆC‹ó€Cð ×Ñ˜3 !™8Ô$Ø—\‘\×(Ñ(¨°'¸!±*Ó=¹aÐ@€NØÐr   c                óv  — t        |«      |k  rt        ‚|€J ‚| j                  j                  d«      }t        |«      }| j                  j                  d|«      }	| j                  j	                  |«      }
| j                  j	                  |«      }dj                  |«      }| j                  j	                  |«      }| j                  j                  ||	|||t        |«      |
t        |«      |t        |«      «
      }|dk(  r| j                  «        t        ‚| j                  j                  |	|d   «      d d  }|S )NrI   rJ   r   r   )
r?   r   r!   rK   r<   rM   r   ÚEVP_AEAD_CTX_openÚ_consume_errorsrO   )r   r   r/   r0   r1   r2   r3   rP   rQ   rR   rS   rT   rU   rV   rW   Údecrypted_datas                   r   r7   r7   µ   s  € ô ˆ4ƒy�:ÒÜÐàˆ?Ðˆ?à�l‰l×Ñ˜zÓ*€Gä�d“)€KØ�l‰l×Ñ˜{¨KÓ8€GØ�|‰|×'Ñ'¨Ó-€HØ—‘×(Ñ(¨Ó/€IØ
�(‰(�?Ó
#€CØ�l‰l×&Ñ& sÓ+€Gà
�,‰,×
(Ñ
(ØØØØØÜˆE‹
ØÜˆD‹	ØÜˆC‹ó€Cð ˆa‚xØ×ÑÔ!ÜÐà—\‘\×(Ñ(¨°'¸!±*Ó=¹aÐ@€NØÐr   r   c                óú  — ddl m}m}m}m}m} t        | |«      ryt        | |«      r+dt        | j                  «      dz  › d�j                  d«      S t        | |«      r+dt        | j                  «      dz  › d�j                  d«      S t        | |«      r.dt        | j                  «      dz  d	z  › d
�j                  d«      S t        | |«      sJ ‚dt        | j                  «      dz  › d�j                  d«      S )Nr   r   s   chacha20-poly1305zaes-é   z-ccmÚasciiz-ocbé   z-sivz-gcm)
r   r   r   r	   r
   r   r   r?   Ú_keyÚencode)r   r   r   r	   r
   r   s         r   r   r   å   só   € ÷õ ô �&Ð*Ô+Ø#Ü	�F˜FÔ	#Ø”c˜&Ÿ+™+Ó&¨Ñ*Ð+¨4Ð0×7Ñ7¸Ó@Ð@Ü	�F˜GÔ	$Ø”c˜&Ÿ+™+Ó&¨Ñ*Ð+¨4Ð0×7Ñ7¸Ó@Ð@Ü	�F˜FÔ	#Ø”c˜&Ÿ+™+Ó&¨Ñ*¨aÑ/Ð0°Ð5×<Ñ<¸WÓEÐEä˜& &Ô)Ð)Ð)Ø”c˜&Ÿ+™+Ó&¨Ñ*Ð+¨4Ð0×7Ñ7¸Ó@Ð@r   c                óì  — | j                  d«      rŸ|j                  j                  |j                  j                  | |j                  j                  «      }|j                  ||j                  j                  k7  «       |j                  j                  ||j                  j                  «      }|S |j                  j                  | «      }|j                  ||j                  j                  k7  «       |S )Nr   )	r   r   ÚEVP_CIPHER_fetchr!   r"   r@   rA   ÚEVP_CIPHER_freer    )r#   r   Ú
evp_ciphers      r   Ú_evp_cipherrg   û   s¿   € Ø×Ñ˜GÔ$Ø—\‘\×2Ñ2Ø�L‰L×ÑØØ�L‰L×Ñó
ˆ
ð
 	×Ñ˜z¨W¯\©\×->Ñ->Ñ>Ô?Ø—\‘\—_‘_ Z°·±×1MÑ1MÓNˆ
ð
 Ðð —\‘\×6Ñ6°{ÓCˆ
Ø×Ñ˜z¨W¯\©\×->Ñ->Ñ>Ô?àÐr   c                ó  — | j                   j                  «       }| j                  || j                  j                  k7  «       | j                  j                  || j                   j                  «      }t        |«      }t        || «      }| j                  j                  |«      }| j                   j                  ||| j                  j                  || j                  j                  d«      }| j                  |dk7  «       |S ©Nr   )r   ÚEVP_CIPHER_CTX_newr@   r!   r"   rA   ÚEVP_CIPHER_CTX_freer   rg   r<   ÚEVP_CipherInit_ex)r   r   r)   r3   r#   rf   rE   rW   s           r   r(   r(     sÎ   € ð
 �,‰,×
)Ñ
)Ó
+€CØ×Ñ˜3 '§,¡,×"3Ñ"3Ñ3Ô4Ø
�,‰,�/‰/˜#˜wŸ|™|×?Ñ?Ó
@€CÜ)¨&Ó1€KÜ˜[¨'Ó2€JØ�l‰l×&Ñ& sÓ+€GØ
�,‰,×
(Ñ
(ØØØ�‰×ÑØØ�‰×ÑØ	ó€Cð ×Ñ˜3 !™8Ô$Ø€Jr   c                óÈ  — t        || «      }| j                  j                  «       }| j                  j	                  || j                  j
                  «      }| j                  j                  ||| j                  j                  | j                  j                  | j                  j                  t        |t        k(  «      «      }	| j                  |	dk7  «       | j                  j                  || j                  j                  t        |«      | j                  j                  «      }	| j                  |	dk7  «       |t        k(  r|€J ‚t        | ||«       nk|j!                  d«      rZ| j                  j                  || j                  j"                  || j                  j                  «      }	| j                  |	dk7  «       | j                  j%                  |«      }
| j                  j%                  |«      }| j                  j                  || j                  j                  | j                  j                  ||
t        |t        k(  «      «      }	| j                  |	dk7  «       |S )Nr   s   -ccm)rg   r   rj   r!   rA   rk   rl   r"   ÚintÚ_ENCRYPTr@   ÚEVP_CIPHER_CTX_ctrlÚEVP_CTRL_AEAD_SET_IVLENr?   Ú_DECRYPTÚ_evp_cipher_set_tagr   ÚEVP_CTRL_AEAD_SET_TAGr<   )r   r#   r)   r/   ÚtagrC   Ú	operationrf   r3   rW   rT   rE   s               r   Ú_evp_cipher_aead_setuprw   "  sç  € ô ˜[¨'Ó2€JØ
�,‰,×
)Ñ
)Ó
+€CØ
�,‰,�/‰/˜#˜wŸ|™|×?Ñ?Ó
@€CØ
�,‰,×
(Ñ
(ØØØ�‰×ÑØ�‰×ÑØ�‰×ÑÜˆIœÑ!Ó"ó€Cð ×Ñ˜3 !™8Ô$à
�,‰,×
*Ñ
*ØØ�‰×,Ñ,ÜˆE‹
Ø�‰×Ñó	€Cð ×Ñ˜3 !™8Ô$Ø”HÒØˆÐˆÜ˜G S¨#Õ.Ø	×	Ñ	˜gÔ	&Ø�l‰l×.Ñ.ØØ�L‰L×.Ñ.ØØ�L‰L×Ñó	
ˆð 	×Ñ˜s a™xÔ(à—‘×(Ñ(¨Ó/€IØ�l‰l×&Ñ& sÓ+€GØ
�,‰,×
(Ñ
(ØØ�‰×ÑØ�‰×ÑØØÜˆIœÑ!Ó"ó€Cð ×Ñ˜3 !™8Ô$Ø€Jr   c                óØ   — | j                   j                  |«      }| j                  j                  || j                  j                  t        |«      |«      }| j                  |dk7  «       y ri   )r!   r<   r   rp   rt   r?   r@   )r   r3   ru   Útag_ptrrW   s        r   rs   rs   Y  sU   € Ø�l‰l×&Ñ& sÓ+€GØ
�,‰,×
*Ñ
*ØˆW�\‰\×/Ñ/´°S³¸7ó€Cð ×Ñ˜3 !™8Õ$r   c                ó:  — | j                   j                  |«      }| j                  j                  || j                   j                  | j                   j                  | j                   j                  |t        |t        k(  «      «      }| j                  |dk7  «       y ri   )r!   r<   r   rl   r"   rn   ro   r@   )r   r3   r/   rv   rT   rW   s         r   Ú_evp_cipher_set_nonce_operationr{   a  sz   € ð —‘×(Ñ(¨Ó/€IØ
�,‰,×
(Ñ
(ØØ�‰×ÑØ�‰×ÑØ�‰×ÑØÜˆIœÑ!Ó"ó€Cð ×Ñ˜3 !™8Õ$r   c                óð   — | j                   j                  d«      }| j                  j                  || j                   j                  || j                   j                  |«      }| j                  |dk7  «       y ©Núint *r   )r!   rK   r   ÚEVP_CipherUpdater"   r@   )r   r3   Údata_lenÚintptrrW   s        r   Ú_evp_cipher_set_lengthr‚   p  s]   € Ø�\‰\×Ñ˜gÓ&€FØ
�,‰,×
'Ñ
'ØˆW�\‰\×Ñ ¨¯©×(9Ñ(9¸8ó€Cð ×Ñ˜3 !™8Õ$r   c           	     ó  — | j                   j                  d«      }| j                   j                  |«      }| j                  j	                  || j                   j
                  ||t        |«      «      }| j                  |dk7  «       y r}   )r!   rK   r<   r   r   r"   r?   r@   )r   r3   r1   ÚoutlenÚ
a_data_ptrrW   s         r   Ú_evp_cipher_process_aadr†   x  sn   € ð �\‰\×Ñ˜gÓ&€FØ—‘×)Ñ)¨/Ó:€JØ
�,‰,×
'Ñ
'ØˆW�\‰\×Ñ ¨
´C¸Ó4Hó€Cð ×Ñ˜3 !™8Õ$r   c           	     ó‚  — | j                   j                  d«      }| j                   j                  dt        |«      «      }| j                   j                  |«      }| j                  j                  ||||t        |«      «      }|dk(  r| j                  «        t        ‚| j                   j                  ||d   «      d d  S )Nr~   úunsigned char[]r   )	r!   rK   r?   r<   r   r   r[   r   rO   )r   r3   r0   r„   ÚbufrS   rW   s          r   Ú_evp_cipher_process_datarŠ   ƒ  sž   € Ø�\‰\×Ñ˜gÓ&€FØ
�,‰,×
Ñ
Ð,¬c°$«iÓ
8€CØ�|‰|×'Ñ'¨Ó-€HØ
�,‰,×
'Ñ
'¨¨S°&¸(ÄCÈÃIÓ
N€CØ
ˆa‚xà×ÑÔ!ÜÐØ�<‰<×Ñ˜s F¨1¡IÓ.©qÐ1Ð1r   c           	     ó–  — ddl m}m} |€+t        |«      }	t	        | |	|j
                  |d |t        «      }nt        | ||t        «       t        ||«      rt        | |t        |«      «       |D ]  }
t        | ||
«       Œ t        | ||«      }| j                  j                  d«      }| j                  j                  dd«      }| j                  j!                  |||«      }| j#                  |dk7  «       || j                  j%                  ||d   «      d d  z  }| j                  j                  d|«      }| j                  j'                  || j                  j(                  ||«      }| j#                  |dk7  «       | j                  j%                  |«      d d  }t        ||«      r"| j#                  t        |«      dk(  «       ||z   S ||z   S )Nr   ©r   r
   r~   rˆ   é   )r   r   r
   r   rw   ra   ro   r{   r   r‚   r?   r†   rŠ   r!   rK   r   ÚEVP_CipherFinal_exr@   rO   rp   ÚEVP_CTRL_AEAD_GET_TAG)r   r   r/   r0   r1   r2   r3   r   r
   r#   ÚadÚprocessed_datar„   r‰   rW   Útag_bufru   s                    r   r-   r-   �  s­  € ÷ Kà
€{Ü-¨fÓ5ˆÜ$ØØØ�K‰KØØØÜó
‰ô 	(¨°°e¼XÔFô
 �&˜&Ô!Ü˜w¨¬S°«YÔ7àò 2ˆÜ ¨¨bÕ1ð2ä-¨g°s¸DÓA€NØ�\‰\×Ñ˜gÓ&€Fð �,‰,×
Ñ
Ð,¨bÓ
1€CØ
�,‰,×
)Ñ
)¨#¨s°FÓ
;€CØ×Ñ˜3 !™8Ô$Ø�g—l‘l×)Ñ)¨#¨v°a©yÓ9¹!Ð<Ñ<€NØ�l‰l×ÑÐ0°*Ó=€GØ
�,‰,×
*Ñ
*ØˆW�\‰\×/Ñ/°¸Wó€Cð ×Ñ˜3 !™8Ô$Ø
�,‰,×
Ñ
˜gÓ
&¡qÐ
)€Cä�&˜&Ô!ð 	×Ñœs 3›x¨2™~Ô.Ø�^Ñ#Ð#à Ñ#Ð#r   c           	     óf  — ddl m}m} t        |«      |k  rt        ‚t        ||«      r|d | }	||d  }n|| d  }	|d |  }|€+t        |«      }
t        | |
|j                  ||	|t        «      }nt        | ||t        «       t        | ||	«       t        ||«      rt        | |t        |«      «       |D ]  }t        | ||«       Œ t        ||«      rÂ| j                  j                  d«      }| j                  j                  dt        |«      «      }| j                  j!                  |«      }| j"                  j%                  ||||t        |«      «      }|dk7  r| j'                  «        t        ‚| j                  j)                  ||d   «      d d  }|S t+        | ||«      }| j                  j                  d«      }| j                  j                  dd«      }| j"                  j-                  |||«      }|| j                  j)                  ||d   «      d d  z  }|dk(  r| j'                  «        t        ‚|S )Nr   rŒ   r~   rˆ   r   r�   )r   r   r
   r?   r   r   r   rw   ra   rr   r{   rs   r‚   r†   r!   rK   r<   r   r   r[   rO   rŠ   rŽ   )r   r   r/   r0   r1   r2   r3   r   r
   ru   r#   r�   r„   r‰   Úd_ptrrW   r‘   s                    r   r8   r8   Ê  s$  € ÷ Kä
ˆ4ƒy�:ÒÜÐä�&˜&Ô!ð �;�JÐˆØ�J�KÐ ‰à�J�;�<Ð ˆØ�L�j�[Ð!ˆØ
€{Ü-¨fÓ5ˆÜ$ØØØ�K‰KØØØÜó
‰ô 	(¨°°e¼XÔFÜ˜G S¨#Ô.ô
 �&˜&Ô!Ü˜w¨¬S°«YÔ7àò 2ˆÜ ¨¨bÕ1ð2ô �&˜&Ô!Ø—‘×!Ñ! 'Ó*ˆØ�l‰l×ÑÐ0´#°d³)Ó<ˆØ—‘×(Ñ(¨Ó.ˆØ�l‰l×+Ñ+¨C°°f¸eÄSÈÃYÓOˆØ�!Š8Ø×#Ñ#Ô%ÜÐà Ÿ™×,Ñ,¨S°&¸±)Ó<¹QÐ?ˆð Ðô 2°'¸3ÀÓEˆØ—‘×!Ñ! 'Ó*ˆà�l‰l×ÑÐ0°"Ó5ˆØ�l‰l×-Ñ-¨c°3¸Ó?ˆØ˜'Ÿ,™,×-Ñ-¨c°6¸!±9Ó=¹aÐ@Ñ@ˆØ�!Š8Ø×#Ñ#Ô%ÜÐàÐr   )r   r   r   Ú
_AEADTypesÚreturnÚbool)r   r   r   r•   r)   Úbytesr&   )r   r   r   r•   r/   r˜   r0   r˜   r1   ztyping.List[bytes]r2   rn   r3   z
typing.Anyr–   r˜   )r   r   r   r•   r)   r˜   rC   ztyping.Optional[int])r   r   r   r•   )r   r•   r–   r˜   )r#   r˜   r   r   )r   r   r#   r˜   r)   r˜   r/   r˜   ru   ztyping.Optional[bytes]rC   rn   rv   rn   )ru   r˜   r–   ÚNone)r/   r˜   rv   rn   r–   r™   )r   r   r€   rn   r–   r™   )r   r   r1   r˜   r–   r™   )r   r   r0   r˜   r–   r˜   )&Ú
__future__r   ÚtypingÚcryptography.exceptionsr   ÚTYPE_CHECKINGÚ,cryptography.hazmat.backends.openssl.backendr   r   r   r   r	   r
   r   ÚUnionr•   r   r$   r*   r4   r9   r'   r;   r,   r7   ro   rr   r   rg   r(   rw   rs   r{   r‚   r†   rŠ   r-   r8   © r   r   ú<module>r¡      s†  ðõ
 #ã å .à	×ÒÝD÷õ ð —‘Ø�˜ Ð)9Ð9ñ€Jð
ØðØ(ðà	óóð&<Øð<àð<ð 
ó<ð$ ð
Øð
àð
ð ð
ð ð	
ð
 (ð
ð ð
ð 
ð
ð ó
ð4 ð
Øð
àð
ð ð
ð ð	
ð
 (ð
ð ð
ð 
ð
ð ó
ð. %)ð	Øðàðð 
ðð "ó	ó,5ð&Øð&àð&ð ð&ð ð	&ð
 (ð&ð ð&ð 
ð&ð ó&ðR)Øð)àð)ð ð)ð ð	)ð
 (ð)ð ð)ð 
ð)ð ó)ðX €Ø€óAó,ð Øðàðð 
óð.4Øð4àð4ð 
ð4ð ð	4ð
 
 ð4ð ð4ð ó4ón%ð%Øð%Ø+.ð%à	ó%ó%ð%Øð%Ø,1ð%à	ó%ó	2ð& ð8$Øð8$àð8$ð ð8$ð ð	8$ð
 (ð8$ð ð8$ð 
ð8$ð ó8$ðD ðEØðEàðEð ðEð ð	Eð
 (ðEð ðEð 
ðEð ôEr   