
    +h                        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	            \/var/www/html/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/cmac.py__init__z_CMACContext.__init__   s{    //	:&5++ 
  MM	#'22a7;}}55HtI34G 	3?J--$$113CMM((0B0B0G0G)GH--$$''T]]-?-?-M-MNCmm((44TYY?G--$$..DII""''C MM((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>    mm  ,,TYYc$iH$$SAX.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    mm  $$%68K8KL##''
D4G4GHmm  ++DIIsFC$$SAX.	}}!!((-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

 mm  ..z499E$$SAX.DMM4??
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.    %%fi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   