3
ê…hV ã @ sp d dl mZmZmZ d dlmZ d dlmZmZm Z d dl
mZmZ d dl
mZ ejejƒG dd„ deƒƒZdS ) é )Úabsolute_importÚdivisionÚprint_function)Úutils)ÚInvalidSignatureÚUnsupportedAlgorithmÚ_Reasons)Ú
constant_timeÚmac)ÚCBCc @ s@ e Zd Zd
dd„ZejdƒZdd„ 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Ú_backendÚkeyZ_keyÚ
_algorithmZ
block_sizeÚ_output_lengthZ_cipher_registryÚtyper Ú_libÚCMAC_CTX_newÚopenssl_assertÚ_ffiZNULLÚgcÚ
CMAC_CTX_freeZfrom_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__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
|d�S )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||ƒstdƒ‚d 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
MACContextÚobjectr r! r! r! r" Ú