a °…bðã@s\ddlZddlmZddlmZmZmZmZddlm Z m Z ddl m Z Gdd„de ƒZ dS)éN)Úutils)ÚAlreadyFinalizedÚ InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú constant_timeÚhashes)ÚKeyDerivationFunctionc@sJeZdZd ejeeeejdœdd„Z eedœdd„Z eeddœd d „Z dS) Ú PBKDF2HMACN)Ú algorithmÚlengthÚsaltÚ iterationsÚbackendcCsXddlm}| |¡s*td |j¡tjƒ‚d|_||_ ||_ t   d|¡||_ ||_dS)Nr©rz/{} is not supported for PBKDF2 by this backend.Fr )Ú,cryptography.hazmat.backends.openssl.backendrZpbkdf2_hmac_supportedrÚformatÚnamerZUNSUPPORTED_HASHÚ_usedÚ _algorithmÚ_lengthrÚ _check_bytesÚ_saltÚ _iterations)Úselfr r r rrZossl©rúP/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/primitives/kdf/pbkdf2.pyÚ__init__s  ÿü zPBKDF2HMAC.__init__)Ú key_materialÚreturncCsF|jrtdƒ‚d|_t d|¡ddlm}| |j|j|j |j |¡S)Nz'PBKDF2 instances can only be used once.Trrr) rrrZ_check_byteslikerrZderive_pbkdf2_hmacrrrr)rrrrrrÚderive.s  ûzPBKDF2HMAC.derive)rÚ expected_keyrcCs"| |¡}t ||¡stdƒ‚dS)NzKeys do not match.)r rZbytes_eqr)rrr!Z derived_keyrrrÚverify>s  zPBKDF2HMAC.verify)N) Ú__name__Ú __module__Ú __qualname__rZ HashAlgorithmÚintÚbytesÚtypingÚAnyrr r"rrrrr súú r )r(Z cryptographyrZcryptography.exceptionsrrrrZcryptography.hazmat.primitivesrrZ"cryptography.hazmat.primitives.kdfr r rrrrÚs