
    \Ah                     ^    S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	J
r
   " S S\5      rg)    N)Key)
ALGORITHMS)JWKError)base64_to_longlong_to_base64c                      \ rS rSrSr\R                  r\R                  r	\R                  r\\R                  R                  \	\R                  R                  \\R                  R                   0r\R                  R                  S4\R                  R                  S4\R                  R                   S44rS rS rS rS	 rS
 rS rS rS rSrg)
ECDSAECKey   z
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                    U[         R                  ;  a  [        SU-  5      e[         R                  U R                  [         R
                  U R                  [         R                  U R                  0R                  U5      U l
        X l        U R                  R                  U R                  5      U l        [        U[        R                   [        R"                  45      (       a  Xl        g [        U[&        5      (       a  U R)                  U5      U l        g [        U[*        5      (       a  UR-                  S5      n[        U[.        5      (       a'   [        R"                  R1                  U5      nXl        g [        SU-  5      e! [        R2                  R4                   a"    [        R                   R1                  U5      n NT[6         a  n[        U5      eS nAff = f)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       bC:\Users\julio\Documents\inmobiliaria_backend\env\Lib\site-packages\jose/backends/ecdsa_backend.py__init__ECDSAECKey.__init__$   ss   JMM)G)STT dkkdkkdkk
 #i.	 	
 $^^''6
cE,,e.@.@ABB #c4   $ 1 1# 6Dc3**W%Cc5!!"((11#6 !$>DEE 99** 5&&//4 "qk!"s   F	 	=G!	G!GG!c                 N  ^ TR                  S5      S:X  d  [        STR                  S5      -  5      e[        U4S jS 5       5      (       d  [        S5      eST;   aM  [        TR                  S5      5      n[        R
                  R                  R                  X R                  5      $ [        TR                  S5      5      n[        TR                  S	5      5      n[        R                  R                  U R                  R                  X45      (       d  [        S
U SU S35      e[        R                  R                  U R                  R                  X4U R                  R                  5      n[        R
                  R                  R                  XPR                  5      $ )Nktyr   z0Incorrect key type. Expected: 'EC', Received: %sc              3   ,   >#    U  H	  oT;   v   M     g 7fN ).0kjwk_dicts     r*   	<genexpr>*ECDSAECKey._process_jwk.<locals>.<genexpr>P   s     <*;Q=*;s   )xycrvz Mandatory parameters are missingdr7   r8   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&   r4   r:   r7   r8   points    `    r*   r   ECDSAECKey._process_jwkL   s:   ||E"d*MPXP\P\]bPccdd<*;<<<=>>(? x||C01A::((==aLLx||C01Ax||C01A;;--djj.B.BAII2aS0EFGG''--djj.>.>djjFVFVWE::**<<UJJOO    c                 |    U R                   R                  XR                  [        R                  R
                  SS9$ )NF)hashfunc	sigencodeallow_truncate)r   signr   r   utilsigencode_string)r&   msgs     r*   rK   ECDSAECKey.signb   s6      %%--5::3N3N_d & 
 	
rF   c                      U R                   R                  X!U R                  [        R                  R
                  SS9$ ! [         a     gf = f)NF)rH   	sigdecoderJ   )r   verifyr   r   rL   sigdecode_stringr%   )r&   rN   sigs      r*   rR   ECDSAECKey.verifyg   sQ    	$$++4==EJJ<W<Whm ,    		s   =A   
AAc                 J    [        U R                  [        R                  5      $ r0   )r   r   r   r   r&   s    r*   	is_publicECDSAECKey.is_publico   s    $++U-?-?@@rF   c                     U R                  5       (       a  U $ U R                  U R                  R                  5       U R                  5      $ r0   )rX   	__class__r   get_verifying_keyr   rW   s    r*   
public_keyECDSAECKey.public_keyr   s8    >>K~~d//AACT__UUrF   c                 6    U R                   R                  5       $ r0   )r   to_pemrW   s    r*   r`   ECDSAECKey.to_pemw   s      ''))rF   c           	         U R                  5       (       d  U R                  R                  5       nOU R                  nS nU R                   H"  u  p4X0R                  R                  :X  d  M   UnM$     U(       d"  [        SU R                  R                   35      eU R                  R                  R                  nU R                  SU[        UR                  R                  R                  5       US9R                  S5      [        UR                  R                  R                  5       US9R                  S5      S.nU R                  5       (       d:  [        U R                  R                  R                  US9R                  S5      US'   U$ )NzCan't match r   )sizeASCII)algr.   r9   r7   r8   r:   )rX   r   r\   CURVE_NAMESr   KeyErrorbaselenr   r   pubkeyrD   r7   decoder8   privkeysecret_multiplier)r&   r]   r9   r'   valuekey_sizedatas          r*   to_dictECDSAECKey.to_dictz   sH   ~~**<<>J**J**JC''--- + \$*;*;*A*A)BCDD
 $$**22 ??
 1 1 7 7 9 9 ;(KRRSZ[
 1 1 7 7 9 9 ;(KRRSZ[
 ~~&t'8'8'@'@'R'RYabiijqrDIrF   )r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__hashlibsha256r   sha384r   sha512r   r   curvesNIST256pNIST384pNIST521pr   rf   r+   r   rK   rR   rX   r]   r`   rp   __static_attributes__r1   rF   r*   r	   r	      s     ^^F^^F^^F 	%%%%%%I 
		(			(			(K&FPP,

AV
*rF   r	   )rw   r   jose.backends.baser   jose.constantsr   jose.exceptionsr   
jose.utilsr   r   r	   r1   rF   r*   <module>r      s%      " % $ 5K KrF   