Ë
    ýQµiÛ  ã                  óˆ   — d dl mZ d dlZd dlmZmZmZ d dlmZ d dl	m
Z
 ej                  rd dlmZ d dlmZ  G d„ d	«      Zy)
é    )ÚannotationsN)ÚInvalidSignatureÚUnsupportedAlgorithmÚ_Reasons)Úconstant_time)ÚCBC)ÚBackend)Úciphersc                  óB   — e Zd Z	 d	 	 	 	 	 dd„Zd	d„Zd
d„Zdd„Zdd„Zy)Ú_CMACContextNc                óî  — |j                  |«      st        dt        j                  «      ‚|| _        |j
                  | _        || _        |j                  dz  | _	        |�€�| j                  j                  }|t        |«      t        f   } || j                  |t        «      }| j                  j                  j                  «       }| j                  j                  || j                  j                   j"                  k7  «       | j                  j                   j%                  || j                  j                  j&                  «      }| j                  j                   j)                  | j                  «      }| j                  j                  j+                  ||t-        | j                  «      || j                  j                   j"                  «      }| j                  j                  |dk(  «       || _        y )Nz#This backend does not support CMAC.é   é   )Úcmac_algorithm_supportedr   r   ÚUNSUPPORTED_CIPHERÚ_backendÚkeyÚ_keyÚ
_algorithmÚ
block_sizeÚ_output_lengthÚ_cipher_registryÚtyper   Ú_libÚCMAC_CTX_newÚopenssl_assertÚ_ffiÚNULLÚgcÚCMAC_CTX_freeÚfrom_bufferÚ	CMAC_InitÚlenÚ_ctx)	ÚselfÚbackendÚ	algorithmÚctxÚregistryÚadapterÚ
evp_cipherÚkey_ptrÚress	            úK/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/cmac.pyÚ__init__z_CMACContext.__init__   s{  € ð ×/Ñ/°	Ô:Ü&Ø5Ü×+Ñ+óð ð
  ˆŒØ—M‘MˆŒ	Ø#ˆŒØ'×2Ñ2°aÑ7ˆÔà‰;Ø—}‘}×5Ñ5ˆHØœt I›´Ð3Ñ4ˆGá  §¡°	¼3Ó?ˆJà—-‘-×$Ñ$×1Ñ1Ó3ˆCà�M‰M×(Ñ(¨°·±×0BÑ0B×0GÑ0GÑ)GÔHØ—-‘-×$Ñ$×'Ñ'¨¨T¯]©]×-?Ñ-?×-MÑ-MÓNˆCà—m‘m×(Ñ(×4Ñ4°T·Y±YÓ?ˆGØ—-‘-×$Ñ$×.Ñ.ØØÜ�D—I‘I“ØØ—‘×"Ñ"×'Ñ'óˆCð �M‰M×(Ñ(¨°©Ô2àˆ�	ó    c                ó´   — | j                   j                  j                  | j                  |t	        |«      «      }| j                   j                  |dk(  «       y )Nr   )r   r   ÚCMAC_Updater$   r#   r   )r%   Údatar-   s      r.   Úupdatez_CMACContext.update?   s>   € Ø�m‰m× Ñ ×,Ñ,¨T¯Y©Y¸¼cÀ$»iÓHˆØ�‰×$Ñ$ S¨A¡XÕ.r0   c                ó¾  — | j                   j                  j                  d| j                  «      }| j                   j                  j                  d| j                  «      }| j                   j                  j                  | j                  ||«      }| j                   j                  |dk(  «       d | _        | j                   j                  j                  |«      d d  S )Nzunsigned char[]zsize_t *r   )	r   r   Únewr   r   Ú
CMAC_Finalr$   r   Úbuffer)r%   ÚbufÚlengthr-   s       r.   Úfinalizez_CMACContext.finalizeC   s¦   € Ø�m‰m× Ñ ×$Ñ$Ð%6¸×8KÑ8KÓLˆØ—‘×#Ñ#×'Ñ'¨
°D×4GÑ4GÓHˆØ�m‰m× Ñ ×+Ñ+¨D¯I©I°s¸FÓCˆØ�‰×$Ñ$ S¨A¡XÔ.àˆŒ	à�}‰}×!Ñ!×(Ñ(¨Ó-©aÐ0Ð0r0   c                ó²  — | j                   j                  j                  «       }| j                   j                  j	                  || j                   j                  j
                  «      }| j                   j                  j                  || j                  «      }| j                   j                  |dk(  «       t        | j                   | j                  |¬«      S )Nr   )r(   )r   r   r   r   r   r    ÚCMAC_CTX_copyr$   r   r   r   )r%   Ú
copied_ctxr-   s      r.   Úcopyz_CMACContext.copyM   s˜   € Ø—]‘]×'Ñ'×4Ñ4Ó6ˆ
Ø—]‘]×'Ñ'×*Ñ*Ø˜Ÿ™×*Ñ*×8Ñ8ó
ˆ
ð �m‰m× Ñ ×.Ñ.¨z¸4¿9¹9ÓEˆØ�‰×$Ñ$ S¨A¡XÔ.Ü˜DŸM™M¨4¯?©?À
ÔKÐKr0   c                óf   — | j                  «       }t        j                  ||«      st        d«      ‚y )NzSignature did not match digest.)r;   r   Úbytes_eqr   )r%   Ú	signatureÚdigests      r.   Úverifyz_CMACContext.verifyV   s.   € Ø—‘“ˆÜ×%Ñ% f¨iÔ8Ü"Ð#DÓEÐEð 9r0   )N)r&   r	   r'   zciphers.BlockCipherAlgorithmÚreturnÚNone)r3   ÚbytesrE   rF   )rE   rG   )rE   r   )rB   rG   rE   rF   )Ú__name__Ú
__module__Ú__qualname__r/   r4   r;   r?   rD   © r0   r.   r   r      s?   „ ð
 ð	&àð&ð 0ð&ð
 
ó&óP/ó1óLôFr0   r   )Ú
__future__r   ÚtypingÚcryptography.exceptionsr   r   r   Úcryptography.hazmat.primitivesr   Ú,cryptography.hazmat.primitives.ciphers.modesr   ÚTYPE_CHECKINGÚ,cryptography.hazmat.backends.openssl.backendr	   r
   r   rK   r0   r.   ú<module>rS      s<   ðõ
 #ã ÷ñ õ
 9Ý <à	×ÒÝDÝ6÷CFò CFr0   