o
    
þðc¹  ã                   @   sv   d dl Z d dlmZ d dlmZ e jrd dlmZ dddefdd	„Z	d
ede j
eejf de jeejf fdd„ZdS )é    N)Úhashes)Ú	Prehashed)ÚBackendÚbackendr   Úreturnc                 C   s  | j  || jj¡}|  || jjk¡ | j || j j¡}| j  |¡}|  |dk¡ | j  ||j	¡}|  |dk¡ | j 
d¡}| j  || jj|¡}|  |dk¡ |  |d dk¡ | j 
d|d ¡}| j  |||¡}|dkru|  ¡ }td|ƒ‚| j ||d ¡d d … S )Né   zsize_t *r   zunsigned char[]zError computing shared key.)Ú_libÚEVP_PKEY_CTX_newÚ_ffiÚNULLÚopenssl_assertÚgcÚEVP_PKEY_CTX_freeÚEVP_PKEY_derive_initÚEVP_PKEY_derive_set_peerÚ	_evp_pkeyÚnewÚEVP_PKEY_deriveÚ_consume_errors_with_textÚ
ValueErrorÚbuffer)r   Úevp_pkeyÚpeer_public_keyÚctxÚresÚkeylenÚbufÚerrors_with_text© r   úW/opt/certbot/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/utils.pyÚ_evp_pkey_derive   s"   
r    ÚdataÚ	algorithmc                 C   sL   t |tƒst |¡}| | ¡ | ¡ } n|j}t| ƒ|jkr"t	dƒ‚| |fS )NzNThe provided data must be the same length as the hash algorithm's digest size.)
Ú
isinstancer   r   ÚHashÚupdateÚfinalizeÚ
_algorithmÚlenÚdigest_sizer   )r!   r"   Úhash_ctxr   r   r   Ú_calculate_digest_and_algorithm#   s   



ÿr+   )ÚtypingÚcryptography.hazmat.primitivesr   Ú/cryptography.hazmat.primitives.asymmetric.utilsr   ÚTYPE_CHECKINGÚ,cryptography.hazmat.backends.openssl.backendr   Úbytesr    ÚUnionÚHashAlgorithmÚTupler+   r   r   r   r   Ú<module>   s   ÿþý