
    uZh                     l    d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZ d Z G d de      Zy)	    N)Key)
ALGORITHMS)JWKError)base64url_decodebase64url_encodec                 >    t        t        j                  |             S N)bytesosurandom)	num_bytess    p/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/jose/backends/native.pyget_random_bytesr      s    I&''    c                       e Zd ZdZej
                  ej                  ej                  ej                  ej                  ej                  iZd Zd Zd Zd Zd Zy)HMACKeyzf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                    |t         j                  vrt        d|z        || _        | j                  j                  |      | _        t        t              r| j                        | _
        y t        t              st        t              st        d      t        t              rj                  d      g d}t        fd|D              rt        d      | _
        y )Nz*hash_alg: %s is not a valid hash algorithmz+Expecting a string- or bytes-formatted key.utf-8)s   -----BEGIN PUBLIC KEY-----s   -----BEGIN RSA PUBLIC KEY-----s   -----BEGIN CERTIFICATE-----s   ssh-rsac              3   &   K   | ]  }|v  
 y wr	    ).0string_valuekeys     r   	<genexpr>z#HMACKey.__init__.<locals>.<genexpr>.   s     G||s"Gs   zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   HMACr   
_algorithmHASHESget	_hash_alg
isinstancedict_process_jwkprepared_keystrr
   encodeany)selfr   	algorithminvalid_stringss    `  r   __init__zHMACKey.__init__   s    JOO+G)STT#3c4  $ 1 1# 6D#s#JsE,BHIIc3**W%C
 GGG9 
  r   c                     |j                  d      dk(  st        d|j                  d      z        |j                  d      }|j                  d      }t        |      }t	        |      }|S )Nktyoctz1Incorrect key type. Expected: 'oct', Received: %skr   )r   r   r%   r
   r   )r'   jwk_dictr.   s      r   r"   zHMACKey._process_jwk6   se    ||E"e+NQYQ]Q]^cQddeeLLHHW!HQr   c                 t    t        j                  | j                  || j                        j	                         S r	   )hmacnewr#   r   digest)r'   msgs     r   signzHMACKey.signA   s(    xx))3?FFHHr   c                 L    t        j                  || j                  |            S r	   )r1   compare_digestr5   )r'   r4   sigs      r   verifyzHMACKey.verifyD   s    ""3		#77r   c                 f    | j                   dt        | j                        j                  d      dS )Nr-   ASCII)algr,   r.   )r   r   r#   decode)r'   s    r   to_dictzHMACKey.to_dictG   s/    ??!$"3"34;;GD
 	
r   N)__name__
__module____qualname____doc__r   HS256hashlibsha256HS384sha384HS512sha512r   r*   r"   r5   r9   r>   r   r   r   r   r      sW    
 
0@0@'..R\RbRbdkdrdrsF >	I8
r   r   )rD   r1   r   jose.backends.baser   jose.constantsr   jose.exceptionsr   
jose.utilsr   r   r   r   r   r   r   <module>rN      s+      	 " % $ 9(=
c =
r   