B \Úæ`Ž ã@stddlmZmZmZddlmZddlmZmZm Z ddl m Z m Z m Z e e j¡e e j¡Gdd„deƒƒƒZdS)é)Úabsolute_importÚdivisionÚprint_function)Úutils)ÚInvalidSignatureÚUnsupportedAlgorithmÚ_Reasons)Ú constant_timeÚhashesÚmacc@s@eZdZd dd„Ze d¡Zdd„Zdd„Zd d „Z d d „Z dS)Ú _HMACContextNcCsÆ||_||_|dkr¶|jj ¡}|j ||jjjk¡|jj ||jjj¡}|j  |¡}|jj  |¡}||jjjkr†t d  |¡t jƒ‚|jj ||t|ƒ||jjj¡}|j |dk¡||_||_dS)Nz+{0} is not a supported hash on this backendr)Ú _algorithmÚ_backendÚ_libÚCryptography_HMAC_CTX_newÚopenssl_assertÚ_ffiÚNULLÚgcÚCryptography_HMAC_CTX_freeZ_build_openssl_digest_nameZEVP_get_digestbynamerÚformatrZUNSUPPORTED_HASHZ HMAC_Init_exÚlenÚ_ctxÚ_key)ÚselfZbackendÚkeyÚ algorithmÚctxÚnameZevp_mdÚres©r ú\/opt/alt/python37/lib64/python3.7/site-packages/cryptography/hazmat/backends/openssl/hmac.pyÚ__init__s$  z_HMACContext.__init__r cCsp|jj ¡}|j ||jjjk¡|jj ||jjj¡}|jj ||j ¡}|j |dk¡t |j|j |j |dS)Nr)r) rrrrrrrrZ HMAC_CTX_copyrr rr)rZ copied_ctxrr r r!Úcopy-s z_HMACContext.copycCs,|jj |j|t|ƒ¡}|j |dk¡dS)Nr)rrZ HMAC_Updaterrr)rÚdatarr r r!Úupdate9sz_HMACContext.updatecCsz|jj d|jjj¡}|jj d¡}|jj |j||¡}|j |dk¡|j |d|jj k¡|jj  |¡d|d…S)Nzunsigned char[]zunsigned int *r) rrÚnewrZEVP_MAX_MD_SIZEZ HMAC_FinalrrrZ digest_sizeÚbuffer)rZbufZoutlenrr r r!Úfinalize=s  z_HMACContext.finalizecCs | ¡}t ||¡stdƒ‚dS)NzSignature did not match digest.)r(r Zbytes_eqr)rZ signatureZdigestr r r!ÚverifyFs z_HMACContext.verify)N) Ú__name__Ú __module__Ú __qualname__r"rZread_only_propertyrr#r%r(r)r r r r!r s     r N)Z __future__rrrZ cryptographyrZcryptography.exceptionsrrrZcryptography.hazmat.primitivesr r r Zregister_interfaceZ MACContextZ HashContextÚobjectr r r r r!Ús