B \Úæ` ã@sÈddlmZmZmZddlZddlmZddlmZm Z m Z m Z ddl m Z ddl mZddlmZmZmZddlmZd d „Zd d „Zd d„Ze e¡Gdd„deƒƒZe e¡Gdd„deƒƒZdS)é)Úabsolute_importÚdivisionÚprint_functionN)Úutils)ÚAlreadyFinalizedÚ InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú HMACBackend)Ú HashBackend)Ú constant_timeÚhashesÚhmac)ÚKeyDerivationFunctioncCs t d|¡S)Nz>I)ÚstructÚpack)Ún©rú_/opt/alt/python37/lib64/python3.7/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.pyÚ _int_to_u32besrcCs>|jd}||kr td |¡ƒ‚|dks:t|tƒs:tdƒ‚dS)Nlÿÿz)Can not derive keys larger than {0} bits.zotherinfo must be bytes.)Z digest_sizeÚ ValueErrorÚformatÚ isinstanceÚbytesÚ TypeError)Ú algorithmÚlengthÚ otherinfoZ max_lengthrrrÚ_common_args_checkss rcCsŽt|tƒstdƒ‚dg}d}d}xZ||krz|ƒ}| t|ƒ¡| |¡| |¡| | ¡¡|t|dƒ7}|d7}q"Wd |¡d|…S)Nzkey_material must be bytes.órééÿÿÿÿ) rrrÚupdaterÚappendZfinalizeÚlenÚjoin)Ú key_materialrZauxfnrÚoutputZoutlenZcounterÚhrrrÚ_concatkdf_derive"s     r)c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú ConcatKDFHashcCsTt|||ƒ||_||_||_|jdkr.d|_t|tƒsDtdtjƒ‚||_ d|_ dS)Nrz.Backend object does not implement HashBackend.F) rÚ _algorithmÚ_lengthÚ _otherinforr rr ÚBACKEND_MISSING_INTERFACEÚ_backendÚ_used)ÚselfrrrÚbackendrrrÚ__init__8s   zConcatKDFHash.__init__cCst |j|j¡S)N)r ZHashr+r/)r1rrrÚ_hashIszConcatKDFHash._hashcCs$|jr t‚d|_t||j|j|jƒS)NT)r0rr)r,r4r-)r1r&rrrÚderiveLs zConcatKDFHash.derivecCst | |¡|¡st‚dS)N)r Úbytes_eqr5r)r1r&Ú expected_keyrrrÚverifySszConcatKDFHash.verifyN)Ú__name__Ú __module__Ú __qualname__r3r4r5r8rrrrr*6sr*c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú ConcatKDFHMACcCs†t|||ƒ||_||_||_|jdkr.d|_|dksHt|tƒsHtdƒ‚|dkrZd|j}||_t|t ƒsvt dt j ƒ‚||_ d|_dS)Nrzsalt must be bytes.óz.Backend object does not implement HMACBackend.F)rr+r,r-rrrZ block_sizeÚ_saltr rr r.r/r0)r1rrZsaltrr2rrrr3Zs"    zConcatKDFHMAC.__init__cCst |j|j|j¡S)N)rZHMACr>r+r/)r1rrrÚ_hmacqszConcatKDFHMAC._hmaccCs$|jr t‚d|_t||j|j|jƒS)NT)r0rr)r,r?r-)r1r&rrrr5ts zConcatKDFHMAC.derivecCst | |¡|¡st‚dS)N)r r6r5r)r1r&r7rrrr8{szConcatKDFHMAC.verifyN)r9r:r;r3r?r5r8rrrrr<Xsr<)Z __future__rrrrZ cryptographyrZcryptography.exceptionsrrrr Z'cryptography.hazmat.backends.interfacesr r Zcryptography.hazmat.primitivesr r rZ"cryptography.hazmat.primitives.kdfrrrr)Zregister_interfaceÚobjectr*r<rrrrÚs     !