o
    
þðcÊ  ã                   @   sh   d dl Z d dlmZ d dlmZmZ d dlmZmZm	Z	 d dl
mZ G dd„ deƒZG dd	„ d	eƒZdS )
é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKey)Úconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc                   @   sx   e Zd Z	ddejdedeje deje dej	f
dd„Z
d	ed
efdd„Zd	ed
efdd„Zd	eded
dfdd„ZdS )ÚHKDFNÚ	algorithmÚlengthÚsaltÚinfoÚbackendc                 C   sB   || _ |d u rd| j j }nt d|¡ || _t| j ||ƒ| _d S )Nó    r   )Ú
_algorithmÚdigest_sizer   Ú_check_bytesÚ_saltÚ
HKDFExpandÚ_hkdf_expand)Úselfr
   r   r   r   r   © r   úT/opt/certbot/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/hkdf.pyÚ__init__   s   zHKDF.__init__Úkey_materialÚreturnc                 C   s"   t  | j| j¡}| |¡ | ¡ S ©N)r   ÚHMACr   r   ÚupdateÚfinalize)r   r   Úhr   r   r   Ú_extract"   s   
zHKDF._extractc                 C   s   t  d|¡ | j |  |¡¡S )Nr   )r   Ú_check_bytesliker   Úderiver!   ©r   r   r   r   r   r#   '   s   zHKDF.deriveÚexpected_keyc                 C   ó   t  |  |¡|¡st‚d S r   ©r   Úbytes_eqr#   r   ©r   r   r%   r   r   r   Úverify+   ó   ÿzHKDF.verifyr   )Ú__name__Ú
__module__Ú__qualname__r   ÚHashAlgorithmÚintÚtypingÚOptionalÚbytesÚAnyr   r!   r#   r*   r   r   r   r   r	      s     úþýüû
úr	   c                	   @   sn   e Zd Z	ddejdedeje dej	fdd„Z
ded	efd
d„Zded	efdd„Zdeded	dfdd„ZdS )r   Nr
   r   r   r   c                 C   sV   || _ d|j }||krtd |¡ƒ‚|| _|d u rd}nt d|¡ || _d| _d S )Néÿ   z)Cannot derive keys larger than {} octets.ó    r   F)	r   r   Ú
ValueErrorÚformatÚ_lengthr   r   Ú_infoÚ_used)r   r
   r   r   r   Ú
max_lengthr   r   r   r   1   s   
ÿ
zHKDFExpand.__init__r   r   c                 C   s    dg}d}| j jt|ƒd  | jk rFt || j ¡}| |d ¡ | | j¡ | t|gƒ¡ | 	| 
¡ ¡ |d7 }| j jt|ƒd  | jk sd |¡d | j… S )Nr6   é   éÿÿÿÿ)r   r   Úlenr9   r   r   r   r:   r3   Úappendr   Újoin)r   r   ÚoutputÚcounterr    r   r   r   Ú_expandL   s   úzHKDFExpand._expandc                 C   s&   t  d|¡ | jrt‚d| _|  |¡S )Nr   T)r   r"   r;   r   rD   r$   r   r   r   r#   Z   s
   
zHKDFExpand.deriver%   c                 C   r&   r   r'   r)   r   r   r   r*   b   r+   zHKDFExpand.verifyr   )r,   r-   r.   r   r/   r0   r1   r2   r3   r4   r   rD   r#   r*   r   r   r   r   r   0   s    ûþýü
ûr   )r1   Úcryptographyr   Úcryptography.exceptionsr   r   Úcryptography.hazmat.primitivesr   r   r   Ú"cryptography.hazmat.primitives.kdfr   r	   r   r   r   r   r   Ú<module>   s   "