й¼]+ã@sždZdZeeƒZeeƒZedZiZd d „Zd d„Zddd„Z ddd„Z y.ddl Z e Z eZ eje jƒZWnek r¸e Z eZ YnXyddl mZWn_ek r.edd„edƒDƒƒZedd„edƒDƒƒZddd „ZYnXxVeD]NZye eƒeƒe>> import hashlib >>> m = hashlib.md5() >>> m.update(b"Nobody inspects") >>> m.update(b" the spammish repetition") >>> m.digest() b'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9' More condensed: >>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest() 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2' Úmd5Úsha1Úsha224Úsha256Úsha384Úsha512ÚnewÚalgorithms_guaranteedÚalgorithms_availableÚ pbkdf2_hmacc CsXt}|j|ƒ}|dk r%|Syë|dkrXddl}|j|d<|d‘sr,éccs|]}|dAVqdS)é6Nr)r*r+rrrr,’scCst|tƒst|ƒ‚t|ttfƒsBtt|ƒƒ}t|ttfƒsitt|ƒƒ}t|ƒ}t|ƒ}t|ddƒ}t|ƒ|krºt||ƒj ƒ}|d|t|ƒ}|j |j t ƒƒ|j |j t ƒƒ||dd„}|dkr(t|ƒ‚|dkr=|j}|dkrUt|ƒ‚d} d} tj} x¡t| ƒ|kr ||| jdd ƒƒ} tj| d ƒ} x7t|dƒD]%}|| ƒ} | | | d ƒN} q¾W| d7} | | j|jd ƒ7} qmW| d|…S) NÚ block_sizeé@scSsB|jƒ}|jƒ}|j|ƒ|j|jƒƒ|jƒS)N)ÚcopyÚupdateÚdigest)ÚmsgÚinnerÚouterZicpyZocpyrrrÚprf­s    zpbkdf2_hmac..prfér%éÚbig)Ú isinstanceÚstrÚ TypeErrorÚbytesÚ bytearrayÚ memoryviewrr Úlenr3r2Ú translateÚ _trans_36Ú _trans_5CrÚ digest_sizeÚintÚ from_bytesÚto_bytesÚrange)Z hash_nameZpasswordZsaltZ iterationsZdklenr5r6Ú blocksizer7ZdkeyZlooprGÚprevZrkeyÚirrrr ”sB            zcode for hash %s was not found.)rrrrrr)rrr r )Ú__doc__Z__always_supportedÚsetrr Ú__all__rrr$r'r(r!rZ __get_hashÚunionÚopenssl_md_meth_namesrr r>rIrDrCZ __func_nameÚglobalsrÚloggingÚ exceptionrrrrÚ5sB        :