
    0Hoh                        d dl Z d dlZd dlmZmZ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ed	eegef   fd
Z G d d      Z G d de      Z e       Z G d de      Z ee j0                        Z ee j4                        Z ee j8                        Z G d de      Z ee	      Z ee
      Z  ee      Z! G d de      Z" e"e	      Z# e"e
      Z$ e"e      Z%d	e&eef   fdZ'y)    N)AnyCallableOptional)padding)SHA256SHA384SHA512   )InvalidKeyTypeError)AbstractJWKBasealgreturnc                     | j                  d      rt        j                  S | j                  d      rt        j                  S | j                  d      rt        j                  S t        |  d      )NS256S384S512z is not supported)endswithhashlibsha256sha384sha512
ValueError)r   s    c/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/jwt/jwa.pystd_hash_by_algr   "   sW    
||F~~
||F~~
||F~~
u-.
//    c                   D    e Zd Zdedee   defdZdedee   dedefdZy)AbstractSigningAlgorithmmessagekeyr   c                     t               NNotImplementedErrorselfr   r   s      r   signzAbstractSigningAlgorithm.sign.   s    !##r   	signaturec                     t               r!   r"   r%   r   r   r'   s       r   verifyzAbstractSigningAlgorithm.verify1   s     "##r   N	__name__
__module____qualname__bytesr   r   r&   boolr*    r   r   r   r   ,   sQ    $E $(A $e $$$ o&$ 	$
 
$r   r   c                   D    e Zd Zdedee   defdZdedee   dedefdZy)NoneAlgorithmr   r   r   c                      yNr   r1   r$   s      r   r&   zNoneAlgorithm.sign<   s    r   r'   c                 .    t        j                  |d      S r5   )hmaccompare_digestr)   s       r   r*   zNoneAlgorithm.verify?   s     ""9c22r   Nr+   r1   r   r   r3   r3   :   sQ    E (A e 33 o&3 	3
 
3r   r3   c                       e Zd Zdeg ef   ddfdZde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	dee   d
e	defdZy)HMACAlgorithmhash_funr   Nc                     || _         y r!   r;   r%   r;   s     r   __init__zHMACAlgorithm.__init__M   	     r   r   c                 F    |r|j                         dk7  rt        d      |S )NoctzOctet key is required)get_ktyr   )r%   r   s     r   
_check_keyzHMACAlgorithm._check_keyP   s#    ckkmu,%&=>>
r   r   c                 `    t        j                  ||| j                        j                         S r!   )r7   newr;   digestr$   s      r   _signzHMACAlgorithm._signU   s"    xxWdmm4;;==r   c                 ^    | j                  |      }|j                  || j                        S N)signer)rD   r&   rH   r$   s      r   r&   zHMACAlgorithm.signX   s'    ooc"xx

x33r   r'   c                 `    | j                  |      }|j                  ||| j                        S rJ   )rD   r*   rH   r)   s       r   r*   zHMACAlgorithm.verify\   s+     ooc"zz'9TZZz@@r   )r,   r-   r.   r   r   r?   r   r   rD   r/   rH   r&   r0   r*   r1   r   r   r:   r:   K   s    !"c'!2 !t !h7 O 
>U > >5 >4E 4(A 4e 4AA o&A 	A
 
Ar   r:   c                   r    e Zd ZdeddfdZ	 ddee   dedefdZde	dee   de	fd	Z
de	dee   d
e	defdZy)RSAAlgorithmr;   r   Nc                     || _         y r!   r=   r>   s     r   r?   zRSAAlgorithm.__init__m   r@   r   r   must_sign_keyc                     |r|j                         dk7  rt        d      |r|j                         st        d      |S NRSAzRSA key is requiredz;a RSA private key is required, but passed is RSA public keyrC   r   is_sign_keyr%   r   rP   s      r   rD   zRSAAlgorithm._check_keyp   C    
 ckkmu,%&;<<!2%M  
r   r   c                     | j                  |d      }|j                  || j                  t        j                               S )NTrP   r;   r   )rD   r&   r;   r   PKCS1v15r$   s      r   r&   zRSAAlgorithm.sign}   s>    ooco6xxdmmW5E5E5G  
 	
r   r'   c                     | j                  |      }|j                  ||| j                  t        j                               S )NrZ   )rD   r*   r;   r   r[   r)   s       r   r*   zRSAAlgorithm.verify   sA     ooc"zz]]$$&	  
 	
r   F)r,   r-   r.   objectr?   r   r   r0   rD   r/   r&   r*   r1   r   r   rN   rN   k   s    ! !D ! $o&  
	
E 
(A 
e 


 o&
 	

 

r   rN   c                   |    e Zd Zdeg ef   ddfdZ	 ddee   dedefdZ	de
dee   de
fd	Zde
dee   d
e
defdZy)PSSRSAAlgorithmr;   r   Nc                     || _         y r!   r=   r>   s     r   r?   zPSSRSAAlgorithm.__init__   r@   r   r   rP   c                     |r|j                         dk7  rt        d      |r|j                         st        d      |S rR   rT   rV   s      r   rD   zPSSRSAAlgorithm._check_key   rW   r   r   c           
          | j                  |d      }|j                  || j                  t        j                  t        j
                  | j                               | j                         j                              S )NTrY   mgfsalt_lengthrZ   )rD   r&   r;   r   PSSMGF1digest_sizer$   s      r   r&   zPSSRSAAlgorithm.sign   sa    ooco6xx]]KKLL1 MMO77  
 	
r   r'   c                     | j                  |      }|j                  ||| j                  t        j                  t        j
                  | j                               | j                         j                              S )Nrd   rZ   )rD   r*   r;   r   rg   rh   ri   r)   s       r   r*   zPSSRSAAlgorithm.verify   sb     ooc"zz]]KKLL1 MMO77	  
 	
r   r]   )r,   r-   r.   r   r   r?   r   r   r0   rD   r/   r&   r*   r1   r   r   r`   r`      s    !"c'!2 !t ! $o&  
		
E 	
(A 	
e 	


 o&
 	

 

r   r`   c            
      b    t         t        t        t        t        t
        t        t        t        d	S )N	HS256HS384HS512RS256RS384RS512PS256PS384PS512rl   r1   r   r   supported_signing_algorithmsrv      s)     
 
r   )(r   r7   typingr   r   r   )cryptography.hazmat.primitives.asymmetricr   %cryptography.hazmat.primitives.hashesr   r   r	   
exceptionsr   jwkr   strr/   r^   r   r   r3   noner:   r   rm   r   rn   r   ro   rN   rp   rq   rr   r`   rs   rt   ru   dictrv   r1   r   r   <module>r      s      >  ,  0 05'6/!: 0$ $3, 3 A, A6 	gnn%gnn%gnn%$
+ $
N 	VVV+
. +
\ 	d30H+H&I r   