Ë
    %V.j¿  ã                   ó^   — 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
  G d„ de«      Zy)é    N)ÚKey)Ú
ALGORITHMS)ÚJWKError)Úbase64_to_longÚlong_to_base64c                   óž  — e Zd ZdZej
                  Zej                  Zej                  Z
eej                  j                  eej                  j                  e
ej                  j                  iZej                  j                  dfej                  j                  dfej                  j                  dffZd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zy)Ú
ECDSAECKeyzÞ
    Performs signing and verification operations using
    ECDSA and the specified hash function

    This class requires the ecdsa package to be installed.

    This is based off of the implementation in PyJWT 0.3.2
    zP-256zP-384zP-521c                 ó¬  — |t         j                  vrt        d|z  «      ‚t         j                  | j                  t         j
                  | j                  t         j                  | j                  ij                  |«      | _
        || _        | j                  j                  | j                  «      | _        t        |t        j                   t        j"                  f«      r|| _        y t        |t&        «      r| j)                  |«      | _        y t        |t*        «      r|j-                  d«      }t        |t.        «      r(	 t        j"                  j1                  |«      }|| _        y t        d|z  «      ‚# t        j2                  j4                  $ r) t        j                   j1                  |«      }Y || _        y t6        $ r}t        |«      ‚d }~ww xY w)Nz*hash_alg: %s is not a valid hash algorithmzutf-8z%Unable to parse an ECKey from key: %s)r   ÚECr   ÚES256ÚSHA256ÚES384ÚSHA384ÚES512ÚSHA512ÚgetÚhash_algÚ
_algorithmÚ	CURVE_MAPÚcurveÚ
isinstanceÚecdsaÚ
SigningKeyÚVerifyingKeyÚprepared_keyÚdictÚ_process_jwkÚstrÚencodeÚbytesÚfrom_pemÚderÚUnexpectedDERÚ	Exception)ÚselfÚkeyÚ	algorithmÚes       ú]C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\jose/backends/ecdsa_backend.pyÚ__init__zECDSAECKey.__init__$   s|  € ØœJŸM™MÑ)ÜÐGÈ)ÑSÓTÐTô ×Ñ˜dŸk™kÜ×Ñ˜dŸk™kÜ×Ñ˜dŸk™kð
÷ ‰#ˆi‹.ð	 	Œð
 $ˆŒà—^‘^×'Ñ'¨¯©Ó6ˆŒ
ä�cœE×,Ñ,¬e×.@Ñ.@ÐAÔBØ #ˆDÔØä�cœ4Ô Ø $× 1Ñ 1°#Ó 6ˆDÔØä�cœ3ÔØ—*‘*˜WÓ%ˆCä�cœ5Ô!ð"Ü×(Ñ(×1Ñ1°#Ó6�ð !$ˆDÔØäÐ>ÀÑDÓEÐEøô —9‘9×*Ñ*ò 5Ü×&Ñ&×/Ñ/°Ó4‘ð !$ˆDÔØô	 ò "Ü˜q“kÐ!ûð"ús   ÅE6 Å6<GÆ;GÇGÇGc                 ó:  ‡— ‰j                  d«      dk(  st        d‰j                  d«      z  «      ‚t        ˆfd„dD «       «      st        d«      ‚d‰v rNt        ‰j                  d«      «      }t        j
                  j                  j                  || j                  «      S t        ‰j                  d«      «      }t        ‰j                  d	«      «      }t        j                  j                  | j                  j                  ||«      st        d
|› d|› d�«      ‚t        j                  j                  | j                  j                  ||| j                  j                  «      }t        j
                  j                  j                  || j                  «      S )NÚktyr   z0Incorrect key type. Expected: 'EC', Received: %sc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© )Ú.0ÚkÚjwk_dicts     €r)   Ú	<genexpr>z*ECDSAECKey._process_jwk.<locals>.<genexpr>P   s   øè ø€ Ð<Ñ*; Q�1˜”=Ñ*;ùs   ƒ)ÚxÚyÚcrvz Mandatory parameters are missingÚdr4   r5   zPoint: z, z is not a valid point)r   r   Úallr   r   Úkeysr   Úfrom_secret_exponentr   Úpoint_is_validÚ	generatorÚellipticcurveÚPointÚorderr   Úfrom_public_point)r%   r2   r7   r4   r5   Úpoints    `    r)   r   zECDSAECKey._process_jwkL   s<  ø€ Ø�|‰|˜EÓ" dÒ*ÜÐMÐPX×P\ÑP\Ð]bÓPcÑcÓdÐdäÓ<Ñ*;Ó<Ô<ÜÐ=Ó>Ð>à�(‰?ô ˜xŸ|™|¨CÓ0Ó1ˆAÜ—:‘:×(Ñ(×=Ñ=¸aÀÇÁÓLÐLä˜xŸ|™|¨CÓ0Ó1ˆAÜ˜xŸ|™|¨CÓ0Ó1ˆAä—;‘;×-Ñ-¨d¯j©j×.BÑ.BÀAÀqÔIÜ ¨¨¨2¨a¨SÐ0EÐFÓGÐGä×'Ñ'×-Ñ-¨d¯j©j×.>Ñ.>ÀÀ1ÀdÇjÁj×FVÑFVÓWˆEÜ—:‘:×*Ñ*×<Ñ<¸UÀDÇJÁJÓOÐOó    c                 ó„   — | j                   j                  || j                  t        j                  j
                  d¬«      S )NF)ÚhashfuncÚ	sigencodeÚallow_truncate)r   Úsignr   r   ÚutilÚsigencode_string)r%   Úmsgs     r)   rG   zECDSAECKey.signb   s8   € Ø× Ñ ×%Ñ%Ø˜$Ÿ-™-´5·:±:×3NÑ3NÐ_dð &ó 
ð 	
rB   c                 ó¦   — 	 | j                   j                  ||| j                  t        j                  j
                  d¬«      S # t        $ r Y yw xY w)NF)rD   Ú	sigdecoderF   )r   Úverifyr   r   rH   Úsigdecode_stringr$   )r%   rJ   Úsigs      r)   rM   zECDSAECKey.verifyg   sS   € ð	Ø×$Ñ$×+Ñ+Ø�S 4§=¡=¼E¿J¹J×<WÑ<WÐhmð ,ó ð øô ò 	Ùð	ús   ‚AA Á	AÁAc                 óJ   — t        | j                  t        j                  «      S r.   )r   r   r   r   ©r%   s    r)   Ú	is_publiczECDSAECKey.is_publico   s   € Ü˜$×+Ñ+¬U×-?Ñ-?Ó@Ð@rB   c                 óŽ   — | j                  «       r| S | j                  | j                  j                  «       | j                  «      S r.   )rR   Ú	__class__r   Úget_verifying_keyr   rQ   s    r)   Ú
public_keyzECDSAECKey.public_keyr   s5   € Ø�>‰>ÔØˆKØ�~‰~˜d×/Ñ/×AÑAÓCÀTÇ_Á_ÓUÐUrB   c                 ó6   — | j                   j                  «       S r.   )r   Úto_pemrQ   s    r)   rX   zECDSAECKey.to_pemw   s   € Ø× Ñ ×'Ñ'Ó)Ð)rB   c                 ó  — | j                  «       s| j                  j                  «       }n| j                  }d }| j                  D ]!  \  }}|| j                  j                  k(  sŒ |}Œ# |s"t        d| j                  j                  › �«      ‚| j                  j                  j                  }| j                  d|t        |j                  j                  j                  «       |¬«      j                  d«      t        |j                  j                  j                  «       |¬«      j                  d«      dœ}| j                  «       s=t        | j                  j                  j                  |¬«      j                  d«      |d<   |S )NzCan't match r   )ÚsizeÚASCII)Úalgr,   r6   r4   r5   r7   )rR   r   rU   ÚCURVE_NAMESr   ÚKeyErrorÚbaselenr   r   ÚpubkeyrA   r4   Údecoder5   ÚprivkeyÚsecret_multiplier)r%   rV   r6   r&   ÚvalueÚkey_sizeÚdatas          r)   Úto_dictzECDSAECKey.to_dictz   sF  € Ø�~‰~ÔØ×*Ñ*×<Ñ<Ó>‰Jà×*Ñ*ˆJØˆØ×*Ô*‰JˆC�Ø�d×'Ñ'×-Ñ-Ó-Ø‘ð +ñ Ü˜\¨$×*;Ñ*;×*AÑ*AÐ)BÐCÓDÐDð
 ×$Ñ$×*Ñ*×2Ñ2ˆð —?‘?ØØÜ 
× 1Ñ 1× 7Ñ 7× 9Ñ 9Ó ;À(ÔK×RÑRÐSZÓ[Ü 
× 1Ñ 1× 7Ñ 7× 9Ñ 9Ó ;À(ÔK×RÑRÐSZÓ[ñ
ˆð �~‰~ÔÜ& t×'8Ñ'8×'@Ñ'@×'RÑ'RÐYaÔb×iÑiÐjqÓrˆD�‰IàˆrB   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚhashlibÚsha256r   Úsha384r   Úsha512r   r   ÚcurvesÚNIST256pÚNIST384pÚNIST521pr   r]   r*   r   rG   rM   rR   rV   rX   rg   r/   rB   r)   r	   r	      sÆ   „ ñð �^‰^€FØ�^‰^€FØ�^‰^€Fð 	�—‘×%Ñ%Ø�—‘×%Ñ%Ø�—‘×%Ñ%ð€Ið 
�‰×	Ñ	 Ð(Ø	�‰×	Ñ	 Ð(Ø	�‰×	Ñ	 Ð(ð€Kò&FòPPò,
ò
òAòVò
*órB   r	   )rl   r   Újose.backends.baser   Újose.constantsr   Újose.exceptionsr   Ú
jose.utilsr   r   r	   r/   rB   r)   Ú<module>rx      s%   ðÛ ã å "Ý %Ý $ß 5ôK�õ KrB   