§
    tŠtj¿  ã                   óf   — 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dS )é    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dS )Ú
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
        ¦  «        | _        t          |t          j        t          j        f¦  «        r	|| _        d S t          |t&          ¦  «        r|                      |¦  «        | _        d S t          |t*          ¦  «        r|                     d¦  «        }t          |t.          ¦  «        r	 t          j                             |¦  «        }nU# t          j        j        $ r" t          j                             |¦  «        }Y n t6          $ r}t          |¦  «        ‚d }~ww xY w|| _        d S t          d|z  ¦  «        ‚)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       úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/jose/backends/ecdsa_backend.pyÚ__init__zECDSAECKey.__init__$   s¦  € Ø�JœMÐ)Ð)ÝÐGÈ)ÑSÑTÔTÐTõ Ô˜dœkÝÔ˜dœkÝÔ˜dœkð
÷ Š#ˆi‰.Œ.ð	 	Œð
 $ˆŒà”^×'Ò'¨¬Ñ6Ô6ˆŒ
å�c�EÔ,­eÔ.@ÐAÑBÔBð 	Ø #ˆDÔØˆFå�c�4Ñ Ô ð 	Ø $× 1Ò 1°#Ñ 6Ô 6ˆDÔØˆFå�c�3ÑÔð 	&Ø—*’*˜WÑ%Ô%ˆCå�c�5Ñ!Ô!ð 	ð"ÝÔ(×1Ò1°#Ñ6Ô6��øÝ”9Ô*ð 5ð 5ð 5ÝÔ&×/Ò/°Ñ4Ô4���Ýð "ð "ð "Ý˜q‘k”kÐ!øøøøð"øøøð !$ˆDÔØˆFåÐ>ÀÑDÑEÔEÐEs   Ä9E Å3F+Æ	F+ÆF&Æ&F+c                 ó>  ‡— ‰                      d¦  «        dk    s%t          d‰                      d¦  «        z  ¦  «        ‚t          ˆfd„dD ¦   «         ¦  «        st          d¦  «        ‚d‰v rLt          ‰                      d¦  «        ¦  «        }t          j        j                             || j        ¦  «        S t          ‰                      d¦  «        ¦  «        }t          ‰                      d	¦  «        ¦  «        }t          j         	                    | j        j
        ||¦  «        st          d
|› d|› d�¦  «        ‚t          j                             | j        j        ||| j        j        ¦  «        }t          j        j                             || j        ¦  «        S )NÚktyr   z0Incorrect key type. Expected: 'EC', Received: %sc              3   ó    •K  — | ]}|‰v V — Œ	d S ©N© )Ú.0ÚkÚjwk_dicts     €r)   ú	<genexpr>z*ECDSAECKey._process_jwk.<locals>.<genexpr>P   s'   øè è € Ð<Ð< Q�1˜�=Ð<Ð<Ð<Ð<Ð<Ð<ó    )ÚxÚyÚcrvz Mandatory parameters are missingÚdr5   r6   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   r8   r5   r6   Úpoints    `    r)   r   zECDSAECKey._process_jwkL   sm  ø€ Ø�|Š|˜EÑ"Ô" dÒ*Ð*ÝÐMÐPX×P\ÒP\Ð]bÑPcÔPcÑcÑdÔdÐdåÐ<Ð<Ð<Ð<Ð*;Ð<Ñ<Ô<Ñ<Ô<ð 	?ÝÐ=Ñ>Ô>Ð>à�(ˆ?ˆ?õ ˜xŸ|š|¨CÑ0Ô0Ñ1Ô1ˆAÝ”:Ô(×=Ò=¸aÀÄÑLÔLÐLå˜xŸ|š|¨CÑ0Ô0Ñ1Ô1ˆAÝ˜xŸ|š|¨CÑ0Ô0Ñ1Ô1ˆAå”;×-Ò-¨d¬jÔ.BÀAÀqÑIÔIð HÝÐF¨ÐFÐF¨aÐFÐFÐFÑGÔGÐGåÔ'×-Ò-¨d¬jÔ.>ÀÀ1ÀdÄjÔFVÑWÔWˆEÝ”:Ô*×<Ò<¸UÀDÄJÑOÔOÐOr4   c                 óf   — | 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   s3   € ØÔ ×%Ò%Ø˜$œ-µ5´:Ô3NÐ_dð &ñ 
ô 
ð 	
r4   c                 óŒ   — 	 | j                              ||| j        t          j        j        d¬¦  «        S # t          $ r Y dS w xY w)NF)rD   Ú	sigdecoderF   )r   Úverifyr   r   rH   Úsigdecode_stringr$   )r%   rJ   Úsigs      r)   rM   zECDSAECKey.verifyg   s^   € ð	ØÔ$×+Ò+Ø�S 4¤=½E¼JÔ<WÐhmð ,ñ ô ð øõ ð 	ð 	ð 	Ø�5�5ð	øøøs   ‚25 µ
AÁAc                 ó@   — t          | j        t          j        ¦  «        S r.   )r   r   r   r   ©r%   s    r)   Ú	is_publiczECDSAECKey.is_publico   s   € Ý˜$Ô+­UÔ-?Ñ@Ô@Ð@r4   c                 ó’   — |                       ¦   «         r| S |                      | j                             ¦   «         | j        ¦  «        S r.   )rR   Ú	__class__r   Úget_verifying_keyr   rQ   s    r)   Ú
public_keyzECDSAECKey.public_keyr   s>   € Ø�>Š>ÑÔð 	ØˆKØ�~Š~˜dÔ/×AÒAÑCÔCÀTÄ_ÑUÔUÐUr4   c                 ó4   — | j                              ¦   «         S r.   )r   Úto_pemrQ   s    r)   rX   zECDSAECKey.to_pemw   s   € ØÔ ×'Ò'Ñ)Ô)Ð)r4   c                 ó¶  — |                       ¦   «         s| j                             ¦   «         }n| j        }d }| j        D ]\  }}|| j        j        k    r|}Œ|st          d| j        j        › �¦  «        ‚| j        j        j        }| j        d|t          |j	        j
                             ¦   «         |¬¦  «                             d¦  «        t          |j	        j
                             ¦   «         |¬¦  «                             d¦  «        dœ}|                       ¦   «         s6t          | j        j        j        |¬¦  «                             d¦  «        |d<   |S )NzCan't match r   )ÚsizeÚASCII)Úalgr,   r7   r5   r6   r8   )rR   r   rU   ÚCURVE_NAMESr   ÚKeyErrorÚbaselenr   r   ÚpubkeyrB   r5   Údecoder6   ÚprivkeyÚsecret_multiplier)r%   rV   r7   r&   ÚvalueÚkey_sizeÚdatas          r)   Úto_dictzECDSAECKey.to_dictz   s^  € Ø�~Š~ÑÔð 	+ØÔ*×<Ò<Ñ>Ô>ˆJˆJàÔ*ˆJØˆØÔ*ð 	ð 	‰JˆC�Ø�dÔ'Ô-Ò-Ð-Ø�øØð 	EÝÐC¨$Ô*;Ô*AÐCÐCÑDÔDÐDð
 Ô$Ô*Ô2ˆð ”?ØØÝ 
Ô 1Ô 7× 9Ò 9Ñ ;Ô ;À(ÐKÑKÔK×RÒRÐSZÑ[Ô[Ý 
Ô 1Ô 7× 9Ò 9Ñ ;Ô ;À(ÐKÑKÔK×RÒRÐSZÑ[Ô[ð
ð 
ˆð �~Š~ÑÔð 	sÝ& tÔ'8Ô'@Ô'RÐYaÐbÑbÔb×iÒiÐjqÑrÔrˆD�‰Iàˆr4   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚhashlibÚsha256r   Úsha384r   Úsha512r   r   ÚcurvesÚNIST256pÚNIST384pÚNIST521pr   r]   r*   r   rG   rM   rR   rV   rX   rg   r/   r4   r)   r	   r	      s  € € € € € ðð ð Œ^€FØŒ^€FØŒ^€Fð 	�”Ô%Ø�”Ô%Ø�”Ô%ð€Ið 
ŒÔ	 Ð(Ø	ŒÔ	 Ð(Ø	ŒÔ	 Ð(ð€Kð&Fð &Fð &FðPPð Pð Pð,
ð 
ð 
ð
ð ð ðAð Að AðVð Vð Vð
*ð *ð *ðð ð ð ð r4   r	   )rl   r   Újose.backends.baser   Újose.constantsr   Újose.exceptionsr   Ú
jose.utilsr   r   r	   r/   r4   r)   ú<module>rx      s£   ðØ €€€à €€€à "Ð "Ð "Ð "Ð "Ð "Ø %Ð %Ð %Ð %Ð %Ð %Ø $Ð $Ð $Ð $Ð $Ð $Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ðKð Kð Kð Kð K�ñ Kô Kð Kð Kð Kr4   