B
    @)H[œ  ã               @   s–  d dl Z d dlZy$e dZdd„ Zdd„ Zdd„ ZW n( ek
r\   d	ZeZeZd
d„ ZY nX dZ	dd d Z
dd d Zdd„ Zdd„ Zdd„ Zdedƒ Zede
d d e
ƒZdd„ Zdedƒ ZeeƒZee
 ee
 gZdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Z d6d7„ Z!d8d9„ Z"d:d;„ Z#e
Z$d<Z%d=d>„ Z&d?d@„ Z'dJdBdC„Z(dKdDdE„Z)dFdG„ Z*dHdI„ Z+dS )Lé    NFc             C   s   d  dd„ | D ƒ¡S )z(Convert array of integers to byte stringÚ c             s   s   | ]}t |ƒV  qd S )N)Úchr)Ú.0Úx© r   úYC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\wheel\wheel\signatures\djbec.pyú	<genexpr>   s    zasbytes.<locals>.<genexpr>)Újoin)Úbr   r   r   Úasbytes   s    r   c             C   s
   d  | ¡S )z%Convert array of bytes to byte stringr   )r	   )r
   r   r   r   Ú	joinbytes   s    r   c             C   s   t | |d  ƒ|d ? d@ S )zReturn i'th bit of bytestring hé   é   )Úord)ÚhÚir   r   r   Úbit   s    r   Tc             C   s   | |d  |d ? d@ S )Nr   r   r   )r   r   r   r   r   r       s    é   é   éÿ   é   éü   l	   íSë9i“@eMó^¨w|o c             C   s   t  | ¡ ¡ S )N)ÚhashlibÚsha512Údigest)Úmr   r   r   ÚH(   s    r   c             C   s<   |dkrdS t | |d |ƒd | }|d@ r8||  | }|S )Nr   r   r   )Úexpmod)r
   Úer   Útr   r   r   r   ,   s    r   c             C   s   t | td tƒS )Nr   )r   Úq)r   r   r   r   Úinv9   s    r!   i¿$þÿiBÛ r   é   c             C   sl   | |  d t t|  |  d ƒ }t|td d tƒ}|| | t dkrT|t t }|d dkrht| }|S )Nr   é   r   r   r   )r!   Údr   r    ÚI)ÚyZxxr   r   r   r   ÚxrecoverA   s     r'   é   c             C   sÌ   | \}}}}|\}}}}	|| ||  t  }
|| ||  t  }|d |	 t  }|d | t  }|| t  }||
 t  }||
 t  }|| t  }|| t  }|| t  }|| t  }|| t  }||||fS )Nr   )r    )Zpt1Zpt2ÚX1ÚY1ÚZ1ZT1ZX2ZY2ZZ2ZT2ÚAÚBÚCÚDÚEÚFÚGr   ÚX3ÚY3ÚZ3ÚT3r   r   r   Úxpt_adde   s    r7   c             C   s²   | \}}}}|| }|| }d| | }| t  }|| t  }	|	|	 | | t  }
|| t  }|| t  }|| t  }|
| t  }|| t  }|| t  }|
| t  }||||fS )Nr   )r    )Úptr)   r*   r+   Ú_r,   r-   r.   r/   ÚJr0   r2   r1   r   r3   r4   r5   r6   r   r   r   Ú
xpt_doublew   s    
r;   c             C   s   | \}}||d|| t  fS )Nr   )r    )r8   r   r&   r   r   r   Úpt_xform‰   s    r<   c             C   s,   | \}}}}|t |ƒ t |t |ƒ t fS )N)r!   r    )r8   r   r&   Úzr9   r   r   r   Ú
pt_unxformŽ   s    r>   c             C   s8   |dkrt dƒS tt| |d? ƒƒ}|d@ r4t|| ƒS |S )Nr   )r   r   r   )r<   r;   Úxpt_multr7   )r8   Únr9   r   r   r   r?   “   s    r?   c             C   s   t tt| ƒ|ƒƒS )N)r>   r?   r<   )r8   r   r   r   r   Ú
scalarmult›   s    rA   c                s8   ‡fdd„t tƒD ƒ‰ ‡ fdd„t td ƒD ƒ}t|ƒS )Nc                s   g | ]}ˆ |? d @ ‘qS )r   r   )r   r   )r&   r   r   ú
<listcomp>    s    zencodeint.<locals>.<listcomp>c                s(   g | ] ‰ t ‡‡ fd d„tdƒD ƒƒ‘qS )c                s    g | ]}ˆ ˆd  |  |> ‘qS )r   r   )r   Új)Úbitsr   r   r   rB   ¡   s    z(encodeint.<locals>.<listcomp>.<listcomp>r   )ÚsumÚrange)r   )rD   )r   r   rB   ¡   s   r   )rF   r
   r   )r&   r   r   )rD   r&   r   Ú	encodeintŸ   s    
rG   c                sV   | d }| d ‰‡fdd„t td ƒD ƒ|d@ g ‰ ‡ fdd„t td ƒD ƒ}t|ƒS )Nr   r   c                s   g | ]}ˆ |? d @ ‘qS )r   r   )r   r   )r&   r   r   rB   ©   s    zencodepoint.<locals>.<listcomp>c                s(   g | ] ‰ t ‡‡ fd d„tdƒD ƒƒ‘qS )c                s    g | ]}ˆ ˆd  |  |> ‘qS )r   r   )r   rC   )rD   r   r   r   rB   ª   s    z*encodepoint.<locals>.<listcomp>.<listcomp>r   )rE   rF   )r   )rD   )r   r   rB   ª   s   r   )rF   r
   r   )ÚPr   r   r   )rD   r&   r   Úencodepoint¦   s    $
rI   c                sF   t | ƒ‰ dtd  t‡ fdd„tdtd ƒD ƒƒ }tt|ƒ}t|ƒS )Nr   c             3   s    | ]}d | t ˆ |ƒ V  qdS )r   N)r   )r   r   )r   r   r   r   ±   s    zpublickey.<locals>.<genexpr>r#   )r   r
   rE   rF   rA   r-   rI   )ÚskÚar,   r   )r   r   Ú	publickey¯   s    ,
rL   c                s&   t | ƒ‰ t‡ fdd„tdt ƒD ƒƒS )Nc             3   s    | ]}d | t ˆ |ƒ V  qdS )r   N)r   )r   r   )r   r   r   r   ¸   s    zHint.<locals>.<genexpr>r   )r   rE   rF   r
   )r   r   )r   r   ÚHint¶   s    rM   c                sž   t |ƒ‰ dtd  t‡ fdd„tdtd ƒD ƒƒ }t‡ fdd„ttd td ƒD ƒƒ}t||  ƒ}tt|ƒ}|tt|ƒ| |  ƒ|  t	 }t|ƒt
|ƒ S )	Nr   c             3   s    | ]}d | t ˆ |ƒ V  qdS )r   N)r   )r   r   )r   r   r   r   ½   s    zsignature.<locals>.<genexpr>r#   c                s   g | ]}ˆ | ‘qS r   r   )r   r   )r   r   r   rB   ¾   s    zsignature.<locals>.<listcomp>r   r"   )r   r
   rE   rF   r   rM   rA   r-   rI   ÚlrG   )r   rJ   ÚpkrK   ZinterÚrÚRÚSr   )r   r   Ú	signature»   s    ,$
 rS   c             C   sB   | d }| d }| | ||  d t | | | |  t dkS )Nr   r   )r$   r    )rH   r   r&   r   r   r   Ú	isoncurveÅ   s    rT   c                s   t ‡ fdd„tdtƒD ƒƒS )Nc             3   s    | ]}d | t ˆ |ƒ V  qdS )r   N)r   )r   r   )Úsr   r   r   Ì   s    zdecodeint.<locals>.<genexpr>r   )rE   rF   r
   )rU   r   )rU   r   Ú	decodeintË   s    rV   c                sb   t ‡ fdd„tdtd ƒD ƒƒ}t|ƒ}|d@ tˆ td ƒkrFt| }||g}t|ƒs^tdƒ‚|S )Nc             3   s    | ]}d | t ˆ |ƒ V  qdS )r   N)r   )r   r   )rU   r   r   r   Ð   s    zdecodepoint.<locals>.<genexpr>r   r   z#decoding point that is not on curve)rE   rF   r
   r'   r   r    rT   Ú	Exception)rU   r&   r   rH   r   )rU   r   ÚdecodepointÏ   s     rX   c       	      C   s¦   t | ƒtd krtdƒ‚t |ƒtd kr0tdƒ‚t| dtd … ƒ}t|ƒ}t| td td … ƒ}tt|ƒ| | ƒ}tt|ƒ}t	t
t|ƒtt||ƒƒƒƒ}||kS )Nr"   zsignature length is wrongr   zpublic-key length is wrongr   )Úlenr
   rW   rX   rV   rM   rI   rA   r-   r>   r7   r<   )	rU   r   rO   rQ   r,   rR   r   Zv1Zv2r   r   r   Ú
checkvalidÜ   s    
rZ   im c             C   s`   | \}}|\}}|\}}d|| ||  d  | }	d|| ||  d  | }
|	t  |
t  fS )Nr"   r   )rH   )r@   r   r$   ÚxnÚznZxmZzmZxdÚzdr   r=   r   r   r   Úaddÿ   s    r^   c             C   sT   | \}}|d |d  d }d| | |d t | |  |d   }|t |t fS )Nr   r"   )r,   rH   )r@   r[   r\   r   r=   r   r   r   Údouble  s    (r_   é	   c                s@   |df‰t ˆƒ‰‡ ‡‡fdd„‰ ˆ | ƒ\\}}}|t|ƒ t S )Nr   c                sP   | dkrˆˆfS ˆ | d ƒ\}}| d@ r<t ||ˆƒt|ƒfS t|ƒt ||ˆƒfS )Nr   r   )r^   r_   )r   ZpmZpm1)ÚfÚoneÚtwor   r   ra     s    zcurve25519.<locals>.f)r_   r!   rH   )r@   Úbaser   r=   r9   r   )ra   rb   rc   r   Ú
curve25519  s
    
re   c             C   s6   | pt  dt¡} | dM } | dd>  M } | dd> O } | S )Nr   iøÿÿÿé€   éø   é@   )ÚrandomÚrandintrH   )r@   r   r   r   Úgenkey$  s
    rk   c              C   sL   dd l } tt ttt ¡ƒ d¡}|  d¡}t|ƒ}t|||ƒ}t	|||ƒS )Nr   zutf-8é    )
ÚosÚstrri   rj   r    ÚencodeÚurandomrL   rS   rZ   )rm   ÚmsgrJ   rO   Úsigr   r   r   Údsa_test7  s    
rs   c              C   s(   t ƒ } t ƒ }t| t|ƒƒt|t| ƒƒkS )N)rk   re   )Zsk1Zsk2r   r   r   Údh_test@  s    rt   )r`   )r   ),r   ri   ÚunicodeÚPY3r   r   r   Ú	NameErrorÚbytesr
   r    rN   r   r   r!   r$   r%   r'   ZByZBxr-   r7   r;   r<   r>   r?   rA   rG   rI   rL   rM   rS   rT   rV   rX   rZ   rH   r,   r^   r_   re   rk   rs   rt   r   r   r   r   Ú<module>	   s^   	
	

	