3
ꅭhV @ sp d dl mZmZmZ d dlmZ d dlmZmZm Z d dl
mZmZ d dl
mZ ejejG dd deZdS ) )absolute_importdivisionprint_function)utils)InvalidSignatureUnsupportedAlgorithm_Reasons)
constant_timemac)CBCc @ s@ e Zd Zd
ddZejdZdd Zdd Zd d
Z dd Z
dS )_CMACContextNc C s |j |stdtj|| _|j| _|| _|jd | _ |d kr| jj
}|t|tf }|| j|t}| jj
j }| jj|| jjjk | jjj|| jj
j}| jjj| j}| jj
j||t| j|| jjj}| jj|dk || _d S )Nz#This backend does not support CMAC. )Zcmac_algorithm_supportedr r ZUNSUPPORTED_CIPHER_backendkeyZ_key
_algorithmZ
block_size_output_lengthZ_cipher_registrytyper _libCMAC_CTX_newopenssl_assert_ffiZNULLgc
CMAC_CTX_freeZfrom_bufferZ CMAC_Initlen_ctx) selfZbackend algorithmctxregistryZadapterZ
evp_cipherZkey_ptrres r! /usr/lib64/python3.6/cmac.py__init__ s0
z_CMACContext.__init__r c C s, | j jj| j|t|}| j j|dk d S )Nr )r r ZCMAC_Updater r r )r datar r! r! r" update9 s z_CMACContext.updatec C sd | j jjd| j}| j jjd| j}| j jj| j||}| j j|dk d | _| j jj|d d S )Nzunsigned char[]zsize_t *r ) r r newr r Z
CMAC_Finalr r buffer)r ZbufZlengthr r! r! r" finalize= s z_CMACContext.finalizec C sV | j jj }| j jj|| j jj}| j jj|| j}| j j|dk t | j | j
|dS )Nr )r )r r r r r r Z
CMAC_CTX_copyr r r r )r Z
copied_ctxr r! r! r" copyG s z_CMACContext.copyc C s | j }tj||stdd S )NzSignature did not match digest.)r( r Zbytes_eqr )r Z signatureZdigestr! r! r" verifyP s z_CMACContext.verify)N)__name__
__module____qualname__r# r Zread_only_propertyr r% r( r) r* r! r! r! r" r s
#
r N)Z
__future__r r r Zcryptographyr Zcryptography.exceptionsr r r Zcryptography.hazmat.primitivesr r
Z,cryptography.hazmat.primitives.ciphers.modesr Zregister_interfaceZ
MACContextobjectr r! r! r! r"