o
    ϋi                  	   @   s   d Z zddlZedd dd ZW dS  eefyE   ddlmZm	Z	 d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd ZY dS w )z5
Implementation of the SHAKE-256 algorithm for Ed448
    Nshake256@   c                 C   s   t d| |S )Nr   )hashlibnewdigestmsgoutlen r
   O/home/air/goalskill_sales/back/venv/lib/python3.10/site-packages/ecdsa/_sha3.py	shake_256
   s   r      )bytes_to_intint_to_bytesc                 C   s   t | ddS )Nlittle	byteorder)r   )sr
   r
   r   _from_le   s   r   c                 C   s   | |> | d| ? B d@ S )Nr   l    r
   )xbr
   r
   r   _rol   s   r   c           
      C   s  g d}g d}g d}t ddD ]}dgd }dgd }t ddD ]}||d   | | N  < q"t ddD ]}||d d  t||d	 d  d	A ||< q6t ddD ]}| |  ||d  N  < qSt ddD ]}t| | || | |< qg| |d  }t dt|d	 D ]}| ||d	   | || < q|| |d
 < t dddD ]@}| | | |d	  | |d  | |d  | |d  | | | |d	  g}t ddD ]}	||	 ||	d	   ||	d  @ A | ||	 < qq| d  || N  < qd S )N)r   r   >         $   ,      7         
   +      '   )   -                  =   8      )r   r   	      r.   r   r+               r'         r(   r)         r    r*            r!   )r   i  l          l          i                  l   	             l   	   l   
    l      l           l          l          l          l           i
  l   
       r=   l          r<   l         r   r6   r8   r#   r5   r   r+   r    )ranger   len)
r   	ROTATIONSPERMUTATIONRCrndcditjr
   r
   r   _sha3_transform   s@   

,




	,rL   c              	   C   sD   t dt|d D ]}| |  t|d| d| d  N  < q	d S )Nr   r)   )rA   rB   r   )r   r   rK   r
   r
   r   _reinterpret_to_words_and_xor   s   *rM   c                 C   s4   t  }tdt| D ]}|t| | ddd7 }q
|S )Nr   r)   r   r   )	bytearrayrA   rB   r   )wmprK   r
   r
   r   _reinterpret_to_octets   s   rQ   c                 C   s  d| }dgd }d}t | | }td|D ]}t|| |||   ||7 }t| qt| |d }	|	| t |	|k rJ|	d t |	|k s?|	t |	d   dO  < t||	 t| t }
t |
|k r||
t|d| 7 }
t| t |
|k sh|
d| S )z!Semi-generic SHA-3 implementationr)   r   r#   Nr      )rB   rA   rM   rL   rN   appendrQ   )r   r_wo_pe_br_br   idxblocksrI   moutr
   r
   r   	_sha3_raw   s,   




r\   c                 C   s   t | dd|S )Nr9      )r\   r   r
   r
   r   r      s   )__doc__r   r   r   r   	TypeError
ValueError_compatr   r   r   r   rL   rM   rQ   r\   r
   r
   r
   r   <module>   s     t 