a ‚oeÜã@stddlmZddlZddlmZddlmZmZmZm Z ddl m Z ddl mZmZddlmZGdd „d eƒZdS) é)Ú annotationsN)Úutils)ÚAlreadyFinalizedÚ InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Úopenssl)Ú constant_timeÚhashes)ÚKeyDerivationFunctionc@sFeZdZdddddddœdd„Zddd œd d „Zddd d œdd„ZdS)Ú PBKDF2HMACNzhashes.HashAlgorithmÚintÚbytesz typing.Any)Ú algorithmÚlengthÚsaltÚ iterationsÚbackendcCsXddlm}| |¡s*td |j¡tjƒ‚d|_||_ ||_ t   d|¡||_ ||_dS)Nr)rz/{} is not supported for PBKDF2 by this backend.Fr)Z,cryptography.hazmat.backends.openssl.backendrZpbkdf2_hmac_supportedrÚformatÚnamerZUNSUPPORTED_HASHÚ_usedÚ _algorithmÚ_lengthrZ _check_bytesÚ_saltÚ _iterations)ÚselfrrrrrZossl©rúJC:\Program Files\Certbot\pkgs\cryptography\hazmat\primitives\kdf\pbkdf2.pyÚ__init__s  ÿü zPBKDF2HMAC.__init__)Ú key_materialÚreturncCs0|jrtdƒ‚d|_tj ||j|j|j|j¡S)Nz'PBKDF2 instances can only be used once.T) rrÚ rust_opensslZkdfZderive_pbkdf2_hmacrrrr)rrrrrÚderive0sûzPBKDF2HMAC.deriveÚNone)rÚ expected_keyr cCs"| |¡}t ||¡stdƒ‚dS)NzKeys do not match.)r"r Zbytes_eqr)rrr$Z derived_keyrrrÚverify=s  zPBKDF2HMAC.verify)N)Ú__name__Ú __module__Ú __qualname__rr"r%rrrrr sú r )Z __future__rÚtypingZ cryptographyrZcryptography.exceptionsrrrrZ"cryptography.hazmat.bindings._rustrr!Zcryptography.hazmat.primitivesr r Z"cryptography.hazmat.primitives.kdfr r rrrrÚs