
    _f                        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dS )
    )annotationsN)InvalidSignatureUnsupportedAlgorithm_Reasons)constant_time)CBC)Backend)ciphersc                  :    e Zd Z	 dddZddZddZddZddZdS )_CMACContextNbackendr	   	algorithmciphers.BlockCipherAlgorithmreturnNonec                H   |                     |          st          dt          j                  || _        |j        | _        || _        |j        dz  | _	        |?| j        j
        }|t          |          t          f         } || j        |t                    }| j        j                                        }| j                            || j        j        j        k               | j        j                            || j        j        j                  }| j        j                            | j                  }| j        j                            ||t-          | j                  || j        j        j                  }| j                            |dk               || _        d S )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)	selfr   r   ctxregistryadapter
evp_cipherkey_ptrress	            [/var/www/html/env/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/cmac.py__init__z_CMACContext.__init__   sl    //	:: 	&5+  
  M	#'2a7;}5HtI34G 	3??J-$1133CM((0B0G)GHHH-$''T]-?-MNNCm(44TY??G-$..DI"' C M((222			    databytesc                    | j         j                            | j        |t	          |                    }| j                             |dk               d S )Nr   )r   r   CMAC_Updater)   r(   r!   )r*   r4   r0   s      r1   updatez_CMACContext.update?   sF    m ,,TYc$iiHH$$SAX.....r3   c                z   | j         j                            d| j                  }| j         j                            d| j                  }| j         j                            | j        ||          }| j                             |dk               d | _        | j         j                            |          d d          S )Nzunsigned char[]zsize_t *r   )	r   r"   newr   r   
CMAC_Finalr)   r!   buffer)r*   buflengthr0   s       r1   finalizez_CMACContext.finalizeC   s    m $$%68KLL#''
D4GHHm ++DIsFCC$$SAX...	}!((--aaa00r3   c                Z   | 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_ctxr0   s      r1   copyz_CMACContext.copyM   s    ]'4466
]'***8
 

 m ..z49EE$$SAX...DM4?
KKKKr3   	signaturec                v    |                                  }t          j        ||          st          d          d S )NzSignature did not match digest.)r?   r   bytes_eqr   )r*   rD   digests      r1   verifyz_CMACContext.verifyV   s@    %fi88 	F"#DEEE	F 	Fr3   )N)r   r	   r   r   r   r   )r4   r5   r   r   )r   r5   )r   r   )rD   r5   r   r   )__name__
__module____qualname__r2   r8   r?   rC   rH    r3   r1   r   r      s        
 	& & & & &P/ / / /1 1 1 1L L L LF F F F F Fr3   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   rL   r3   r1   <module>rT      s   
 # " " " " "          
 9 8 8 8 8 8 < < < < < <	 7DDDDDD666666CF CF CF CF CF CF CF CF CF CFr3   