
    (i	              	          d dl mZ d dlmZmZmZmZ	 de
de
de
fdZdee
e
f   dee
e
e
f   fdZdee
e
e
f   dee
e
e
f   fd	Zdee
e
e
f   d
ee
e
e
f   dee
e
e
f   fdZdee
e
e
f   dee
e
f   fdZdee
e
e
f   de
dee
e
e
f   fdZdee
e
f   de
dee
e
f   fdZdee
e
f   dee
e
f   dee
e
f   fdZdee
e
e
f   defdZy)    )Tuple)IDENTITY_POINTSSECPK1_ASECPK1_NSECPK1_Panreturnc                     | dk(  ryd\  }}| |z  |}}|dkD  r&||z  }|||z  z
  |||z  z
  }}||||f\  }}}}|dkD  r&||z  S )Nr   )   r   r    )	r   r	   lmhmlowhighrnmnews	            R/var/www/br/venv/lib/python3.12/site-packages/eth_keys/backends/native/jacobian.pyinvr      sv    AvFBAqC
'CKrAv+tcAg~CR,CT ' 6M    pc                     | d   | d   df}|S )Nr   r   r   )r   os     r   to_jacobianr      s    	
1qtQAHr   c                    | d   sy| d   dz  t         z  }d| d   z  |z  t         z  }d| d   dz  z  t        | d   dz  z  z   t         z  }|dz  d|z  z
  t         z  }|||z
  z  d|dz  z  z
  t         z  }d| d   z  | d   z  t         z  }|||fS )Nr   )r   r   r         r         )PA)r   ysqSMnxnynzs          r   jacobian_doubler)      s    Q4Q419/C	
QqTC1A	
QqTQYQqTQY	&!+A
Q$Q,!	B
q2v,S!V
#q	(B
ad(QqT/Q	BB<r   qc                    | d   s|S |d   s| S | d   |d   dz  z  t         z  }|d   | d   dz  z  t         z  }| d   |d   dz  z  t         z  }|d   | d   dz  z  t         z  }||k(  r||k7  ryt        |       S ||z
  }||z
  }||z  t         z  }||z  t         z  }	||z  t         z  }
|dz  |	z
  d|
z  z
  t         z  }||
|z
  z  ||	z  z
  t         z  }|| d   z  |d   z  t         z  }|||fS )Nr   r   r   r   r   r   r   )r!   r)   )r   r*   U1U2S1S2HRH2H3U1H2r&   r'   r(   s                 r   jacobian_addr6   *   s9    Q4Q4
A$1
a	B
A$1
a	B
A$1
a	B
A$1
a	B	Rx8q!!
RA
RA
a%1B
b&ABGq=D
Q$)a$h
!	#B
tby/BG
#q	(B
ad(QqT/Q	BB<r   c                 p    t        | d   t              }| d   |dz  z  t        z  | d   |dz  z  t        z  fS )Nr   r   r   r   )r   r!   )r   zs     r   from_jacobianr9   D   s>    AaD!AqTAqD[A!q!tq011r   c           	         | d   dk(  s|dk(  ry|dk(  r| S |dk  s	|t         k\  rt        | |t         z        S |dz  dk(  rt        t        | |dz              S |dz  dk(  r"t        t        t        | |dz              |       S t	        d      )Nr   r   r,   r   z Invariant: Unreachable code path)Njacobian_multiplyr)   r6   	Exceptionr   r	   s     r   r<   r<   I   s    tqyAFAv1uQ AE**	A!|0AF;<<
a%AO,=aa,HI1MM:;;r   c                 >    t        t        t        |       |            S N)r9   r<   r   r>   s     r   fast_multiplyrA   X   s    *;q>1=>>r   bc                 P    t        t        t        |       t        |                  S r@   )r9   r6   r   )r   rB   s     r   fast_addrD   \   s    k!nk!nEFFr   c                     | t         v S r@   )r   )r   s    r   is_identityrF   `   s    r   N)typingr   eth_keys.constantsr   r   r"   r   r;   r   r!   intr   r   r)   r6   r9   r<   rA   rD   boolrF   r   r   r   <module>rK      s   	3 	3 	3 	5c? uS#s]'; 
	uS#s]+ 	c3m0D 	S#s] %c3m 4
3S=42U3S=) 2eCHo 2
<sC}- <# <%S#:N <?U38_ ? ?sCx ?Gc3h GE#s(O Gc3h G 5c3'  D  r   