Ë
    %V.j¾*  ã                   óV  — 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mZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ ej0                  j3                  ej4                  «        e j6                  d	«      Z e j6                  d
«      ZdZd„ ZdZ d„ Z!dd„Z"d„ Z# G d„ de«      Z$y)é    N)ÚPyAsn1Error)ÚDecryptionError)Úrsa_private_key_pkcs1_to_pkcs8Úrsa_private_key_pkcs8_to_pkcs1Úrsa_public_key_pkcs1_to_pkcs8)ÚKey)Ú
ALGORITHMS)ÚJWEErrorÚJWKError)Úbase64_to_longÚlong_to_base64Ú,308204BD020100300D06092A864886F70D0101010500Ú30z1.2.840.113549.1.1.1c                 ó   — |r
|| |z  }} |rŒ
| S )z¶Calculate the Greatest Common Divisor of a and b.

    Unless b==0, the result will have the same sign as b (so that when
    b is divided by it, the result comes out positive).
    © )ÚaÚbs     ú[C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\jose/backends/rsa_backend.pyÚ_gcdr   &   s   € ñ Ø�1�q‘5ˆ1ˆò à€Hó    iè  c                 ó�  — ||z  dz
  }|}|dz  dk(  r|dz  }|dz  dk(  rŒd}d}|sh|t         k  r_|}||k  rGt        ||| «      }|dk7  r*|| dz
  k7  r"t        |d| «      dk(  rt        |dz   | «      }	d}n|dz  }||k  rŒG|dz  }|s
|t         k  rŒ_|st        d«      ‚t	        | 	«      \  }
}|dk(  sJ ‚t        |	|
fd¬«      \  }	}
|	|
fS )z¡
    Compute factors p and q from the private exponent d. We assume that n has
    no more than two factors. This function is adapted from code in PyCrypto.
    é   é   r   FTz2Unable to compute factors p and q from exponent d.)Úreverse)Ú_MAX_RECOVERY_ATTEMPTSÚpowr   Ú
ValueErrorÚdivmodÚsorted)ÚnÚeÚdÚktotÚtÚspottedr   ÚkÚcandÚpÚqÚrs               r   Ú_rsa_recover_prime_factorsr+   7   s  € ð ˆq‰5�1‰9€Dð 	€AØ
ˆa‰%�1Š*Ø�‰Fˆð ˆa‰%�1‹*ð €GØ	€AÙ˜!Ô4Ò4Øˆà�$ŠhÜ�q˜!˜Q“<ˆDà�qŠy˜T a¨!¡eš_´°T¸1¸a³ÀAÒ1Eô ˜ ™ 1Ó%�Ø�ØØ�‰FˆAð �$‹hð 	
ˆQ‰ˆñ ˜!Ô4Ó4ñ ÜÐMÓNÐNä�!�Q‹<�D€A€qØ�Š6€Mˆ6Ü�1�a�& $Ô'�D€A€qØˆqˆ6€Mr   c                 óX   — t        | t        j                  «      }|j                  |«      S ©N)ÚRSAKeyr	   ÚRS256Úto_pem)ÚpemÚfmtÚkeys      r   Úpem_to_spkir4   b   s"   € Ü
�”j×&Ñ&Ó
'€CØ�:‰:�c‹?Ðr   c                 ót   — | j                  t        t        z   «      st        d«      ‚| t	        t        «      d S )zÁLegacy RSA private key PKCS8-to-PKCS1 conversion.

    .. warning::

        This is incorrect parsing and only works because the legacy PKCS1-to-PKCS8
        encoding was also incorrect.
    zInvalid private key encodingN)Ú
startswithÚLEGACY_INVALID_PKCS8_RSA_HEADERÚASN1_SEQUENCE_IDr   Úlen)Ú	pkcs8_keys    r   Ú"_legacy_private_key_pkcs8_to_pkcs1r;   g   s9   € ð ×ÑÔ ?ÔBRÑ RÔSÜÐ7Ó8Ð8à”SÔ8Ó9Ð;Ð<Ð<r   c                   óV   — e Zd ZdZdZdZd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zdd
„Zd„ Zd„ Zd„ Zy)r.   zSHA-256zSHA-384zSHA-512c                 óî  — |t         j                  vrt        d|z  «      ‚|t         j                  v r!|t         j                  k7  rt        d|z  «      ‚t         j
                  | j                  t         j                  | j                  t         j                  | j                  ij                  |«      | _        || _        t        |t        «      r| j!                  |«      | _        y t        |t$        j&                  t$        j(                  f«      r|| _        y t        |t*        «      r|j-                  d«      }t        |t.        «      r&	 t$        j&                  j1                  |«      | _        y t        d|z  «      ‚# t2        $ rî 	 t$        j&                  j5                  |«      | _        Y y # t2        $ rº 	 t$        j(                  j1                  |«      | _        n�# t2        $ r„ 	 t7        j8                  |d«      }	 t;        |«      }n# t<        $ r t?        |«      }Y nw xY wt$        j(                  j1                  |d¬«      | _        n# t2        $ r}t        |«      ‚d }~ww xY wY nw xY wY Y y w xY ww xY w)Nz*hash_alg: %s is not a valid hash algorithmz+alg: %s is not supported by the RSA backendzutf-8s   PRIVATE KEYÚDER©Úformatz'Unable to parse an RSA_JWK from key: %s) r	   ÚRSAr   ÚRSA_KWÚRSA1_5r/   ÚSHA256ÚRS384ÚSHA384ÚRS512ÚSHA512ÚgetÚhash_algÚ
_algorithmÚ
isinstanceÚdictÚ_process_jwkÚ_prepared_keyÚpyrsaÚ	PublicKeyÚ
PrivateKeyÚstrÚencodeÚbytesÚ
load_pkcs1r   Úload_pkcs1_openssl_pemÚ	pyrsa_pemÚload_pemr   r   r;   )Úselfr3   Ú	algorithmÚderÚ	pkcs1_keyr!   s         r   Ú__init__zRSAKey.__init__}   s-  € ØœJŸN™NÑ*ÜÐGÈ)ÑSÓTÐTàœ
×)Ñ)Ñ)¨i¼:×;LÑ;LÒ.LÜÐHÈ9ÑTÓUÐUô ×Ñ˜dŸk™kÜ×Ñ˜dŸk™kÜ×Ñ˜dŸk™kð
÷ ‰#ˆi‹.ð	 	Œð
 $ˆŒä�cœ4Ô Ø!%×!2Ñ!2°3Ó!7ˆDÔØä�cœEŸO™O¬U×-=Ñ-=Ð>Ô?Ø!$ˆDÔØä�cœ3ÔØ—*‘*˜WÓ%ˆCä�cœ5Ô!ð.Ü%*§_¡_×%?Ñ%?ÀÓ%D�Ô"ð( ÜÐ@À3ÑFÓGÐGøô) ò .ð.Ü).¯©×)OÑ)OÐPSÓ)T�DÕ&ð" øô! "ò .ð.Ü-2×-=Ñ-=×-HÑ-HÈÓ-M˜Õ*øÜ%ò .ð.Ü"+×"4Ñ"4°S¸.Ó"I˜CðTÜ,JÈ3Ó,O¡	øÜ#.ò Tô -OÈsÓ,S¢	ð	Túô
 27×1AÑ1A×1LÑ1LÈYÐ_dÐ1LÓ1e˜DÕ.øÜ)ò .Ü"*¨1£+Ð-ûð.úñ /ð.üð ð!.úð.ús–   Å
$E= Å=	I4Æ$F-Æ-	I0Æ7$GÇI0Ç	I)Ç&I
Ç=H	ÈI
È	H 	ÈI
ÈH 	È )I
É	I)É
	I#	ÉI	ÉI#	É#I)É&I0É(I)É)I0É,I4É/I0É0I4c                 óf  ‡— ‰j                  d«      dk(  st        d‰j                  d«      z  «      ‚t        ‰j                  d«      «      }t        ‰j                  d«      «      }d‰vrt        j                  ||¬«      S t        ‰j                  d«      «      }g d¢}t        ˆfd	„|D «       «      rUt        ˆfd
„|D «       «      st        d«      ‚t        ‰d   «      }t        ‰d   «      }t        j                  |||||¬«      S t        |||«      \  }}t        j                  |||||¬«      S )NÚktyrA   z1Incorrect key type. Expected: 'RSA', Received: %sr!   r    r"   )r!   r    )r(   r)   ÚdpÚdqÚqic              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr-   r   ©Ú.0r&   Újwk_dicts     €r   Ú	<genexpr>z&RSAKey._process_jwk.<locals>.<genexpr>¼   s   øè ø€ Ð7©, Q�1˜”=©,ùó   ƒc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr-   r   re   s     €r   rh   z&RSAKey._process_jwk.<locals>.<genexpr>¾   s   øè ø€ Ð?±,¨Q˜1 œ=±,ùri   z2Precomputed private key parameters are incomplete.r(   r)   )r!   r    r"   r(   r)   )r    r!   r"   r(   r)   )	rI   r   r   rP   rQ   ÚanyÚallrR   r+   )rZ   rg   r!   r    r"   Úextra_paramsr(   r)   s    `      r   rN   zRSAKey._process_jwk¯   s  ø€ Ø�|‰|˜EÓ" eÒ+ÜÐNÐQY×Q]ÑQ]Ð^cÓQdÑdÓeÐeä˜8Ÿ<™<¨Ó,Ó-ˆÜ˜8Ÿ<™<¨Ó,Ó-ˆà�hÑÜ—?‘? Q¨!Ô,Ð,ä˜xŸ|™|¨CÓ0Ó1ˆAÚ7ˆLäÓ7©,Ó7Ô7äÓ?±,Ó?Ô?ô #Ð#WÓXÐXä" 8¨C¡=Ó1�Ü" 8¨C¡=Ó1�Ü×'Ñ'¨!¨q°A¸¸aÔ@Ð@ä1°!°Q¸Ó:‘��1Ü×'Ñ'¨!¨q°A¸¸aÔ@Ð@r   c                 óX   — t        j                  || j                  | j                  «      S r-   )rP   ÚsignrO   rJ   )rZ   Úmsgs     r   ro   zRSAKey.signË   s   € Ü�z‰z˜#˜t×1Ñ1°4·=±=ÓAÐAr   c                 óØ   — | j                  «       st        j                  d«       	 t        j                  ||| j
                  «       y# t        j                  j                  $ r Y yw xY w)NzKAttempting to verify a message with a private key. This is not recommended.TF)Ú	is_publicÚwarningsÚwarnrP   ÚverifyrO   Úpkcs1ÚVerificationError)rZ   rp   Úsigs      r   ru   zRSAKey.verifyÎ   sS   € Ø�~‰~ÔÜ�M‰MÐjÔkð	Ü�L‰L˜˜c 4×#5Ñ#5Ô6ØøÜ�{‰{×,Ñ,ò 	Ùð	ús   §!A	 Á	A)Á(A)c                 óJ   — t        | j                  t        j                  «      S r-   )rL   rO   rP   rQ   ©rZ   s    r   rr   zRSAKey.is_public×   s   € Ü˜$×,Ñ,¬e¯o©oÓ>Ð>r   c                 ó   — t        | j                  t        j                  «      r| S | j	                  t        j                  | j                  j
                  | j                  j                  ¬«      | j                  «      S )N)r    r!   )rL   rO   rP   rQ   Ú	__class__r    r!   rK   rz   s    r   Ú
public_keyzRSAKey.public_keyÚ   sV   € Ü�d×(Ñ(¬%¯/©/Ô:ØˆKØ�~‰~œeŸo™o°×0BÑ0B×0DÑ0DÈ×HZÑHZ×H\ÑH\Ô]Ð_c×_nÑ_nÓoÐor   c                 óF  — t        | j                  t        j                  «      rq| j                  j	                  d¬«      }|dk(  r$t        |«      }t        j                  |d¬«      }|S |dk(  rt        j                  |d¬«      }|S t        d|›�«      ‚|dk(  r@| j                  j	                  d¬«      }t        |«      }t        j                  |d	¬«      }|S |dk(  r5| j                  j	                  d¬«      }t        j                  |d
¬«      }|S t        d|›�«      ‚)Nr>   r?   ÚPKCS8zPRIVATE KEY)Ú
pem_markerÚPKCS1zRSA PRIVATE KEYzInvalid pem format specified: z
PUBLIC KEYzRSA PUBLIC KEY)
rL   rO   rP   rR   Ú
save_pkcs1r   rX   Úsave_pemr   r   )rZ   Ú
pem_formatr\   Ú	pkcs8_derr1   Ú	pkcs1_ders         r   r0   zRSAKey.to_pemß   s+  € ä�d×(Ñ(¬%×*:Ñ*:Ô;Ø×$Ñ$×/Ñ/°uÐ/Ó=ˆCØ˜WÒ$Ü:¸3Ó?�	Ü×(Ñ(¨¸}ÔM�ð ˆ
ð ˜wÒ&Ü×(Ñ(¨Ð9JÔK�ð ˆ
ô !Ð#AÀ*ÀÐ!PÓQÐQà˜WÒ$Ø ×.Ñ.×9Ñ9ÀÐ9ÓG�	Ü9¸)ÓD�	Ü×(Ñ(¨¸|ÔL�ð ˆ
ð ˜wÒ&Ø×(Ñ(×3Ñ3¸5Ð3ÓA�Ü×(Ñ(¨Ð9IÔJ�ð ˆ
ô !Ð#AÀ*ÀÐ!PÓQÐQr   c           
      ó€  — | j                  «       s| j                  «       j                  }n| j                  }| j                  dt	        |j
                  «      j                  d«      t	        |j                  «      j                  d«      dœ}| j                  «       �s |j                  t	        | j                  j                  «      j                  d«      t	        | j                  j                  «      j                  d«      t	        | j                  j                  «      j                  d«      t	        | j                  j                  «      j                  d«      t	        | j                  j                  «      j                  d«      t	        | j                  j                  «      j                  d«      dœ«       |S )NrA   ÚASCII)Úalgr`   r    r!   )r"   r(   r)   ra   rb   rc   )rr   r}   rO   rK   r   r    Údecoder!   Úupdater"   r(   r)   Úexp1Úexp2Úcoef)rZ   r}   Údatas      r   Úto_dictzRSAKey.to_dictö   sH  € Ø�~‰~ÔØŸ™Ó*×8Ñ8‰Jà×+Ñ+ˆJð —?‘?ØÜ 
§¡Ó-×4Ñ4°WÓ=Ü 
§¡Ó-×4Ñ4°WÓ=ñ	
ˆð �~‰~ÕØ�K‰Kä'¨×(:Ñ(:×(<Ñ(<Ó=×DÑDÀWÓMÜ'¨×(:Ñ(:×(<Ñ(<Ó=×DÑDÀWÓMÜ'¨×(:Ñ(:×(<Ñ(<Ó=×DÑDÀWÓMÜ(¨×);Ñ);×)@Ñ)@ÓA×HÑHÈÓQÜ(¨×);Ñ);×)@Ñ)@ÓA×HÑHÈÓQÜ(¨×);Ñ);×)@Ñ)@ÓA×HÑHÈÓQñô	ð ˆr   c                 ó�   — | j                  «       st        j                  d«       t        j                  || j
                  «      }|S )NzLAttempting to encrypt a message with a private key. This is not recommended.)rr   rs   rt   rP   ÚencryptrO   )rZ   Úkey_dataÚwrapped_keys      r   Úwrap_keyzRSAKey.wrap_key  s5   € Ø�~‰~ÔÜ�M‰MÐkÔlÜ—m‘m H¨d×.@Ñ.@ÓAˆØÐr   c                 ó€   — 	 t        j                  || j                  «      }|S # t        $ r}t	        |«      ‚d }~ww xY wr-   )rP   ÚdecryptrO   r   r
   )rZ   r”   Úunwrapped_keyr!   s       r   Ú
unwrap_keyzRSAKey.unwrap_key  sA   € ð	Ü!ŸM™M¨+°t×7IÑ7IÓJˆMð Ðøô ò 	Ü˜1“+Ðûð	ús   ‚ $ ¤	=­8¸=N©r   )Ú__name__Ú
__module__Ú__qualname__rD   rF   rH   r^   rN   ro   ru   rr   r}   r0   r�   r•   r™   r   r   r   r.   r.   x   sH   „ Ø€FØ€FØ€Fò0HòdAò8Bòò?òpó
ò.ò6ór   r.   rš   )%Úbinasciirs   ÚrsarP   Úrsa.pemr1   rX   Úpyasn1.errorr   r   Újose.backends._asn1r   r   r   Újose.backends.baser   Újose.constantsr	   Újose.exceptionsr
   r   Ú
jose.utilsr   r   Ú	SUPPORTEDÚremoveÚRSA_OAEPÚ	unhexlifyr7   r8   ÚRSA_ENCRYPTION_ASN1_OIDr   r   r+   r4   r;   r.   r   r   r   Ú<module>r¬      s§   ðÛ Û ã Ý Ý $Ý ÷ñ õ
 #Ý %ß .ß 5à 
× Ñ × Ñ ˜J×/Ñ/Ô 0à"4 (×"4Ñ"4ðó#Ð ð &�8×%Ñ% dÓ+Ð Ø0Ð òð Ð ò(óVò
=ô"dˆSõ dr   