
    ":hy7                         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 ddlmZ ddl	m
Z
mZmZ dd	l	mZmZ dd
l	mZmZ d dlmZ  G d de      Z G d de      Z G d d      Z G d d      Zy)    N   )ecdsa)der)rfc6979)NIST192p
find_curve)RSZeroError)string_to_numbernumber_to_string	randrange)sigencode_stringsigdecode_string)oid_ecPublicKeyencoded_oid_ecPublicKey)sha1c                       e Zd Zy)BadSignatureErrorN__name__
__module____qualname__     ]/var/www/html/turnos/venv/lib/python3.12/site-packages/ccxt/static_dependencies/ecdsa/keys.pyr   r          r   r   c                       e Zd Zy)BadDigestErrorNr   r   r   r   r   r      r   r   r   c                       e Zd ZddZeeefd       Zeeedfd       Zed        Z	ed        Z
eeefd       Zeeefd	       Zd
 Zd Zd ZdefdZefdZy)VerifyingKeyNc                     |st        d      y )Nz2Please use VerifyingKey.generate() to construct me	TypeErrorself_error__please_use_generates     r   __init__zVerifyingKey.__init__   s    * + , , +r   c                      | d      }||_         ||_        t        j                  |j                  |      |_        |j                  |j
                  _        |S )NTr%   )curvedefault_hashfuncr   
Public_key	generatorpubkeyorder)klasspointr)   hashfuncr$   s        r   from_public_pointzVerifyingKey.from_public_point   sH    6
 (&&u>!KKr   Tc                 r   |j                   }t        |      |j                  k(  sJ t        |      |j                  f       |d |j                   }||j                  d  }t        |      |j                  k(  sJ t        |      |j                  f       t        |      |j                  k(  sJ t        |      |j                  f       t	        |      }t	        |      }	|r#t        j                  |j                  ||	      sJ ddlm	}
 |
j                  |j                  ||	|      }| j                  |||      S )Nr   )ellipticcurve)r.   lenverifying_key_lengthbaselenr
   r   point_is_validr,    r4   Pointr)   r2   )r/   stringr)   r1   validate_pointr.   xsysxyr4   r0   s               r   from_stringzVerifyingKey.from_string%   s    Fu999 	9FU778	99NU]]#EMMN#2w%--'A#b'5==)AA'2w%--'A#b'5==)AA'R R ''A>>>###EKKAu=&&ueX>>r   c                 J    | j                  t        j                  |            S N)from_derr   unpem)r/   r;   s     r   from_pemzVerifyingKey.from_pem7   s    ~~cii/00r   c                    t        j                  |      \  }}|dk7  r+t        j                  dt        j                  |      z        t        j                  |      \  }}t        j
                  |      \  }}t        j
                  |      \  }}|dk7  r+t        j                  dt        j                  |      z        |t        k(  sJ |t        f       t        |      }	t        j                  |      \  }
}|dk7  r+t        j                  dt        j                  |      z        |
j                  d      sJ | j                  |
dd  |	      S )Nr   z"trailing junk after DER pubkey: %sz*trailing junk after DER pubkey objects: %sz*trailing junk after pubkey pointstring: %s       )r   remove_sequenceUnexpectedDERbinasciihexlifyremove_objectr   r   remove_bitstring
startswithrA   )r/   r;   s1emptys2point_str_bitstringoid_pkrest	oid_curver)   	point_strs              r   rD   zVerifyingKey.from_der;   sL    ''/	EC<##$H$,$4$4U$;%< = ="%"5"5b"9((,,,T2	5C<##$P$,$4$4U$;%< = =(C6?*CC(9%//0CD	5C<##$P$,$4$4U$;%< = =##K000  1266r   c                 b     ||      j                         }| j                  |||t        |      S )N)r1   	sigdecode)digest$from_public_key_recovery_with_digestr   )r/   	signaturedatar)   r1   rZ   r[   s          r   from_public_key_recoveryz%VerifyingKey.from_public_key_recoveryR   s4    
 $&&(99)VU]amv9wwr   c                    |j                   } |||j                               \  }}t        j                  ||      }	t	        |      }
|	j                  |
|      }|D cg c]  }| j                  |j                  ||      ! }}|S c c}w rC   )r,   r.   r   	Signaturer
   recover_public_keysr2   r0   )r/   r]   r[   r)   r1   rZ   r,   rssigdigest_as_numberpkspkverifying_keyss                 r   r\   z1VerifyingKey.from_public_key_recovery_with_digestZ   s    
 OO	IOO$561ooa#+F3%%&6	B X[[QS%11"((E8L[[ \s   $Bc                     | j                   j                  }t        | j                   j                  j	                         |      }t        | j                   j                  j                         |      }||z   S rC   )r-   r.   r   r0   r?   r@   )r$   r.   x_stry_strs       r   	to_stringzVerifyingKey.to_stringj   s[     !! !2!2!4!4!6> !2!2!4!4!6>u}r   c                 J    t        j                  | j                         d      S )Nz
PUBLIC KEYr   topemto_derr$   s    r   to_pemzVerifyingKey.to_pems   s    yy55r   c                    | j                   j                  }t        | j                   j                  j	                         |      }t        | j                   j                  j                         |      }d|z   |z   }t        j                  t        j                  t        | j                  j                        t        j                  |            S )NrH   )r-   r.   r   r0   r?   r@   r   encode_sequencer   r)   encoded_oidencode_bitstring)r$   r.   rk   rl   rX   s        r   rq   zVerifyingKey.to_derv   s    !! !2!2!4!4!6> !2!2!4!4!6>%'%/	""3#6#67N7;zz7M7M$O#&#7#7	#BD 	Dr   c                 t    |xs | j                   } ||      j                         }| j                  |||      S rC   )r*   r[   verify_digest)r$   r]   r^   r1   rZ   r[   s         r   verifyzVerifyingKey.verify   s9    4t44$&&(!!)VY??r   c                 n   t        |      | j                  j                  kD  r0t        d| j                  j                  dt        |      z  fz        t        |      } ||| j                  j                        \  }}t        j                  ||      }| j                  j                  ||      ryt        )N1this curve (%s) is too short for your digest (%d)   T)r5   r)   r7   r   namer
   r-   r.   r   ra   verifiesr   )r$   r]   r[   rZ   numberrc   rd   re   s           r   ry   zVerifyingKey.verify_digest   s    v;+++  "8;?::??;<s6{?;L"L M M "&)DKK$5$561ooa#;;,r   rC   )r   r   r   r&   classmethodr   r   r2   rA   rF   rD   r   r_   r\   rm   rs   rq   rz   ry   r   r   r   r   r      s    ,
 .6   )1D#'? ?" 1 1 7 7, IMYi x x W[gw  6D 04?O @
 :J 
 r   r   c                       e Zd ZddZeedefd       Zeeefd       Zeeefd       Z	eefd       Z
eefd       Zd Zd	 Zd
 Zd ZdedfdZdedfdZddedfdZdedfdZddZy)
SigningKeyNc                     |st        d      y )Nz0Please use SigningKey.generate() to construct mer!   r#   s     r   r&   zSigningKey.__init__   s    *NOO +r   c                 T    t        |j                  |      }| j                  |||      S rC   )r   r.   from_secret_exponent)r/   r)   entropyr1   secexps        r   generatezSigningKey.generate   s'    5;;0))&%BBr   c                     | d      }||_         ||_        |j                  |_        |j                  }d|cxk  r|k  sJ  J |j                  |z  }t        j                  |j                  |      }||_        t        j                  |||      |_	        t        j                  ||      |_        ||j                  _        |S )NTr(   r   )r)   r*   r7   r.   r,   r   r+   r   r2   verifying_keyPrivate_keyprivkey)r/   r   r)   r1   r$   npubkey_pointr-   s           r   r   zSigningKey.from_secret_exponent   s    6
 (}}KKFQ/!!%//<@);;L%<DF((8r   c                     t        |      |j                  k(  sJ t        |      |j                  f       t        |      }| j                  |||      S rC   )r5   r7   r
   r   )r/   r;   r)   r1   r   s        r   rA   zSigningKey.from_string   sI    6{emm+Ic&k5==-II+!&)))&%BBr   c                     t        |t              r|j                         }||j                  d      d  }| j	                  t        j                  |      |      S )Ns   -----BEGIN EC PRIVATE KEY-----)
isinstancestrencodeindexrD   r   rE   )r/   r;   r1   privkey_pems       r   rF   zSigningKey.from_pem   sJ     fc"]]_FV\\*KLMN~~cii4h??r   c                    t        j                  |      \  }}|dk7  r+t        j                  dt        j                  |      z        t        j
                  |      \  }}|dk7  rt        j                  d|z        t        j                  |      \  }}t        j                  |      \  }}}|dk7  rt        j                  d|z        t        j                  |      \  }	}|dk7  r+t        j                  dt        j                  |      z        t        |	      }
t        |      |
j                  k  rd|
j                  t        |      z
  z  |z   }| j                  ||
|      S )	Nr   z#trailing junk after DER privkey: %sr   z,expected '1' at start of DER privkey, got %dr   z%expected tag 0 in DER privkey, got %dz-trailing junk after DER privkey curve_oid: %s    )r   rJ   rK   rL   rM   remove_integerremove_octet_stringremove_constructedrN   r   r5   r7   rA   )r/   r;   r1   rd   rR   oneprivkey_strtagcurve_oid_str	curve_oidr)   s              r   rD   zSigningKey.from_der   sn    &&v.5C<##$I$,$4$4U$;%< = =##A&Q!8## %.03%4 5 5003Q # 6 6q 9]A!8## %.03%4 5 5,,];	5C<## %46>6F6Fu6M%N O O9% {emm+!U]]S5E%EFTK  eX>>r   c                 r    | j                   j                  }t        || j                   j                        }|S rC   )r   secret_multiplierr   r.   )r$   r   rd   s      r   rm   zSigningKey.to_string   s,    //VT\\%7%78r   c                 J    t        j                  | j                         d      S )NzEC PRIVATE KEYro   rr   s    r   rs   zSigningKey.to_pem   s    yy(899r   c                 z   d| j                         j                         z   }t        j                  t        j                  d      t        j
                  | j                               t        j                  d| j                  j                        t        j                  dt        j                  |                  S )NrH   r   r   )
get_verifying_keyrm   r   ru   encode_integerencode_octet_stringencode_constructedr)   rv   rw   )r$   
encoded_vks     r   rq   zSigningKey.to_der   s     !4#9#9#;#E#E#GG
""3#5#5a#8#&#:#:4>>;K#L#&#9#9!TZZ=S=S#T#&#9#9!S=Q=QR\=]#^% 	%r   c                     | j                   S rC   )r   rr   s    r   r   zSigningKey.get_verifying_key   s    !!!r   r   c                 x    |xs | j                   } ||      j                         }| j                  ||||      S )N)r1   	sigencodeextra_entropy)r*   r[   sign_digest_deterministic)r$   r^   r1   r   r   r[   s         r   sign_deterministiczSigningKey.sign_deterministic   sH     4t44$&&(--X' . ) 	)r   c                 *   | j                   j                  }d }d}	 t        j                  | j                  j
                  j                         |||||      }	 | j                  |||      \  }	}
}}	  ||	|
||      S # t        $ r |dz  }Y nw xY wx)z
        Calculates 'k' from data itself, removing the need for strong
        random generator and producing deterministic (reproducible) signatures.
        See RFC 6979 for more details.
        c                     | |||fS rC   r   )rc   rd   r.   vs       r   
simple_r_sz8SigningKey.sign_digest_deterministic.<locals>.simple_r_s  s    a>!r   r   )	retry_genr   )r   kr   )	r   r   r   
generate_kr)   r,   r.   sign_digestr	   )r$   r[   r1   r   r   r   r   r   r   rc   rd   r.   r   s                r   r   z$SigningKey.sign_digest_deterministic  s     //	" 	""

$$**,fh#=BA!%!1!1&JRS!1!T1eQ Aua((  Q	 s   B   BBc                 v    |xs | j                   } ||      j                         }| j                  ||||      S )a@  
        hashfunc= should behave like hashlib.sha1 . The output length of the
        hash (in bytes) must not be longer than the length of the curve order
        (rounded up to the nearest byte), so using SHA256 with nist256p is
        ok, but SHA256 with nist192p is not. (In the 2**-96ish unlikely event
        of a hash output larger than the curve order, the hash will
        effectively be wrapped mod n).

        Use hashfunc=hashlib.sha1 to match openssl's -ecdsa-with-SHA1 mode,
        or hashfunc=hashlib.sha256 for openssl-1.0.0's -ecdsa-with-SHA256.
        )r*   r[   r   )r$   r^   r   r1   r   r   hs          r   signzSigningKey.sign!  s=     4t44TN!!#7Iq99r   c                 (   t        |      | j                  j                  kD  r0t        d| j                  j                  dt        |      z  fz        t        |      }| j                  |||      \  }}} |||| j                  j                  |      S )Nr|   r}   )	r5   r)   r7   r   r~   r
   sign_numberr   r.   )	r$   r[   r   r   r   r   rc   rd   r   s	            r   r   zSigningKey.sign_digest2  s    v;+++  "8;?::??;<s6{?;L"L M M "&)""67A61aAt||11155r   c                     | j                   j                  }||}nt        ||      }d|cxk  r|k  sJ  J | j                   j                  ||      }|j                  |j
                  |j                  fS )Nr   )r   r.   r   r   rc   rd   recovery_param)r$   r   r   r   r.   _kre   s          r   r   zSigningKey.sign_number;  so    "" =B5'*BBll+uuceeS////r   rC   )NN)r   r   r   r&   r   r   r   r   r   rA   rF   rD   rm   rs   rq   r   r   r   r   r   r   r   r   r   r   r   r      s    P &t C C 2:T    )1D C C
 )- @ @ )- $? $?L
:%" 15%5),) :>,<03)4 "&@PTX :" +/:Jd 60r   r   )rL   r9   r   r   r   curvesr   r   r	   utilr
   r   r   r   r   r   r   hashlibr   	Exceptionr   r   r   r   r   r   r   <module>r      sW        (  ? ? 4 : 		 		Y 	x  x v{0 {0r   