
    kKj                        U d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ  G d de      Z G d de      Z edd       edd       edd       ed       ed       ed      gZee   ed<   y)z
joserfc._rfc7518
~~~~~~~~~~~~~~~~

Cryptographic Models for Cryptographic Models for Content
Encryption per `Section 5`_.

.. _`Section 5`: https://tools.ietf.org/html/rfc7518#section-5
    N)Cipher)AES)GCMCBC)PKCS7)
InvalidTag   )JWEEncModel)DecodeError   )
encode_intc                       e Zd ZdZdZdedefdZdededed	ed
ef
dZdedededed
e	eef   f
dZ
dededededed
efdZy)CBCHS2EncModel   Tkey_size	hash_typec                     d| d| | _         d| d| d| _        || _        |dz  | _        |dz  | _        t        t        d|       | _        y )	NAzCBC-HSAES__CBC_HMAC_SHA_z# authenticated encryption algorithm   r	   sha)namedescriptionr   key_lencek_sizegetattrhashlibhash_alg)selfr   r   s      j/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/joserfc/_rfc7518/jwe_encs.py__init__zCBCHS2EncModel.__init__   sb    z	{3	!(>)Dgh !1} 13yk):;    
ciphertextaadivkeyreturnc                     t        t        |      dz  d      }||z   |z   |z   }t        j                  ||| j                        j                         }|d | j                   S )Nr   @   )r   lenhmacnewr   digestr   )r    r$   r%   r&   r'   almsgds           r!   _hmaczCBCHS2EncModel._hmac)   sY    C1b)Bh#b(HHS#t}}-4464<<  r#   	plaintextcekc                    |d| j                    }|| j                   d }t        t        j                        j	                         }|j                  |      |j                         z   }t        t        |      t        |            }	|	j                         }
|
j                  |      |
j                         z   }| j                  ||||      }||fS )z&Key Encryption with AES_CBC_HMAC_SHA2.N)r   r   r   
block_sizepadderupdatefinalizer   r   	encryptorr2   )r    r3   r4   r&   r%   hkeyekeypadpadded_datacipherencr$   tags                r!   encryptzCBCHS2EncModel.encrypt/   s    >T\\"4<<>"CNN#**,jj+clln<D	3r7+ ZZ,s||~=
jjS"d33r#   rA   c                    |d| j                    }|| j                   d }| j                  ||||      }t        j                  ||      st	        d      t        t        |      t        |            }	|	j                         }
|
j                  |      |
j                         z   }t        t        j                        j                         }|j                  |      |j                         z   S )z*Key Decryption with AES AES_CBC_HMAC_SHA2.Nztag does not match)r   r2   r,   compare_digestr   r   r   r   	decryptorr8   r9   r   r6   unpadder)r    r$   rA   r4   r&   r%   r;   dkeyctagr?   r1   dataunpads                r!   decryptzCBCHS2EncModel.decrypt=   s    >T\\"4<<>"zz*c2t4""4-233D	3r7+xx
#ajjl2cnn%..0||D!ENN$444r#   N)__name__
__module____qualname__iv_sizerecommendedintr"   bytesr2   tuplerB   rK    r#   r!   r   r      s     GK
< 
< 
<! !E !u !5 !U ! U  E eTY[`T`Na 5% 5e 5% 5U 5QV 5[` 5r#   r   c                   f    e Zd ZdZdZdefdZdedededed	eeef   f
d
Z	dededededed	efdZ
y)GCMEncModel`   Tr   c                 L    d| d| _         d| d| _        || _        || _        y )Nr   r   zAES GCM using z-bit key)r   r   r   r   )r    r   s     r!   r"   zGCMEncModel.__init__S   s1    z%	+H:X>  r#   r3   r4   r&   r%   r(   c                     t        t        |      t        |            }|j                         }|j	                  |       |j                  |      |j                         z   }||j                  fS )zKey Encryption with AES GCM)r   r   r   r:   authenticate_additional_datar8   r9   rA   )r    r3   r4   r&   r%   r?   r@   r$   s           r!   rB   zGCMEncModel.encryptY   sZ    C#b'* ((-ZZ	*S\\^;
377""r#   r$   rA   c                    t        t        |      t        ||            }|j                         }|j	                  |       	 |j                  |      |j                         z   S # t        $ r}t        t        |            d}~ww xY w)zKey Decryption with AES GCMN)
r   r   r   rE   rZ   r8   r9   r   r   str)	r    r$   rA   r4   r&   r%   r?   r1   errors	            r!   rK   zGCMEncModel.decrypta   sr    C#b#,/	&&s+	*88J'!**,66 	*c%j))	*s   !A$ $	B-BBN)rL   rM   rN   rO   rP   rQ   r"   rR   rS   rB   rK   rT   r#   r!   rV   rV   M   s     GK! !# #U # #E #eTY[`T`Na #*% *e *% *U *QV *[` *r#   rV   r         i  i   JWE_ENC_MODELS)__doc__r,   r   &cryptography.hazmat.primitives.ciphersr   1cryptography.hazmat.primitives.ciphers.algorithmsr   ,cryptography.hazmat.primitives.ciphers.modesr   r   &cryptography.hazmat.primitives.paddingr   cryptography.exceptionsr   _rfc7516.modelsr
   errorsr   utilr   r   rV   r`   list__annotations__rT   r#   r!   <module>rl      s      9 A A 8 . )   35[ 35l*+ *@ 333%[! r#   