3 L]' @s`ddlmZmZmZddlmZddlmZmZm Z ddl m Z ddl m Z GdddeZdS) )absolute_importdivisionprint_function)utils)InvalidSignatureUnsupportedAlgorithm_Reasons) constant_time)CBCc@s@eZdZd ddZejdZddZddZd 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_backendkey_key _algorithm block_size_output_lengthZ_cipher_registrytyper _lib CMAC_CTX_newopenssl_assert_ffiZNULLgc CMAC_CTX_free from_bufferZ CMAC_Initlen_ctx) selfbackend algorithmctxregistryadapterZ evp_cipherZkey_ptrresr%S/tmp/pip-install-wfra5znf/cryptography/cryptography/hazmat/backends/openssl/cmac.py__init__s(    z_CMACContext.__init__rcCs,|jjj|j|t|}|jj|dkdS)Nr )rrZ CMAC_Updaterrr)rdatar$r%r%r&update1sz_CMACContext.updatecCsd|jjjd|j}|jjjd|j}|jjj|j||}|jj|dkd|_|jjj|ddS)Nzunsigned char[]zsize_t *r ) rrnewrrZ CMAC_Finalrrbuffer)rbuflengthr$r%r%r&finalize5s z_CMACContext.finalizecCsV|jjj}|jjj||jjj}|jjj||j}|jj|dkt |j|j |dS)Nr )r!) rrrrrrZ CMAC_CTX_copyrrr r)rZ copied_ctxr$r%r%r&copyAs  z_CMACContext.copycCs |j}tj||stddS)NzSignature did not match digest.)r.r Zbytes_eqr)r signaturedigestr%r%r&verifyNs z_CMACContext.verify)N) __name__ __module__ __qualname__r'rZread_only_propertyr r)r.r/r2r%r%r%r&r s     r N) __future__rrrZ cryptographyrZcryptography.exceptionsrrrZcryptography.hazmat.primitivesr Z,cryptography.hazmat.primitives.ciphers.modesr objectr r%r%r%r&s