3 l_@sddlmZmZmZddlZddlmZddlmZm Z m Z m Z ddl m Z ddlmZddlmZddlmZmZmZdd lmZd d Zd d ZddZejeGdddeZejeGdddeZdS))absolute_importdivisionprint_functionN)utils)AlreadyFinalized InvalidKeyUnsupportedAlgorithm_Reasons) _get_backend) HMACBackend) HashBackend) constant_timehasheshmac)KeyDerivationFunctioncCs tjd|S)Nz>I)structpack)nr!/usr/lib64/python3.6/concatkdf.py _int_to_u32besrcCs8|jd}||kr tdj||dk r4tjd|dS)N z(Can not derive keys larger than {} bits. otherinfoll)Z digest_size ValueErrorformatr _check_bytes) algorithmlengthrZ max_lengthrrr_common_args_checkss   r cCstjd|dg}d}d}xZ||krt|}|jt||j||j||j|j|t|d7}|d7}qWdj|d|S)N key_materialrr)rZ_check_byteslikeupdaterappendfinalizelenjoin)r!rZauxfnroutputZoutlenZcounterhrrr_concatkdf_derive%s     r+c@s.eZdZd ddZddZddZdd ZdS) ConcatKDFHashNcCs\t|}t|||||_||_||_|jdkr6d|_t|tsLtdtj ||_ d|_ dS)Nr"z.Backend object does not implement HashBackend.F) r r _algorithm_length _otherinfo isinstancer rr BACKEND_MISSING_INTERFACE_backend_used)selfrrrbackendrrr__init__9s   zConcatKDFHash.__init__cCstj|j|jS)N)rZHashr-r2)r4rrr_hashKszConcatKDFHash._hashcCs$|jr td|_t||j|j|jS)NT)r3rr+r.r7r/)r4r!rrrderiveNs zConcatKDFHash.derivecCstj|j||stdS)N)r bytes_eqr8r)r4r! expected_keyrrrverifyVszConcatKDFHash.verify)N)__name__ __module__ __qualname__r6r7r8r;rrrrr,7s r,c@s.eZdZd ddZddZddZdd ZdS) ConcatKDFHMACNcCst|}t|||||_||_||_|jdkr6d|_|dkrJd|j}n tjd|||_t |t srt dt j ||_d|_dS)Nr"saltz.Backend object does not implement HMACBackend.F)r r r-r.r/Z block_sizerr_saltr0r rr r1r2r3)r4rrrArr5rrrr6]s"     zConcatKDFHMAC.__init__cCstj|j|j|jS)N)rZHMACrBr-r2)r4rrr_hmacvszConcatKDFHMAC._hmaccCs$|jr td|_t||j|j|jS)NT)r3rr+r.rCr/)r4r!rrrr8ys zConcatKDFHMAC.derivecCstj|j||stdS)N)r r9r8r)r4r!r:rrrr;szConcatKDFHMAC.verify)N)r<r=r>r6rCr8r;rrrrr?[s r?)Z __future__rrrrZ cryptographyrZcryptography.exceptionsrrrr Zcryptography.hazmat.backendsr Z'cryptography.hazmat.backends.interfacesr r Zcryptography.hazmat.primitivesr rrZ"cryptography.hazmat.primitives.kdfrrr r+Zregister_interfaceobjectr,r?rrrrs      #