o
    6Îh‹  ã                	   @   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
   ú_/var/www/html/construction_image-detection-poc/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 | ||	 < qÇqŸ| 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 Ø