
    kKj2                        U 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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 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mZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z-  G d de      Z. G d de      Z/ G d de       Z0 G d de       Z1 G d de!      Z2de3ddfd Z4 G d! d"e      Z5 e/d#d$ ejl                               Z7d%e7_8         e0d&d'      Z9 e0d(      Z: e0d)d'      Z;e7 e/d*d+ ejx                   ejz                   ej|                                ej|                         d      d'       e/d,d- ejx                   ejz                   ej~                                ej~                         d            e9e:e; e.        e2d       e2e9       e2e:       e2e;       e1d&       e1d(       e1d)       e5d)e9       e5d.e:       e5d/e;      gZ@eAe   eBd0<   e.ZCe0ZDe2ZEe1ZFe5ZGy)1    N)padding)hashes)aes_key_wrapaes_key_unwrapInvalidUnwrap)Cipher)AES)GCM)
PBKDF2HMAC)
InvalidTag   )derive_key_for_concat_kdf)OctKey)RSAKey)ECKey   )JWEAlgModelJWEDirectEncryptionJWEKeyEncryptionJWEKeyWrappingJWEKeyAgreementJWEEncModel	Recipient)to_bytesurlsafe_b64encodeurlsafe_b64decode)HeaderParameter)InvalidKeyLengthErrorDecodeErrorSecurityWarningc                   2    e Zd ZdZdZdZdedee   de	fdZ
y)	DirectAlgEncryptiondirz$Direct use of a shared symmetric keyTsize	recipientreturnc                     |j                   }|J | j                  |       |j                  }t        |      dz  |k7  rt	        d| d      |S )N   A key of size z bits MUST be used)recipient_keycheck_key_type	raw_valuelenr   )selfr$   r%   keyceks        j/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/joserfc/_rfc7518/jwe_algs.pycompute_cekzDirectAlgEncryption.compute_cek+   sX    %%C mms8a<4'.>P(QRR
    N)__name__
__module____qualname__namedescriptionrecommendedintr   r   bytesr2    r3   r1   r"   r"   &   s0    D8KK 	&0A e r3   r"   c            	       t    e Zd ZdZdgZddededej                  defdZ	de
d	ee   d
e
fdZd	ee   d
e
fdZy)RSAAlgKeyEncryption   RSAr7   r8   pad_fnr9   c                 <    || _         || _        || _        || _        y N)r7   r8   r   r9   )r.   r7   r8   rA   r9   s        r1   __init__zRSAAlgKeyEncryption.__init__;   s     	&&r3   r0   r%   r&   c                    |j                   }|J | j                  |       |j                  d      }|j                  | j                  k  rt	        d| j                   d      |j                  || j                        S )Nencryptr)   z bits or larger MUST be used)r*   r+   
get_op_keykey_sizer   rF   r   r.   r0   r%   r/   op_keys        r1   encrypt_cekzRSAAlgKeyEncryption.encrypt_cekA   sq    %%C 	*??T]]*'.Gc(dee~~c4<<00r3   c                    |j                   }|J | j                  |       |j                  d      }	 |j                  J |j	                  |j                  | j
                        }|S # t        $ r}t        t        |            d }~ww xY w)Ndecrypt)	r*   r+   rG   encrypted_keyrM   r   
ValueErrorr   str)r.   r%   r/   rJ   r0   errors         r1   decrypt_cekzRSAAlgKeyEncryption.decrypt_cekJ   s    %%C 	*	***666..!8!8$,,GC 
  	*c%j))	*s   4A* *	B3BBNF)r4   r5   r6   rH   	key_typesrP   r   AsymmetricPaddingboolrD   r;   r   r   rK   rR   r<   r3   r1   r>   r>   5   so     HI'S 's 'G<U<U 'dh '1u 161B 1u 1
Yv%6 
5 
r3   r>   c                   v    e Zd ZddedefdZdededefdZdededefd	Zded
e	e
   defdZd
e	e
   defdZy)AESAlgKeyWrappingrH   r9   c                 L    d| d| _         d| d| _        || _        || _        y )NAKWzAES Key Wrap using -bit key)r7   r8   rH   r9   )r.   rH   r9   s      r1   rD   zAESAlgKeyWrapping.__init__X   s2    z$	0
(C &r3   r0   r/   r&   c                 <    | j                  |       t        ||      S rC   )check_op_keyr   r.   r0   r/   s      r1   wrap_cekzAESAlgKeyWrapping.wrap_cek^   s    #C%%r3   ekc                 r    | j                  |       	 t        ||      }|S # t        $ r t        d      w xY w)NzUnwrap AES key failed)r^   r   r   r   )r.   ra   r/   r0   s       r1   
unwrap_cekzAESAlgKeyWrapping.unwrap_cekb   sE    #	7 b)C 
  	7566	7s   ! 6r%   c                     |j                   }|J | j                  |       |j                  d      }| j                  ||      S )NwrapKey)r*   r+   rG   r`   rI   s        r1   rK   zAESAlgKeyWrapping.encrypt_cekj   sD    %%C 	*}}S&))r3   c                     |j                   }|J | j                  |       |j                  d      }|j                  J | j	                  |j                  |      S )N	unwrapKey)r*   r+   rG   rN   rc   )r.   r%   r/   rJ   s       r1   rR   zAESAlgKeyWrapping.decrypt_cekq   s\    %%C ,&&222y66??r3   NrS   )r4   r5   r6   r:   rV   rD   r;   r`   rc   r   r   rK   rR   r<   r3   r1   rX   rX   W   s    ' '4 '&E & &% &U  5 *u *61B *u *@Yv%6 @5 @r3   rX   c                       e Zd Z eddd       eddd      dZdefdZded	ed
efdZded	ed
efdZ	dede
e   d
efdZde
e   d
efdZy)AESGCMAlgKeyWrappingzInitialization vectorrP   TzAuthentication tag)ivtagrH   c                 >    d| d| _         d| d| _        || _        y )NrZ   GCMKWz Key wrapping with AES GCM using r\   )r7   r8   rH   )r.   rH   s     r1   rD   zAESGCMAlgKeyWrapping.__init__   s*    z'	=hZxP r3   r0   r/   r&   c                 2    t        | j                   d      Nz, can not be used together with Key AgreementRuntimeErrorr7   r_   s      r1   r`   zAESGCMAlgKeyWrapping.wrap_cek       dii[(TUVVr3   ra   c                 2    t        | j                   d      ro   rp   )r.   ra   r/   s      r1   rc   zAESGCMAlgKeyWrapping.unwrap_cek   rr   r3   r%   c                    |j                   }|J | j                  |       |j                  d      }| j                  |       d}t	        j
                  |dz        }t        t        |      t        |            }|j                         }|j                  |      |j                         z   }	|j                  dt        |      j                  d             |j                  dt        |j                        j                  d             |	S )Nre   `   r(   rj   asciirk   )r*   r+   rG   r^   secretstoken_bytesr   r	   r
   	encryptorupdatefinalize
add_headerr   decoderk   )
r.   r0   r%   r/   rJ   iv_sizerj   cipherencrN   s
             r1   rK   z AESGCMAlgKeyWrapping.encrypt_cek   s    %%C 	*&!
   A.FSW- 

3#,,.8T#4R#8#?#?#HIU$5cgg$>$E$Eg$NOr3   c                 >   |j                   }|J | j                  |       |j                  d      }| j                  |       |j	                         }d|v sJ d|v sJ t        t        |d               }t        t        |d               }t        t        |      t        ||            }|j                         }	 |j                  J |j                  |j                        |j                         z   }	|	S # t        $ r}
t        t!        |
            d }
~
ww xY w)Nrg   rj   rk   )r*   r+   rG   r^   headersr   r   r   r	   r
   	decryptorrN   rz   r{   r   r   rP   )r.   r%   r/   rJ   r   rj   rk   r   dr0   rQ   s              r1   rR   z AESGCMAlgKeyWrapping.decrypt_cek   s   %%C ,&!##%wx67 89FSS\2	***666((9223ajjlBC 
  	*c%j))	*s   >:C: :	DDDN)r4   r5   r6   r   more_header_registryr:   rD   r;   r`   rc   r   r   rK   rR   r<   r3   r1   ri   ri   z   s    5udC3UDA
! !
WE W W% WWU W W5 Wu 61B u *Yv%6 5 r3   ri   c                       e Zd ZddgZ eddd       edd       edd      d	Zdded
z  fdZdede	e
   defdZdede	e
   defdZy
)ECDHESAlgKeyAgreementECOKPzEphemeral Public KeyjwkTzAgreement PartyUInforP   zAgreement PartyVInfo)epkapuapvNkey_wrappingc                     |$d| _         d| _        d | _        d| _        || _        y d|j                    | _         d|j                    | _        |j                  | _        |j                  | _        || _        y )NzECDH-ESz(ECDH-ES in the Direct Key Agreement modeTzECDH-ES+z.ECDH-ES using Concat KDF and CEK wrapped with )r7   r8   rH   r9   r   )r.   r   s     r1   rD   zECDHESAlgKeyAgreement.__init__   s    !DIID DM#D )	 #<#4#4"56DI!OP\PaPaObcD(11DM+77D(r3   r   r%   r&   c                     |j                   }|J |j                  }|J |j                  |      }|j                         }t	        |||j
                  | j                        S rC   )r*   ephemeral_keyexchange_derive_keyr   r   cek_sizerH   )r.   r   r%   r*   r   
shared_keyr   s          r1   encrypt_agreed_upon_keyz-ECDHESAlgKeyAgreement.encrypt_agreed_upon_key   sg    !//(((!//((("66}E
##%(WcllDMMZZr3   c                     |j                         }d|v sJ |j                  }|J | j                  |       |j                  |d         }|j	                  |      }t        |||j                  | j                        S )Nr   )r   r*   r+   
import_keyr   r   r   rH   )r.   r   r%   r   r*   r   r   s          r1   decrypt_agreed_upon_keyz-ECDHESAlgKeyAgreement.decrypt_agreed_upon_key   s    ##%!//(((M*%00@"66}E
(WcllDMMZZr3   rC   )r4   r5   r6   rT   r   r   r   rD   r   r   r   r;   r   r   r<   r3   r1   r   r      s    uI5udC5u=5u=)^d%: )	[; 	[9UCS 	[X] 	[
[; 
[9UCS 
[X] 
[r3   r   valuer&   c                     t        | t              st        d      | dk  rt        j                  dt
               d}| |kD  rt        d|       y )Nzmust be an inti  z0A minimum iteration count of 1000 is RECOMMENDEDi zmust be less than )
isinstancer:   rO   warningswarnr    )r   	max_values     r1   validate_p2cr      sU    eS!)** t|H/ZIy-i[9:: r3   c                       e Zd ZU eed<    eddd       eded      dZdgZdZ	d	ed
e
fdZdedededefdZdedee   defdZdee   defdZy)PBES2HSAlgKeyEncryptionrH   zPBES2 Salt InputrP   TzPBES2 Count)p2sp2coctr?   	hash_sizer   c                     d| d|j                    | _         d| d|j                    d| _        |j                  | _        || _         t	        t
        d|              | _        y )NzPBES2-HS+zPBES2 with HMAC SHA-z and z	 wrappingSHA)r7   r8   rH   r   getattrr   hash_alg)r.   r   r   s      r1   rD   z PBES2HSAlgKeyEncryption.__init__   sk    yk<+<+<*=>	1)E,BSBSATT]^$--(:#i[(9:<r3   r/   r   r   r&   c                     t        | j                        dz   |z   }t        | j                  | j                  dz  ||      }|j                  |      S )N    r(   )	algorithmlengthsalt
iterations)r   r7   r   r   rH   derive)r.   r/   r   r   r   kdfs         r1   compute_derived_keyz+PBES2HSAlgKeyEncryption.compute_derived_key  sM    		"W,s2mm==A%	
 zz#r3   r0   r%   c                    |j                         }d|vr@t        j                  d      }|j                  dt	        |      j                  d             nt        t        |d               }d|vr| j                  }|j                  d|       n|d   }|j                  }|J | j                  |       | j                  |j                  d      ||      }| j                  j                  ||      S )Nr      rv   r   	deriveKey)r   rw   rx   r|   r   r}   r   r   DEFAULT_P2Cr*   r+   r   rG   r   r`   )r.   r0   r%   r   r   r   r/   keks           r1   rK   z#PBES2HSAlgKeyEncryption.encrypt_cek  s    ##%%%b)C  (9#(>(E(Eg(NO#HWU^$<=C""C  ,%.C%%C &&s~~k'BCM  ))#s33r3   c                 `   |j                         }d|v sJ d|v sJ t        t        |d               }|d   }|j                  }|J | j	                  |       | j                  |j                  d      ||      }|j                  J | j                  j                  |j                  |      S )Nr   r   r   )
r   r   r   r*   r+   r   rG   rN   r   rc   )r.   r%   r   r   r   r/   r   s          r1   rR   z#PBES2HSAlgKeyEncryption.decrypt_cek$  s    ##% 89en%%C &&s~~k'BCM&&222  ++I,C,CSIIr3   N)r4   r5   r6   r:   __annotations__r   r   r   rT   r   r   rD   r;   r   r   r   rK   rR   r<   r3   r1   r   r      s    M15$?}lDA IK=# =^ =	u 	5 	s 	u 	4u 461B 4u 4*JYv%6 J5 Jr3   r   RSA1_5zRSAES-PKCS1-v1_5zQJWE algorithm "RSA1_5" is deprecated, via draft-ietf-jose-deprecate-none-rsa15-02   T      zRSA-OAEPz#RSAES OAEP using default parameterszRSA-OAEP-256z.RSAES OAEP using SHA-256 and MGF1 with SHA-256i  i   JWE_ALG_MODELS)Hrw   r   )cryptography.hazmat.primitives.asymmetricr   cryptography.hazmat.primitivesr   &cryptography.hazmat.primitives.keywrapr   r   r   &cryptography.hazmat.primitives.ciphersr   1cryptography.hazmat.primitives.ciphers.algorithmsr	   ,cryptography.hazmat.primitives.ciphers.modesr
   )cryptography.hazmat.primitives.kdf.pbkdf2r   cryptography.exceptionsr   
derive_keyr   oct_keyr   rsa_keyr   ec_keyr   _rfc7516.modelsr   r   r   r   r   r   r   utilr   r   r   registryr   errorsr   r   r    r"   r>   rX   ri   r   r:   r   r   PKCS1v15r   security_warningA128KWA192KWA256KWOAEPMGF1SHA1SHA256r   listr   DirectAlgModelAESAlgModelECDHESAlgModelAESGCMAlgModelPBES2HSAlgModelr<   r3   r1   <module>r      s"     = 1 
 : A < @ . 1      B A & - * D @  @F:> :z+[O +[\
; 
; 
;?J. ?JD 
X'9;K7;K;K;M	Nm 	3	%	3		3	%
 -\W\\+&++-0+&++-F	 8\W\\-&--/2MFMMOTJ
 

$&!&!&!C(C(C(5%[! < %&%)r3   