Ë
    ýQµiÜ  ã                  óz   — d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZ  G d„ d	e«      Zy)
é    )ÚannotationsN)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Úopenssl)Úconstant_timeÚhashes)ÚKeyDerivationFunctionc                  ó:   — e Zd Z	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zy)	Ú
PBKDF2HMACNc                ó
  — ddl m} |j                  |«      s3t        dj	                  |j
                  «      t        j                  «      ‚d| _        || _	        || _
        t        j                  d|«       || _        || _        y )Nr   )Úbackendz/{} is not supported for PBKDF2 by this backend.FÚsalt)Ú,cryptography.hazmat.backends.openssl.backendr   Úpbkdf2_hmac_supportedr   ÚformatÚnamer   ÚUNSUPPORTED_HASHÚ_usedÚ
_algorithmÚ_lengthr   Ú_check_bytesÚ_saltÚ_iterations)ÚselfÚ	algorithmÚlengthr   Ú
iterationsr   Úossls          úK/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/pbkdf2.pyÚ__init__zPBKDF2HMAC.__init__   sz   € õ	
ð ×)Ñ)¨)Ô4Ü&ØA×HÑHØ—N‘Nóô ×)Ñ)ó	ð ð ˆŒ
Ø#ˆŒØˆŒÜ×Ñ˜6 4Ô(ØˆŒ
Ø%ˆÕó    c                óÔ   — | j                   rt        d«      ‚d| _         t        j                  j	                  || j
                  | j                  | j                  | j                  «      S )Nz'PBKDF2 instances can only be used once.T)	r   r   Úrust_opensslÚkdfÚderive_pbkdf2_hmacr   r   r   r   )r   Úkey_materials     r"   ÚderivezPBKDF2HMAC.derive0   sV   € Ø�:Š:Ü"Ð#LÓMÐMØˆŒ
ä×Ñ×2Ñ2ØØ�O‰OØ�J‰JØ×ÑØ�L‰Ló
ð 	
r$   c                óh   — | j                  |«      }t        j                  ||«      st        d«      ‚y )NzKeys do not match.)r*   r
   Úbytes_eqr   )r   r)   Úexpected_keyÚderived_keys       r"   ÚverifyzPBKDF2HMAC.verify=   s2   € Ø—k‘k ,Ó/ˆÜ×%Ñ% k°<Ô@ÜÐ1Ó2Ð2ð Ar$   )N)
r   zhashes.HashAlgorithmr   Úintr   Úbytesr    r0   r   z
typing.Any)r)   r1   Úreturnr1   )r)   r1   r-   r1   r2   ÚNone)Ú__name__Ú
__module__Ú__qualname__r#   r*   r/   © r$   r"   r   r      sF   „ ð #ð&à'ð&ð ð&ð ð	&ð
 ð&ð ó&ó4
ô3r$   r   )Ú
__future__r   ÚtypingÚcryptographyr   Úcryptography.exceptionsr   r   r   r   Ú"cryptography.hazmat.bindings._rustr	   r&   Úcryptography.hazmat.primitivesr
   r   Ú"cryptography.hazmat.primitives.kdfr   r   r7   r$   r"   ú<module>r?      s3   ðõ
 #ã å ÷ó õ Gß @Ý Dô+3Ð&õ +3r$   