3 L])@sddlmZmZmZddlmZddlmZddlm Z ddl m Z m Z m Z mZddlmZddlmZmZmZddlmZGd d d eZGd d d eZe jeGd ddeZdS))absolute_importdivisionprint_function)Enum)range)utils)AlreadyFinalized InvalidKeyUnsupportedAlgorithm_Reasons) HMACBackend) constant_timehasheshmac)KeyDerivationFunctionc@seZdZdZdS)ModeZctrN)__name__ __module__ __qualname__Z CounterModerrR/tmp/pip-install-wfra5znf/cryptography/cryptography/hazmat/primitives/kdf/kbkdf.pyrsrc@seZdZdZdZdS)CounterLocationZ before_fixedZ after_fixedN)rrr BeforeFixed AfterFixedrrrrrsrc@s4eZdZddZddZddZddZd d Zd S) KBKDFHMACc CsBt| tstdtjt|tjs.tdtj| j|sDtdtjt|t sVt dt|t sht d|sp|r|| r|t 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) 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 algorithmmodelengthZrlenZllenlocationrrZfixedbackendrrr__init__sR        zKBKDFHMAC.__init__cCsBt|tstdtjd|}dt|ko4dkns>dSdS)Nzvalue must be of type intFT)rr"rr int_to_byteslen)r/valueZ value_binrrrr!Zs   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$ digest_sizer8r'powr9r rrHMACr,r)rrupdate_generate_fixed_inputrappendfinalizejoin)r/r;roundsoutputZr_binihcounterrrrderivecs&     zKBKDFHMAC.derivecCsB|jrt|jtr|jStj|jd|j}dj|jd|j |gS)Nr=r) r.rbytesrr8r&r(rEr*r+)r/Zl_valrrrrBszKBKDFHMAC._generate_fixed_inputcCstj|j||stdS)N)r Zbytes_eqrKr )r/r;Z expected_keyrrrverifyszKBKDFHMAC.verifyN)rrrr5r!rKrBrNrrrrrs ; $rN) __future__rrrenumrZ six.movesrZ cryptographyrZcryptography.exceptionsrr r r Z'cryptography.hazmat.backends.interfacesr Zcryptography.hazmat.primitivesr rrZ"cryptography.hazmat.primitives.kdfrrrZregister_interfaceobjectrrrrrs