§
    tŠtj½*  ã                   óJ  — 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j                             ej        ¦  «          e j        d	¦  «        Z e j        d
¦  «        ZdZd„ ZdZ d„ Z!dd„Z"d„ Z# G d„ de¦  «        Z$dS )é    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  }} |°	| 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     úW/var/www/html/CA-Chatbot/venv/lib/python3.11/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    °d}d}|s{|t           k     rp|}||k     rVt          ||| ¦  «        }|dk    r4|| dz
  k    r+t          |d| ¦  «        dk    rt          |dz   | ¦  «        }	d}n|dz  }||k     °V|dz  }|s|t           k     °p|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   sN  € ð ˆq‰5�1‰9€Dð 	€AØ
ˆa‰%�1Š*ˆ*Ø�‰Fˆð ˆa‰%�1Š*ˆ*ð €GØ	€AØð ˜!Õ4Ò4Ð4Øˆà�$ŠhˆhÝ�q˜!˜Q‘<”<ˆDà�qŠyˆy˜T a¨!¡eš_˜_µ°T¸1¸a±´ÀAÒ1EÐ1Eõ ˜ ™ 1Ñ%Ô%�Ø�ØØ�‰FˆAð �$Šhˆhð 	
ˆQ‰ˆð ð ˜!Õ4Ò4Ð4ð ð OÝÐMÑNÔNÐNå�!�Q‰<Œ<�D€A€qØ�Š6ˆ6ˆ6ˆ6Ý�1�a�& $Ð'Ñ'Ô'�D€A€qØˆqˆ6€Mr   ÚPKCS8c                 ó`   — t          | t          j        ¦  «        }|                     |¦  «        S ©N)ÚRSAKeyr	   ÚRS256Úto_pem)ÚpemÚfmtÚkeys      r   Úpem_to_spkir5   b   s$   € Ý
�•jÔ&Ñ
'Ô
'€CØ�:Š:�c‰?Œ?Ðr   c                 óœ   — |                       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   sJ   € ð ×ÒÕ ?ÕBRÑ RÑSÔSð 9ÝÐ7Ñ8Ô8Ð8à•SÕ8Ñ9Ô9Ð;Ð;Ô<Ð<r   c                   óX   — 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dS )r/   zSHA-256zSHA-384zSHA-512c                 ó  — |t           j        vrt          d|z  ¦  «        ‚|t           j        v r"|t           j        k    rt          d|z  ¦  «        ‚t           j        | j        t           j        | j        t           j	        | j
        i                     |¦  «        | _        || _        t          |t          ¦  «        r|                      |¦  «        | _        d S t          |t$          j        t$          j        f¦  «        r	|| _        d S t          |t*          ¦  «        r|                     d¦  «        }t          |t.          ¦  «        �r3	 t$          j                             |¦  «        | _        �n
# t2          $ rý 	 t$          j                             |¦  «        | _        nÔ# t2          $ rÇ 	 t$          j                             |¦  «        | _        nž# t2          $ r‘ 	 t7          j        |d¦  «        }	 t;          |¦  «        }n# t<          $ r t?          |¦  «        }Y nw xY wt$          j                             |d¬¦  «        | _        n!# t2          $ r}t          |¦  «        ‚d }~ww xY wY nw xY wY nw xY wY nw xY wd S t          d|z  ¦  «        ‚)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_5r0   Ú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<   )Úselfr4   Ú	algorithmÚderÚ	pkcs1_keyr!   s         r   Ú__init__zRSAKey.__init__}   s§  € Ø�JœNÐ*Ð*ÝÐGÈ)ÑSÑTÔTÐTà�
Ô)Ð)Ð)¨i½:Ô;LÒ.LÐ.LÝÐHÈ9ÑTÑUÔUÐUõ Ô˜dœkÝÔ˜dœkÝÔ˜dœkð
÷ Š#ˆi‰.Œ.ð	 	Œð
 $ˆŒå�c�4Ñ Ô ð 	Ø!%×!2Ò!2°3Ñ!7Ô!7ˆDÔØˆFå�c�EœO­UÔ-=Ð>Ñ?Ô?ð 	Ø!$ˆDÔØˆFå�c�3ÑÔð 	&Ø—*’*˜WÑ%Ô%ˆCå�c�5Ñ!Ô!ñ 	ð.Ý%*¤_×%?Ò%?ÀÑ%DÔ%D�Ô"Ñ"øÝð .ð .ð .ð.Ý).¬×)OÒ)OÐPSÑ)TÔ)T�DÔ&Ð&øÝ!ð .ð .ð .ð.Ý-2Ô-=×-HÒ-HÈÑ-MÔ-M˜Ô*Ð*øÝ%ð .ð .ð .ð.Ý"+Ô"4°S¸.Ñ"IÔ"I˜CðTÝ,JÈ3Ñ,OÔ,O 	 	øÝ#.ð Tð Tð Tõ -OÈsÑ,SÔ,S 	 	 	ð	Tøøøõ
 27Ô1A×1LÒ1LÈYÐ_dÐ1LÑ1eÔ1e˜DÔ.Ð.øÝ)ð .ð .ð .Ý"*¨1¡+¤+Ð-øøøøð.øøøð /Ð.ð.øøøøøð.øøøøøð.øøøð& ˆFÝÐ@À3ÑFÑGÔGÐGs¢   Å$E, Å,
I3Å7$FÆI3Æ
I-Æ'$GÇI-Ç
I'ÇIÇ-G=Ç<IÇ=H	ÈIÈH	È)IÉI'É
I!	ÉI	ÉI!	É!I'É$I-É&I'É'I-É*I3É,I-É-I3É2I3c                 óò  ‡— ‰                      d¦  «        dk    s%t          d‰                      d¦  «        z  ¦  «        ‚t          ‰                      d¦  «        ¦  «        }t          ‰                      d¦  «        ¦  «        }d‰vrt          j        ||¬¦  «        S t          ‰                      d¦  «        ¦  «        }g d¢}t          ˆfd	„|D ¦   «         ¦  «        rmt          ˆfd
„|D ¦   «         ¦  «        st          d¦  «        ‚t          ‰d         ¦  «        }t          ‰d         ¦  «        }t          j        |||||¬¦  «        S t          |||¦  «        \  }}t          j        |||||¬¦  «        S )NÚktyrB   z1Incorrect key type. Expected: 'RSA', Received: %sr!   r    r"   )r!   r    )r(   r)   ÚdpÚdqÚqic              3   ó    •K  — | ]}|‰v V — Œ	d S r.   r   ©Ú.0r&   Újwk_dicts     €r   ú	<genexpr>z&RSAKey._process_jwk.<locals>.<genexpr>¼   s'   øè è € Ð7Ð7 Q�1˜�=Ð7Ð7Ð7Ð7Ð7Ð7r   c              3   ó    •K  — | ]}|‰v V — Œ	d S r.   r   rf   s     €r   ri   z&RSAKey._process_jwk.<locals>.<genexpr>¾   s'   øè è € Ð?Ð?¨Q˜1 ˜=Ð?Ð?Ð?Ð?Ð?Ð?r   z2Precomputed private key parameters are incomplete.r(   r)   )r!   r    r"   r(   r)   )r    r!   r"   r(   r)   )	rJ   r   r   rQ   rR   ÚanyÚallrS   r+   )r[   rh   r!   r    r"   Úextra_paramsr(   r)   s    `      r   rO   zRSAKey._process_jwk¯   s€  ø€ Ø�|Š|˜EÑ"Ô" eÒ+Ð+ÝÐNÐQY×Q]ÒQ]Ð^cÑQdÔQdÑdÑeÔeÐeå˜8Ÿ<š<¨Ñ,Ô,Ñ-Ô-ˆÝ˜8Ÿ<š<¨Ñ,Ô,Ñ-Ô-ˆà�hÐÐÝ”? Q¨!Ð,Ñ,Ô,Ð,å˜xŸ|š|¨CÑ0Ô0Ñ1Ô1ˆAØ7Ð7Ð7ˆLåÐ7Ð7Ð7Ð7¨,Ð7Ñ7Ô7Ñ7Ô7ð AåÐ?Ð?Ð?Ð?°,Ð?Ñ?Ô?Ñ?Ô?ð Yõ #Ð#WÑXÔXÐXå" 8¨C¤=Ñ1Ô1�Ý" 8¨C¤=Ñ1Ô1�ÝÔ'¨!¨q°A¸¸aÐ@Ñ@Ô@Ð@å1°!°Q¸Ñ:Ô:‘��1ÝÔ'¨!¨q°A¸¸aÐ@Ñ@Ô@Ð@r   c                 óB   — t          j        || j        | j        ¦  «        S r.   )rQ   ÚsignrP   rK   )r[   Úmsgs     r   ro   zRSAKey.signË   s   € ÝŒz˜#˜tÔ1°4´=ÑAÔAÐAr   c                 óÄ   — |                       ¦   «         st          j        d¦  «         	 t          j        ||| j        ¦  «         dS # t          j        j        $ r Y dS w xY w)NzKAttempting to verify a message with a private key. This is not recommended.TF)Ú	is_publicÚwarningsÚwarnrQ   ÚverifyrP   Úpkcs1ÚVerificationError)r[   rp   Úsigs      r   ru   zRSAKey.verifyÎ   sn   € Ø�~Š~ÑÔð 	lÝŒMÐjÑkÔkÐkð	ÝŒL˜˜c 4Ô#5Ñ6Ô6Ð6Ø�4øÝŒ{Ô,ð 	ð 	ð 	Ø�5�5ð	øøøs   ªA ÁAÁAc                 ó@   — t          | j        t          j        ¦  «        S r.   )rM   rP   rQ   rR   ©r[   s    r   rr   zRSAKey.is_public×   s   € Ý˜$Ô,­e¬oÑ>Ô>Ð>r   c                 óÊ   — t          | j        t          j        ¦  «        r| S |                      t          j        | j        j        | j        j        ¬¦  «        | j        ¦  «        S )N)r    r!   )rM   rP   rQ   rR   Ú	__class__r    r!   rL   rz   s    r   Ú
public_keyzRSAKey.public_keyÚ   sQ   € Ý�dÔ(­%¬/Ñ:Ô:ð 	ØˆKØ�~Š~�eœo°Ô0BÔ0DÈÔHZÔH\Ð]Ñ]Ô]Ð_cÔ_nÑoÔoÐor   r,   c                 óR  — t          | j        t          j        ¦  «        rv| j                             d¬¦  «        }|dk    r&t          |¦  «        }t          j        |d¬¦  «        }nÀ|dk    rt          j        |d¬¦  «        }n£t          d|›�¦  «        ‚|dk    rA| j                             d¬¦  «        }t          |¦  «        }t          j        |d	¬¦  «        }nJ|dk    r2| j                             d¬¦  «        }t          j        |d
¬¦  «        }nt          d|›�¦  «        ‚|S )Nr?   r@   r,   zPRIVATE KEY)Ú
pem_markerÚPKCS1zRSA PRIVATE KEYzInvalid pem format specified: z
PUBLIC KEYzRSA PUBLIC KEY)
rM   rP   rQ   rS   Ú
save_pkcs1r   rY   Úsave_pemr   r   )r[   Ú
pem_formatr]   Ú	pkcs8_derr2   Ú	pkcs1_ders         r   r1   zRSAKey.to_pemß   s=  € Ý�dÔ(­%Ô*:Ñ;Ô;ð 	RØÔ$×/Ò/°uÐ/Ñ=Ô=ˆCØ˜WÒ$Ð$Ý:¸3Ñ?Ô?�	ÝÔ(¨¸}ÐMÑMÔM��Ø˜wÒ&Ð&ÝÔ(¨Ð9JÐKÑKÔK��å Ð!PÀ*Ð!PÐ!PÑQÔQÐQà˜WÒ$Ð$Ø Ô.×9Ò9ÀÐ9ÑGÔG�	Ý9¸)ÑDÔD�	ÝÔ(¨¸|ÐLÑLÔL��Ø˜wÒ&Ð&ØÔ(×3Ò3¸5Ð3ÑAÔA�ÝÔ(¨Ð9IÐJÑJÔJ��å Ð!PÀ*Ð!PÐ!PÑQÔQÐQØˆ
r   c           
      óv  — |                       ¦   «         s|                      ¦   «         j        }n| j        }| j        dt	          |j        ¦  «                             d¦  «        t	          |j        ¦  «                             d¦  «        dœ}|                       ¦   «         �s|                     t	          | j        j	        ¦  «                             d¦  «        t	          | j        j
        ¦  «                             d¦  «        t	          | j        j        ¦  «                             d¦  «        t	          | j        j        ¦  «                             d¦  «        t	          | j        j        ¦  «                             d¦  «        t	          | j        j        ¦  «                             d¦  «        dœ¦  «         |S )NrB   ÚASCII)Úalgra   r    r!   )r"   r(   r)   rb   rc   rd   )rr   r}   rP   rL   r   r    Údecoder!   Úupdater"   r(   r)   Úexp1Úexp2Úcoef)r[   r}   Údatas      r   Úto_dictzRSAKey.to_dictõ   sq  € Ø�~Š~ÑÔð 	,ØŸšÑ*Ô*Ô8ˆJˆJàÔ+ˆJð ”?ØÝ 
¤Ñ-Ô-×4Ò4°WÑ=Ô=Ý 
¤Ñ-Ô-×4Ò4°WÑ=Ô=ð	
ð 
ˆð �~Š~ÑÔñ 
	Ø�KŠKå'¨Ô(:Ô(<Ñ=Ô=×DÒDÀWÑMÔMÝ'¨Ô(:Ô(<Ñ=Ô=×DÒDÀWÑMÔMÝ'¨Ô(:Ô(<Ñ=Ô=×DÒDÀWÑMÔMÝ(¨Ô);Ô)@ÑAÔA×HÒHÈÑQÔQÝ(¨Ô);Ô)@ÑAÔA×HÒHÈÑQÔQÝ(¨Ô);Ô)@ÑAÔA×HÒHÈÑQÔQðð ñ	ô 	ð 	ð ˆr   c                 óŠ   — |                       ¦   «         st          j        d¦  «         t          j        || j        ¦  «        }|S )NzLAttempting to encrypt a message with a private key. This is not recommended.)rr   rs   rt   rQ   ÚencryptrP   )r[   Úkey_dataÚwrapped_keys      r   Úwrap_keyzRSAKey.wrap_key  s@   € Ø�~Š~ÑÔð 	mÝŒMÐkÑlÔlÐlÝ”m H¨dÔ.@ÑAÔAˆØÐr   c                 ó€   — 	 t          j        || j        ¦  «        }n!# t          $ r}t	          |¦  «        ‚d }~ww xY w|S r.   )rQ   ÚdecryptrP   r   r
   )r[   r“   Úunwrapped_keyr!   s       r   Ú
unwrap_keyzRSAKey.unwrap_key  sN   € ð	Ý!œM¨+°tÔ7IÑJÔJˆMˆMøÝð 	ð 	ð 	Ý˜1‘+”+Ðøøøøð	øøøàÐs   ‚ �
;§6¶;N©r,   )Ú__name__Ú
__module__Ú__qualname__rE   rG   rI   r_   rO   ro   ru   rr   r}   r1   r�   r”   r˜   r   r   r   r/   r/   x   sË   € € € € € Ø€FØ€FØ€Fð0Hð 0Hð 0HðdAð Að Að8Bð Bð Bðð ð ð?ð ?ð ?ðpð pð pð
ð ð ð ð,ð ð ð6ð ð ðð ð ð ð r   r/   r™   )%Úbinasciirs   ÚrsarQ   Úrsa.pemr2   rY   Úpyasn1.errorr   r   Újose.backends._asn1r   r   r   Újose.backends.baser   Újose.constantsr	   Újose.exceptionsr
   r   Ú
jose.utilsr   r   Ú	SUPPORTEDÚremoveÚRSA_OAEPÚ	unhexlifyr8   r9   ÚRSA_ENCRYPTION_ASN1_OIDr   r   r+   r5   r<   r/   r   r   r   ú<module>r«      s¸  ðØ €€€Ø €€€à Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð
 #Ð "Ð "Ð "Ð "Ð "Ø %Ð %Ð %Ð %Ð %Ð %Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à 
Ô × Ò ˜JÔ/Ñ 0Ô 0Ð 0à"4 (Ô"4ðñ#ô #Ð ð &�8Ô% dÑ+Ô+Ð Ø0Ð ðð ð ð Ð ð(ð (ð (ðVð ð ð ð
=ð =ð =ð"cð cð cð cð cˆSñ cô cð cð cð cr   