a ‚oeÒã@spddlmZddlZddlmZddlmZmZddlm Z m Z ddl m Z ddd œd d „Z Gd d „d e ƒZdS)é)Ú annotationsN)Úutils)ÚAlreadyFinalizedÚ InvalidKey)Ú constant_timeÚhashes)ÚKeyDerivationFunctionÚintÚbytes)ÚnÚreturncCs|jddd�S)NéZbig)ÚlengthÚ byteorder)Úto_bytes)r ©rúKC:\Program Files\Certbot\pkgs\cryptography\hazmat\primitives\kdf\x963kdf.pyÚ _int_to_u32besrc@sDeZdZddddddœdd„Zd d d œd d „Zd d d dœdd„ZdS)ÚX963KDFNzhashes.HashAlgorithmr ztyping.Optional[bytes]z typing.Any)Ú algorithmrÚ sharedinfoÚbackendcCsR|jd}||kr"td|›d�ƒ‚|dur6t d|¡||_||_||_d|_dS)NlÿÿzCannot derive keys larger than z bits.rF)Z digest_sizeÚ ValueErrorrZ _check_bytesÚ _algorithmÚ_lengthÚ _sharedinfoÚ_used)ÚselfrrrrZmax_lenrrrÚ__init__s  zX963KDF.__init__r )Ú key_materialr cCsª|jr t‚d|_t d|¡dg}d}d}|j|kr–t |j¡}| |¡| t |ƒ¡|j durn| |j ¡|  |  ¡¡|t |dƒ7}|d7}q*d |¡d|j…S)NTrórééÿÿÿÿ)rrrZ_check_byteslikerrZHashrÚupdaterrÚappendÚfinalizeÚlenÚjoin)rrÚoutputZoutlenZcounterÚhrrrÚderive&s"       zX963KDF.deriveÚNone)rÚ expected_keyr cCst | |¡|¡st‚dS)N)rZbytes_eqr*r)rrr,rrrÚverify;szX963KDF.verify)N)Ú__name__Ú __module__Ú __qualname__rr*r-rrrrrsûr)Z __future__rÚtypingZ cryptographyrZcryptography.exceptionsrrZcryptography.hazmat.primitivesrrZ"cryptography.hazmat.primitives.kdfrrrrrrrÚs