3 ê…­hV ã@spddlmZmZmZddlmZddlmZmZm Z ddl m Z m Z ddl mZeje jƒGdd„deƒƒZdS) é)Úabsolute_importÚdivisionÚprint_function)Úutils)ÚInvalidSignatureÚUnsupportedAlgorithmÚ_Reasons)Ú constant_timeÚmac)ÚCBCc@s@eZdZd dd„ZejdƒZdd„Zdd„Zd d „Z d d „Z dS)Ú _CMACContextNc Csè|j|ƒstdtjƒ‚||_|j|_||_|jd|_ |dkrÞ|jj }|t |ƒt f}||j|t ƒ}|jj jƒ}|jj||jjjkƒ|jjj||jj jƒ}|jjj|jƒ}|jj j||t|jƒ||jjjƒ}|jj|dkƒ||_dS)Nz#This backend does not support CMAC.éé)Zcmac_algorithm_supportedrrZUNSUPPORTED_CIPHERÚ_backendÚkeyZ_keyÚ _algorithmZ block_sizeÚ_output_lengthZ_cipher_registryÚtyper Ú_libÚ CMAC_CTX_newÚopenssl_assertÚ_ffiZNULLÚgcÚ CMAC_CTX_freeZ from_bufferZ CMAC_InitÚlenÚ_ctx) ÚselfZbackendÚ algorithmÚctxÚregistryZadapterZ evp_cipherZkey_ptrÚres©r!ú/usr/lib64/python3.6/cmac.pyÚ__init__s0    z_CMACContext.__init__rcCs,|jjj|j|t|ƒƒ}|jj|dkƒdS)Nr)rrZ CMAC_Updaterrr)rÚdatar r!r!r"Úupdate9sz_CMACContext.updatecCsd|jjjd|jƒ}|jjjd|jƒ}|jjj|j||ƒ}|jj|dkƒd|_|jjj|ƒdd…S)Nzunsigned char[]zsize_t *r) rrÚnewrrZ CMAC_FinalrrÚbuffer)rZbufZlengthr r!r!r"Úfinalize=s z_CMACContext.finalizecCsV|jjjƒ}|jjj||jjjƒ}|jjj||jƒ}|jj|dkƒt |j|j |d�S)Nr)r) rrrrrrZ CMAC_CTX_copyrrr r)rZ copied_ctxr r!r!r"ÚcopyGs  z_CMACContext.copycCs |jƒ}tj||ƒstdƒ‚dS)NzSignature did not match digest.)r(r Zbytes_eqr)rZ signatureZdigestr!r!r"ÚverifyPs z_CMACContext.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 Z,cryptography.hazmat.primitives.ciphers.modesr Zregister_interfaceZ MACContextÚobjectr r!r!r!r"Ús