
    kKjV                        d dl Z d dlZd dlmZ ddlmZmZmZ ddl	m
Z
mZmZ ddlmZmZmZmZmZmZ g dZej*                  eeef   Z ej.                  d	eeef   eeef   eeef   d
      Z G d d      Z e       Zy)    N)
Collection   )JWEAlgModelJWEEncModelJWEZipModel   )UnsupportedAlgorithmErrorSecurityWarningExceededSizeError)HeaderHeaderRegistryDictJWE_HEADER_REGISTRYcheck_supported_headercheck_registry_headercheck_crit_header)JWEAlgorithmJWERegistrydefault_registryAlgorithmsDictalgenczipc            	          e Zd ZU dZi i i dZeed<   g Zej                  e
e      ed<   dZeed<   dZeed<   dZeed	<   d
Zeed<   dZeed<   	 	 	 	 d'dedz  dee   dz  dedefdZededdfd       Zd(dededdfdZdeddfdZdeddfdZdeddfdZdeddfdZdeddfd Z d!ede!fd"Z"d!ede#fd#Z$d!ede%fd$Z&d!ed%e'eejP                  f   ddfd&Z)y))r   a  A registry for JSON Web Encryption to keep all the supported algorithms.
    An instance of ``JWERegistry`` is usually used together with methods in
    ``joserfc.jwe``.

    :param header_registry: extra header parameters registry
    :param algorithms: allowed algorithms to be used
    :param verify_all_recipients: validating all recipients in a JSON serialization
    :param strict_check_header: only allow header key in the registry to be used
    r   
algorithmsrecommendedi   max_protected_header_lengthmax_encrypted_key_length@    max_initialization_vector_lengthi   max_ciphertext_lengthmax_auth_tag_lengthNheader_registryverify_all_recipientsstrict_check_headerc                     i | _         | j                   j                  t               || j                   j                  |       || _        || _        || _        y N)r#   updater   allowedr$   r%   )selfr#   r   r$   r%   s        j/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/joserfc/_rfc7516/registry.py__init__zJWERegistry.__init__B   sR     46##$78&  ''8!%:"#6     modelreturnc                     || j                   |j                     |j                  <   |j                  r&| j                  j	                  |j                         y y r'   )r   algorithm_locationnamer   append)clsr.   s     r+   registerzJWERegistry.registerQ   sC    ?Du//0<OO""5::. r-   header
check_morec                    t        | j                  |       t        | j                  |       | j                  |d         }|j                  rft        |j                  ||       | j
                  rB| j                  j                         }|j                  |j                         t        ||       yy| j
                  rt        | j                  |       yy)z=Check and validate the fields in header part of a JWS object.r   N)	r   r#   r   get_algmore_header_registryr%   copyr(   r   )r*   r6   r7   r   allowed_registrys        r+   check_headerzJWERegistry.check_headerW   s    $..7d22F;ll6%=)##!#":":FJO''#'#7#7#<#<#>  ''(@(@A&'7@ ( %%"4#7#7@ &r-   c                 l    |r2t        |      | j                  kD  rt        d| j                   d      y y )NzHeader size exceeds  bytes.)lenr   r   )r*   r6   s     r+   validate_protected_header_sizez*JWERegistry.validate_protected_header_sizeg   s;    c&kD$D$DD#&:4;[;[:\\c$dee E6r-   ekc                 l    |r2t        |      | j                  kD  rt        d| j                   d      y y )NzEncrypted key size exceeds r?   )r@   r   r   )r*   rB   s     r+   validate_encrypted_key_sizez'JWERegistry.validate_encrypted_key_sizek   s:    #b'D999#&A$B_B_A``g$hii :2r-   ivc                 l    |r2t        |      | j                  kD  rt        d| j                   d      y y )Nz#Initialization vector size exceeds r?   )r@   r    r   )r*   rE   s     r+   #validate_initialization_vector_sizez/JWERegistry.validate_initialization_vector_sizeo   s?    #b'DAAA#5d6[6[5\\cd  B2r-   
ciphertextc                 l    |r2t        |      | j                  kD  rt        d| j                   d      y y )NzCiphertext size exceeds r?   )r@   r!   r   )r*   rH   s     r+   validate_ciphertext_sizez$JWERegistry.validate_ciphertext_sizeu   s;    #j/D,F,FF#&>t?Y?Y>ZZa$bcc G:r-   tagc                 l    |r2t        |      | j                  kD  rt        d| j                   d      y y )NzAuth tag size exceeds r?   )r@   r"   r   )r*   rK   s     r+   validate_auth_tag_sizez"JWERegistry.validate_auth_tag_sizey   s:    3s8d666#&<T=U=U<VV]$^__ 73r-   r2   c                     | j                   d   }| j                  ||       ||   }|j                  r$t        j                  |j                  t
               |S )zGet the allowed ("alg") algorithm instance of the given name.

        :param name: value of the ``alg``, e.g. ``ECDH-ES``, ``A128KW``
        r   )r   _check_algorithmsecurity_warningwarningswarnr
   )r*   r2   registryr   s       r+   r9   zJWERegistry.get_alg}   sM    
 ??5)dH-#D>MM#..@
r-   c                 N    | j                   d   }| j                  ||       ||   S )zGet the allowed ("enc") algorithm instance of the given name.

        :param name: value of the ``enc``, e.g. ``A128CBC-HS256``, ``A128GCM``
        r   r   rO   r*   r2   rS   s      r+   get_enczJWERegistry.get_enc   ,    
 ??5)dH-~r-   c                 N    | j                   d   }| j                  ||       ||   S )zGet the allowed ("zip") algorithm instance of the given name.

        :param name: value of the ``zip``, e.g. ``DEF``
        r   rU   rV   s      r+   get_zipzJWERegistry.get_zip   rX   r-   rS   c                     ||vrt        d| d      | j                  r|| j                  vrt        d| d      y || j                  vrt        d| d      y )NzAlgorithm of 'z' is not supportedz' is not allowedz' is not recommended)r	   r)   r   rV   s      r+   rO   zJWERegistry._check_algorithm   sv    x+nTFBT,UVV<<4<<'/.FV0WXX ( 4+++/.FZ0[\\ ,r-   )NNTT)F)*__name__
__module____qualname____doc__r   r   __annotations__r   tClassVarliststrr   intr   r    r!   r"   r   r   boolr,   classmethodr   r5   r   r=   bytesrA   rD   rG   rJ   rM   r   r9   r   rW   r   rZ   dictAnyrO    r-   r+   r   r   %   s    "J 
 *,KDI&+ (,+$(c(,.$c.!&3&!! 6:-1&*$(7+d27 sOd*7  $	7
 "7 /\ /d / /
A6 At A A fU ft fje j je  d5 dT d`% `D `
C 
K 
C K C K 	]S 	]Daee4D 	] 	]r-   r   )rQ   typingra   collections.abcr   modelsr   r   r   errorsr	   r
   r   rS   r   r   r   r   r   r   __all__Unionr   	TypedDictri   rd   r   r   r   rk   r-   r+   <module>rs      s      & 9 9 
  ww{K<=C$%C$%C$%] ]D = r-   