3 l_@sddlmZmZmZddlmZddlmZddlm Z ddl m Z m Z m Z mZddlmZddlmZddlmZmZmZdd lmZGd d d eZGd d d eZe jeGdddeZdS))absolute_importdivisionprint_function)Enum)range)utils)AlreadyFinalized InvalidKeyUnsupportedAlgorithm_Reasons) _get_backend) HMACBackend) constant_timehasheshmac)KeyDerivationFunctionc@seZdZdZdS)ModeZctrN)__name__ __module__ __qualname__Z CounterModerr/usr/lib64/python3.6/kbkdf.pyrsrc@seZdZdZdZdS)CounterLocationZ before_fixedZ after_fixedN)rrr BeforeFixed AfterFixedrrrrrsrc@s6eZdZd ddZddZddZdd Zd d ZdS) KBKDFHMACNc CsJt| } t| tstdtjt|tjs6tdtj| j |sLtdtjt|t s^t dt|t spt d|sx|r| rt d|dks|j| rt d|dkr| dkrt d|dk rt|t rt d |dkrd }|dkrd }tjd |tjd |||_||_||_||_||_||_||_||_| |_d |_| |_dS)Nz.Backend object does not implement HMACBackend.z5Algorithm supplied is not a supported hash algorithm.z5Algorithm supplied is not a supported hmac algorithm.zmode must be of type Modez(location must be of type CounterLocationz9When supplying fixed data, label and context are ignored.zrlen must be between 1 and 4zPlease specify an llenzllen must be an integerlabelcontextF)r isinstancer r r ZBACKEND_MISSING_INTERFACErZ HashAlgorithmZUNSUPPORTED_HASHZhmac_supportedr TypeErrorr ValueError_valid_byte_lengthintr _check_bytes _algorithm_mode_length_rlen_llen _location_label_context_backend_used _fixed_data) self algorithmmodeZlengthZrlenZllenlocationrrZfixedbackendrrr__init__#sV         zKBKDFHMAC.__init__cCsBt|tstdtjd|}dt|ko4dkns>dSdS)Nzvalue must be of type intFT)rr#r r int_to_byteslen)r0valueZ value_binrrrr"ks   zKBKDFHMAC._valid_byte_lengthcCs|jr ttjd|d|_|j |jj }dg}tjd|j}|t dt |ddkrdt dxt d|dD]n}t j||j|jd}tj||j}|jtjkr|j||j|j|jtjkr|j||j|jqtWdj|d|jS) N key_materialTrr6zThere are too many iterations.)r4)r.rrZ_check_bytesliker'r%Z digest_sizer8r(powr9r!rrZHMACr-r*rrupdate_generate_fixed_inputrappendfinalizejoin)r0r;roundsoutputZr_binihZcounterrrrderivets&     zKBKDFHMAC.derivecCsB|jrt|jtr|jStj|jd|j}dj|jd|j |gS)Nr=r) r/rbytesrr8r'r)rCr+r,)r0Zl_valrrrr@szKBKDFHMAC._generate_fixed_inputcCstj|j||stdS)N)rZbytes_eqrHr )r0r;Z expected_keyrrrverifyszKBKDFHMAC.verify)N)rrrr5r"rHr@rKrrrrr!s  = $rN)Z __future__rrrenumrZ six.movesrZ cryptographyrZcryptography.exceptionsrr r r Zcryptography.hazmat.backendsr Z'cryptography.hazmat.backends.interfacesr Zcryptography.hazmat.primitivesrrrZ"cryptography.hazmat.primitives.kdfrrrZregister_interfaceobjectrrrrrs