
    0Hoh)6                     X   d dl Z d dlmZ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 d dlmZ d dlmc mc 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"m#Z# d dl$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-  edd      Z. ed      Z/ G d de      Z0 G d de0      Z1 G d de0      Z2de3e4e5e0   f   fdZ6dee4e	f   de0fdZ7ee4e
e8e9ge9f   f   Z:ee4e
e8ee4   e9ge9f   f   Z; ede:e;      Z< ede
de	f         Z=de=de=fd Z>e>dddd!d"e8d#e;d$ee4   d%ee9   d&eee4e9f      de0fd'       Z?e>ddd(d"e8d)e:d%ee9   d&eee4e9f      de0f
d*       Z@dddd+d"e8d#e;d)e:d,ee4   d%ee9   d&eee4e9f      de0fd-ZA	 	 d2d.e8d,ee4   d&eee4e9f      de0fd/ZB	 	 d2d0e8d,ee4   d&eee4e9f      de0fd1ZCy)3    N)ABCabstractmethod)Mapping)wraps)AnyCallableOptionalTypeVarUnion)warn)InvalidSignature)default_backend)padding)RSAPrivateKeyRSAPrivateNumbersRSAPublicKeyRSAPublicNumbersrsa_crt_dmp1rsa_crt_dmq1rsa_crt_iqmprsa_recover_prime_factors)HashAlgorithm   )MalformedJWKErrorUnsupportedKeyTypeError)	b64decode	b64encodeuint_b64decodeuint_b64encode_AJWKAbstractJWKBase)bound_Tc                       e Zd Zedefd       Zedefd       Zedefd       Zede	de	fd       Z
ede	de	defd       Zedd	edeeef   fd
       Zeedee   deeef   defd              Zy)r!   returnc                      y N selfs    c/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/jwt/jwk.pyget_ktyzAbstractJWKBase.get_kty@           c                      y r'   r(   r)   s    r+   get_kidzAbstractJWKBase.get_kidD   r-   r.   c                      y r'   r(   r)   s    r+   is_sign_keyzAbstractJWKBase.is_sign_keyH   r-   r.   messagec                      y r'   r(   )r*   r3   optionss      r+   signzAbstractJWKBase.signL   r-   r.   	signaturec                      y r'   r(   )r*   r3   r7   r5   s       r+   verifyzAbstractJWKBase.verifyP   r-   r.   public_onlyc                      y r'   r(   )r*   r:   s     r+   to_dictzAbstractJWKBase.to_dictT   r-   r.   clsdctc                      y r'   r(   )r=   r>   s     r+   	from_dictzAbstractJWKBase.from_dictX   s     	r.   NT)__name__
__module____qualname__r   strr,   r0   boolr2   bytesr6   r9   dictr<   classmethodtyper    objectr@   r(   r.   r+   r!   r!   >   s         T   E    e  T   4 4S>   tE{ c6k): u   r.   c                        e Zd Zddeddf fdZd Zd ZdefdZde	eegef   fdZ
d	edefd
Zd	ededefdZddZed        Z xZS )OctetJWKNkeyr%   c                     t         t        |           || _        || _        h d}|j                         D ci c]  \  }}||v s|| c}}| _        y c c}}w )N>   algusex5cx5tx5ukey_opsx5t#s256)superr!   __init__rN   kiditemsr5   )r*   rN   rY   r5   optnameskv	__class__s          r+   rX   zOctetJWK.__init__`   sL    ot-/M)0JAAM1JJs   AAc                      y)Noctr(   r)   s    r+   r,   zOctetJWK.get_ktyh       r.   c                     | j                   S r'   )rY   r)   s    r+   r0   zOctetJWK.get_kidk   s    xxr.   c                      y)NTr(   r)   s    r+   r2   zOctetJWK.is_sign_keyn   s    r.   c                     |d   S )Nsignerr(   r*   r5   s     r+   _get_signerzOctetJWK._get_signerq   s    x  r.   r3   c                 J    | j                  |      } ||| j                        S r'   )rg   rN   )r*   r3   r5   re   s       r+   r6   zOctetJWK.signt   s#    !!'*gtxx((r.   r7   c                 r    | j                  |      }t        j                  | ||| j                              S r'   )rg   hmaccompare_digestrN   )r*   r3   r7   r5   re   s        r+   r9   zOctetJWK.verifyx   s0    !!'*""9fWdhh.GHHr.   c                     dt        | j                        d}|j                  | j                         | j                  r| j                  |d<   |S )Nr`   )ktyr\   rY   )r   rN   updater5   rY   )r*   r:   r>   s      r+   r<   zOctetJWK.to_dict|   sC    488$
 	

4<< 88CJ
r.   c                 h    	  | t        |d         fi |S # t        $ r}t        d      |d }~ww xY w)Nr\   zk is required)r   KeyErrorr   )r=   r>   whys      r+   r@   zOctetJWK.from_dict   s=    	>yS*2c22 	>#O4#=	>s    	1,1r'   rA   )rB   rC   rD   rG   rX   r,   r0   rF   r2   r   rg   r6   r9   r<   rI   r@   __classcell__r^   s   @r+   rM   rM   ^   s    KE K4 KT !hu~u/D&E !)E ) )Ie I IT I > >r.   rM   c                        e Zd ZdZdeeef   ddf fdZdefdZ	de
g ef   fdZdej                  fdZd	edefd
Zd	ededefdZd Zd ZddZed        Z xZS )RSAJWKz@
    https://tools.ietf.org/html/rfc7518.html#section-6.3.1
    keyobjr%   Nc                     t         t        |           || _        h d}|j	                         D ci c]  \  }}||v s|| c}}| _        y c c}}w )N>   rP   rY   rQ   rR   rS   rT   rU   rV   )rW   r!   rX   rv   rZ   r5   )r*   rv   r5   r[   r\   r]   r^   s         r+   rX   zRSAJWK.__init__   sK     	ot-/	
 *1JAAM1JJs
   AAc                 6    t        | j                  t              S r'   )
isinstancerv   r   r)   s    r+   r2   zRSAJWK.is_sign_key   s    $++}55r.   c                     |d   S )Nhash_funr(   rf   s     r+   _get_hash_funzRSAJWK._get_hash_fun   s    z""r.   c                 j    	 |d   S # t         $ r" t        d       t        j                         cY S w xY w)Nr   zTyou should not use RSAJWK.verify/sign without jwa intermiediary, used legacy padding)rp   r   r   PKCS1v15rf   s     r+   _get_paddingzRSAJWK._get_padding   s?    	&9%% 	&5 ##%%	&s    (22r3   c                     t        | j                  t              rt        d      | j	                  |      }| j                  |      }| j                  j                  || |             S )NzRequires a private key.)ry   rv   r   
ValueErrorr|   r   r6   )r*   r3   r5   r{   _paddings        r+   r6   zRSAJWK.sign   sW    dkk<0677%%g.$$W-{{8:>>r.   r7   c                    | j                  |      }| j                  |      }t        | j                  t              r| j                  j                         }n| j                  }	 |j                  ||| |              y# t        $ r Y yw xY w)NTF)r|   r   ry   rv   r   
public_keyr9   r   )r*   r3   r7   r5   r{   r   pubkeys          r+   r9   zRSAJWK.verify   sy    %%g.$$W-dkk=1[[++-F[[F	MM)Wh
C 		s   %A? ?	B
Bc                      y)NRSAr(   r)   s    r+   r,   zRSAJWK.get_kty   ra   r.   c                 8    | j                   j                  d      S )NrY   )r5   getr)   s    r+   r0   zRSAJWK.get_kid   s    ||&&r.   c                 N   ddi}|j                  | j                         t        | j                  t              r| j                  j                         }|j                  }|j                  t        |j                        t        |j                        d       |s|j                  t        |j                        t        |j                        t        |j                        t        |j                        t        |j                        t        |j                        t        |j                        t        |j                        d       |S | j                  j                         }|j                  t        |j                        t        |j                        d       |S )Nrm   r   )en)r   r   dpqdpdqqi)rn   r5   ry   rv   r   private_numberspublic_numbersr   r   r   r   r   r   dmp1dmq1iqmp)r*   r:   r>   priv_numberspub_numberss        r+   r<   zRSAJWK.to_dict   s9   5
 	

4<< dkk=1;;668L&55KJJ'6'6 

+KMM:+KMM:+LNN;+LNN;+LNN;,\->->?,\->->?,\->->?	 Jkk002

#KMM2#KMM2	
 
r.   c                    d|v rt        d      	 t        |d         }t        |d         }t	        ||      }d|vr! | |j                  t                     fi |S t        |d         }h d}t        |j                               |z  }t        |      d	k(  rAt        |||      \  }	}
t        ||	|
t        ||	      t        ||
      t        |	|
      |
      }n_||k(  rOt        |t        |d         t        |d         t        |d         t        |d         t        |d         |
      }nt        d       | |j                  t                     fi |S # t        $ r}t        d      |d }~ww xY w)Nothz0RSA keys with multiples primes are not supportedr   r   ze and n are requiredr   )backend>   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   z=p, q, dp, dq, qi MUST be present orall of them MUST be absent)r   r   rp   r   r   r   r   setkeyslenr   r   r   r   r   private_key)r=   r>   r   r   rq   r   r   
privparamsproductr   r   r   s               r+   r@   zRSAJWK.from_dict   s   C<)B 	Es3x(As3x(A 'q!,c>&&/@&AEH  3s8$1
chhj/J.w<1,Q15DAq,!!Q'!!Q'!!Q'*L 
", S* S*#CI.#CI.#CI.*L $-  <++O4E+FN#NNS  	E#$:;D	Es   E 	E5$E00E5rA   )rB   rC   rD   __doc__r   r   r   rX   rF   r2   r   r   r|   r   AsymmetricPaddingr   rG   r6   r9   r,   r0   r<   rI   r@   rr   rs   s   @r+   ru   ru      s    KM<78K	K$6T 6#]1B(C #&w'@'@ &?E ? ?e  T '$L 2O 2Or.   ru   r%   c                      t         t        dS )N)r`   r   )rM   ru   r(   r.   r+   supported_key_typesr   +  s     r.   r>   c                     t        | t              st        d      d| vrt        d      t	               }| d   }||vrt        d|       ||   j                  |       S )Nzdct must be a dictrm   zkty MUST be presentzunsupported key type: )ry   rH   	TypeErrorr   r   r   r@   )r>   	supportedrm   s      r+   jwk_from_dictr   2  sm    c4 ,--C 566#%I
e*C
)%(>se&DEES>##C((r.   _Loader_C.funcc                 |     d j                   v sd j                   v st        d      t                fd       }|S )NprivatepubliczDthe wrapped function must have either public or private in it's namec                     t        |t              rt        t        |      }|j	                  d      i |d<    | |fi |S )Nr5   )ry   rE   getattrserialization_moduler   )contentloaderkwargsr   s      r+   wrapperz3jwk_from_bytes_argument_conversion.<locals>.wrapperS  sG     fc"16:F::i ( "F9GV.v..r.   )rB   	Exceptionr   )r   r   s   ` r+   "jwk_from_bytes_argument_conversionr   L  sK    &(dmm*C'
 	

 4[/ / Nr.   passwordr   r5   r   private_loaderr   r   r5   c                    |i }	  || ||      }t        |t              rt        |fi |S t        d      # t        $ r}t        d      |d}~ww xY w)7This function is meant to be called from jwk_from_bytesNunsupported key typezthis is probably a public key)ry   r   ru   r   r   )r   r   r   r   r5   privkeyexs          r+   jwk_from_private_bytesr   a  sh     O (G<g}-'-W--%&<== O%&EFBNOs   %7 7 	A AAr   r5   public_loaderc                    |i }	  || |      }t        |t              rt        |fi |S t        d      # t        $ r}t        d      |d}~ww xY w)r   Nr   zcould not deserialize)ry   r   ru   r   r   )r   r   r   r5   r   rq   s         r+   jwk_from_public_bytesr   v  sl     Hw0fl+&,G,,%"
 	
  H%&=>CGHs   $6 6 	AAA)private_passwordr   r5   r   c                `    	 t        | ||||      S # t        $ r t        | |||      cY S w xY w)Nr   r   )r   r   r   )r   r   r   r   r   r5   s         r+   jwk_from_bytesr     sM    
%%
 	
 # 
$	
 	

s    --pem_contentc                 $    t        | dd|d |      S )Nload_pem_private_keyload_pem_public_keyr   r   r   r   r5   r   )r   r   r5   s      r+   jwk_from_pemr     #    
 -+) r.   der_contentc                 $    t        | dd|d |      S )Nload_der_private_keyload_der_public_keyr   r   )r   r   r5   s      r+   jwk_from_derr     r   r.   )NN)Drj   abcr   r   collections.abcr   	functoolsr   typingr   r   r	   r
   r   warningsr   ,cryptography.hazmat.primitives.serializationhazmat
primitivesserializationr   cryptography.exceptionsr   cryptography.hazmat.backendsr   )cryptography.hazmat.primitives.asymmetricr   -cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   r   r   r   r   %cryptography.hazmat.primitives.hashesr   
exceptionsr   r   utilsr   r   r   r   r    r#   r!   rM   ru   rH   rE   rJ   r   r   rG   rK   PublicKeyLoaderTPrivateKeyLoaderTr   r   r   r   r   r   r   r   r(   r.   r+   <module>r      s    $    K K 4 8 =	 	 	 @  	01T]c @-> ->`ZO_ ZOzT#tO'<"<= 
)wsCx( 
)_ 
) hv'>??@ 5(3-0&8	99  )-/@
AT#s(+,R B * $
 # $.2OO%O sm	O
 fO gc6k*+O O $O( $
 !%.2HH#H f	H
 gc6k*+H H $H4 '+ $.2

%
 $

 sm
 f
 gc6k*+
 
8 '+.2sm gc6k*+ 	" '+.2sm gc6k*+ 	r.   