
     h                     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 )	    N)InvalidSignatureUnsupportedAlgorithm_Reasons)constant_time)CBC)Backend)ciphersc                   X    e Zd Z	 d	 	 	 	 	 ddZdeddfd	Zdefd
ZddZdeddfdZdS )_CMACContextNbackendr   	algorithmciphers.BlockCipherAlgorithmreturnc                 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	            e/var/www/html/Sam_Eipo/venv/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			    datac                     | j         j                            | j        |t	          |                    }| j                             |dk               d S )Nr   )r   r   CMAC_Updater'   r&   r   )r(   r2   r.   s      r/   updatez_CMACContext.update=   sF    m ,,TYc$iiHH$$SAX.....r1   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lengthr.   s       r/   finalizez_CMACContext.finalizeA   s    m $$%68KLL#''
D4GHHm ++DIsFCC$$SAX...	}!((--aaa00r1   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_ctxr.   s      r/   copyz_CMACContext.copyK   s    ]'4466
]'***8
 

 m ..z49EE$$SAX...DM4?
KKKKr1   	signaturec                 v    |                                  }t          j        ||          st          d          d S )NzSignature did not match digest.)r<   r   bytes_eqr   )r(   rA   digests      r/   verifyz_CMACContext.verifyT   s@    %fi88 	F"#DEEE	F 	Fr1   )N)r   r   r   r   r   N)r   r   )	__name__
__module____qualname__r0   bytesr5   r<   r@   rE    r1   r/   r   r      s        
 	&& 2&
 
& & & &P/5 /T / / / /1% 1 1 1 1L L L LF F$ F F F F F Fr1   r   )typingcryptography.exceptionsr   r   r   cryptography.hazmat.primitivesr   ,cryptography.hazmat.primitives.ciphers.modesr   TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendr   r	   r   rJ   r1   r/   <module>rQ      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r1   