3 lá˜_ìã@sÆddlmZmZmZddlmZddlmZddlm Z ddl m Z m Z m Z mZddlmZddlmZddlmZmZmZdd lmZGd d „d eƒZGd d „d eƒZe jeƒGdd„deƒƒZdS)é)Úabsolute_importÚdivisionÚprint_function)ÚEnum)Úrange)Úutils)ÚAlreadyFinalizedÚ InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú _get_backend)Ú HMACBackend)Ú constant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc@seZdZdZdS)ÚModeZctrN)Ú__name__Ú __module__Ú __qualname__Z CounterMode©rrú/usr/lib64/python3.6/kbkdf.pyrsrc@seZdZdZdZdS)ÚCounterLocationZ before_fixedZ after_fixedN)rrrÚ BeforeFixedÚ AfterFixedrrrrrsrc@s6eZdZd dd„Zdd„Zdd„Zdd „Zd d „ZdS) Ú KBKDFHMACNc CsJt| ƒ} t| tƒstdtjƒ‚t|tjƒs6tdtjƒ‚| j |ƒsLtdtjƒ‚t|t ƒs^t dƒ‚t|t ƒspt dƒ‚|sx|r„| r„t dƒ‚|dks˜|j|ƒ r t dƒ‚|dkr¸| dkr¸t dƒ‚|dk rÔt|tƒ rÔt d ƒ‚|dkràd }|dkrìd }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 integeróÚlabelÚcontextF)r Ú isinstancer r r ZBACKEND_MISSING_INTERFACErZ HashAlgorithmZUNSUPPORTED_HASHZhmac_supportedrÚ TypeErrorrÚ ValueErrorÚ_valid_byte_lengthÚintrÚ _check_bytesÚ _algorithmÚ_modeÚ_lengthÚ_rlenÚ_llenÚ _locationÚ_labelÚ_contextÚ_backendÚ_usedÚ _fixed_data) ÚselfÚ algorithmÚmodeZlengthZrlenZllenÚlocationrrZfixedÚbackendrrrÚ__init__#sV         zKBKDFHMAC.__init__cCsBt|tƒstdƒ‚tjd|ƒ}dt|ƒko4dkns>dSdS)Nzvalue must be of type intééFT)rr#r rÚ int_to_bytesÚlen)r0ÚvalueZ value_binrrrr"ks   zKBKDFHMAC._valid_byte_lengthcCsú|jr t‚tjd|ƒd|_|j |jj }dg}tjd|jƒ}|t dt |ƒdƒdkrdt dƒ‚x€t d|dƒD]n}t j||j|jd�}tj||jƒ}|jtjkr°|j|ƒ|j|jƒƒ|jtjkrÔ|j|ƒ|j|jƒƒqtWdj|ƒd|j…S) NÚ key_materialTrr6éézThere are too many iterations.)r4)r.rrZ_check_bytesliker'r%Z digest_sizer8r(Úpowr9r!rrZHMACr-r*rrÚupdateÚ_generate_fixed_inputrÚappendÚfinalizeÚjoin)r0r;ÚroundsÚoutputZr_binÚiÚhZcounterrrrÚderivets&     zKBKDFHMAC.derivecCsB|jrt|jtƒr|jStj|jd|jƒ}dj|jd|j |gƒS)Nr=ró) r/rÚbytesrr8r'r)rCr+r,)r0Zl_valrrrr@˜szKBKDFHMAC._generate_fixed_inputcCstj|j|ƒ|ƒst‚dS)N)rZbytes_eqrHr )r0r;Z expected_keyrrrÚverify szKBKDFHMAC.verify)N)rrrr5r"rHr@rKrrrrr!s  = $rN)Z __future__rrrÚenumrZ six.movesrZ cryptographyrZcryptography.exceptionsrr r r Zcryptography.hazmat.backendsr Z'cryptography.hazmat.backends.interfacesr Zcryptography.hazmat.primitivesrrrZ"cryptography.hazmat.primitives.kdfrrrZregister_interfaceÚobjectrrrrrÚs