
    (i              	          d Z ddlZddlZddlmZmZmZ ddlmZm	Z	 ddl
mZmZmZmZmZmZmZ ddlmZ ddlmZ dd	lmZmZm Z m!Z!m"Z"m#Z#m$Z$ d
e%dee&e&f   fdZ'dee&e&f   de%fdZ(de%de%fdZ)de%de%fdZ*de%de%fdZ+ejX                  fde%de%deg ef   de&fdZ-de%de%dee&e&e&f   fdZ.de%dee&e&f   d
e%de/fdZ0de%dee&e&e&f   de%fdZ1y)zB
Functions lifted from https://github.com/vbuterin/pybitcointools
    N)AnyCallableTuple)big_endian_to_intint_to_big_endian)SECPK1_ASECPK1_BSECPK1_GSECPK1_NSECPK1_P	SECPK1_Gx	SECPK1_Gy)BadSignature)pad32   )fast_addfast_multiplyfrom_jacobianinvis_identityjacobian_addjacobian_multiplypublic_key_bytesreturnc                 B    t        | dd       }t        | dd       }||fS )Nr       @   )r   )r   leftrights      O/var/www/br/venv/lib/python3.12/site-packages/eth_keys/backends/native/ecdsa.pydecode_public_keyr!   ,   s0    -a34D.r"56E;    raw_public_keyc                 z    | \  }}dj                  t        t        |            t        t        |            f      S )Nr"   )joinr   r   )r#   r   r   s      r    encode_raw_public_keyr&   2   s=     KD%88#D)*#E*+	
 r"   private_key_bytesc                 z    t        |       }|t        k\  rt        d      t        t        |      }t        |      }|S )NzInvalid privkey)r   N	Exceptionr   Gr&   )r'   private_key_as_numr#   r   s       r    private_key_to_public_keyr-   <   s@    *+<=Q)**"1&89N,^<r"   uncompressed_public_key_bytesc                 f    t        |       \  }}|dz  dk(  rd}nd}|t        t        |            z   S )N   r         )r!   r   r   )r.   xyprefixs       r    compress_public_keyr6   G   s<    :;DAq1uzE+A.///r"   compressed_public_key_bytesc                 P   t        |       dk7  rt        d      | d   }|dvrt        d      t        | dd        }|dz  t        |z  z   t        z   t
        z  }t        |t
        dz   dz  t
              }|dk(  r|dz  dk(  s|dk(  r|dz  dk(  r| t
        z  }n|}t        ||f      S )	N!   zInvalid compressed public keyr   )r0      r   r:      r0   )len
ValueErrorr   ABPpowr&   )r7   r5   r3   	y_squaredy_absr4   s         r    decompress_public_keyrD   P   s    
&'2-899(+FV8995ab9:AAA!Q&I	QUqL1-E!	QFaKEAINVqL !Q((r"   msg_hash	digest_fnc                    d}d}t        j                  ||dz   |z   | z   |      j                         }t        j                  |||      j                         }t        j                  ||dz   |z   | z   |      j                         }t        j                  |||      j                         }t        j                  |||      j                         }	t        |	      }
|
S )Ns    s                                           )hmacnewdigestr   )rE   r'   rF   v_0k_0k_1v_1k_2v_2kbks              r    deterministic_generate_krU   d   s    
 C
C
((S7]..99fh  ((3Y
'
.
.
0C
((S7]..99fh  ((3Y
'
.
.
0C	#sI	&	-	-	/B"AHr"   c                 N   t        |       }t        t        |t        z              }t	        ||      }t        t        |      \  }}t        |t              ||t        |      z  z   z  t        z  }d|dz  |dz  t        k  rdndz  z   }|dz  t        k  r|nt        |z
  }	|dz
  ||	fS )N   r0   r   r   )r   r   r   r)   rU   r   r+   r   )
rE   r'   zmsg_hash_mod_nrT   rr4   s_rawvss
             r    ecdsa_raw_signr^   z   s    (#A,QU34N 1BCAADAq1IQ!23D!EEEFJE
q1ueai!m34AQAIAr61a<r"   rsc                    t        |      }|\  }}t        |t              }t        |       }||z  t        z  ||z  t        z  }	}t	        t        t        |      t        ||	            \  }
}t        ||
k(  xr |t        z  xr	 |t        z        S )N)r!   r   r)   r   r   r   r+   bool)rE   r_   r   r#   rZ   r]   wrX   u1u2r3   r4   s               r    ecdsa_raw_verifyre      s     ''78NDAqAq	A(#AUQYA	Banb)DAq Q.AE.A//r"   vrsc                 d   |\  }}}|dvrt        d| d      |dz  }|}||z  |z  t        |z  z   t        z   t        z  }t	        |t        dz   dz  t              }|dz  |dz  z  r|nt        |z
  }|||z  z
  t        z  dk7  s|t
        z  r	|t
        z  st        d	      t        |       }	t        t        t        dft
        |	z
  t
        z        }
t        ||df|      }t        |
|      }t        |t        |t
                    }t        |      rt        d
      t        |      }t        |      S )N)r   r   zvalue of v, aka y-parity, was z, must be either 0 or 1rW   r   r;   r0   r   zInvalid signatureInvalidSignature)r   r>   r?   r@   rA   r)   r   r   GxGyr   r   r   r   r&   )rE   rf   r\   rZ   r]   r3   	xcubedaxbbetar4   rX   GzXYQrQr#   s                  r    ecdsa_raw_recoverrq      s4   GAq!;A3>UVWWGA	AQQU"Q&!+Iy1q5Q,*DAq q4xA 	AEQ!#AE1q5.//(#A	BA;Q!	4B	Aq!9a	(B	b"	B"c!Qi(A1~-.."1%N 00r"   )2__doc__hashlibrJ   typingr   r   r   	eth_utilsr   r   eth_keys.constantsr   r>   r	   r?   r
   r+   r   r)   r   r@   r   ri   r   rj   eth_keys.exceptionsr   eth_keys.utils.paddingr   jacobianr   r   r   r   r   r   r   bytesintr!   r&   r-   r6   rD   sha256rU   r^   ra   re   rq    r"   r    <module>r~      sk     
     %S/ %S/ e  5 0u 0 0)u ) ). $+>> C  		,U u sCQT}AU 00sCx0<A0	0$1 1E#sC-,@ 1U 1r"   