
!dVc                 @   s+  y2 e  d  Z d d   Z d d   Z d d   Z Wn0 e k
 rd d Z e Z e Z d d   Z Yn Xd	 d
 l Z d Z dK Z	 dM Z
 d d   Z d d   Z d d   Z dN 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 d0 d1   Z d2 d3   Z d4 d5   Z d6 d7   Z  d8 d9   Z! d: d;   Z" e	 Z# d< Z$ d= d>   Z% d? d@   Z& dA dB dC  Z' d	 d
 l( Z( d	 dD dE  Z) dF dG   Z* dH dI   Z+ d
 S)OFc             C   s   d j  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   7/tmp/pip-build-0jahl3lb/wheel/wheel/signatures/djbec.py	<genexpr>   s    zasbytes.<locals>.<genexpr>)join)br   r   r   asbytes   s    r
   c             C   s   d j  |   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        N               l	   S9i@eM^w|o c             C   s   t  j |   j   S)N)hashlibsha512digest)mr   r   r   H#   s    r   c             C   sM   | d k r d St  |  | d |  d | } | d @rI | |  | } n  | 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   inv.   s    r!   iA iB r      c             C   s   |  |  d t  t |  |  d  } t | t d d t  } | | | t d k rg | t t } n  | d d k r t | } n  | S)Nr      r   r   r   )r!   dr   r    I)yZxxr   r   r   r   xrecover4   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_addR   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_doublec   s    

r;   c             C   s$   |  \ } } | | d | | t  f S)Nr   )r    )r8   r   r&   r   r   r   pt_xformt   s    r<   c             C   s8   |  \ } } } } | t  |  t | t  |  t f S)N)r!   r    )r8   r   r&   zr9   r   r   r   
pt_unxformx   s    r>   c             C   sJ   | d k r t  d  St t |  | d ?  } | d @rF t | |   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                sL    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                s8   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                so   |  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                s8   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                s]   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    8rL   c                s3   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 Sr   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    80&rS   c             C   sG   |  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                s   t    f d d   t d t d  D  } t |  } | d @t   t d  k rb t | } n  | | g } t |  s t d   n  | 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   n  t  |  t d k rJ t d   n  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   sr   |  \ } } | \ } } | \ } } 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   s^   |  \ } } | 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                sZ   | d f  t         f d d       |   \ \ } } } | t |  t S)Nr   c                sn   |  d k r   f S  |  d  \ } } |  d @rR t  | |   t |  f St |  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   s:   |  p t  j d t  }  |  d M}  |  d
 M}  |  d O}  |  S)Nr         r      @   i   l                                      l                                  rj   l                                    @)randomrandintrH   )r@   r   r   r   genkey   s
    


rm   c              C   sn   d d  l  }  t t j t t t   j d  } |  j d  } t |  } t | | |  } t	 | | |  S)Nr   zutf-8    )
osstrrk   rl   r    encodeurandomrL   rS   rZ   )ro   msgrJ   rO   sigr   r   r   dsa_test  s    %ru   c              C   s:   t    }  t    } t |  t |   t | t |    k S)N)rm   re   )Zsk1Zsk2r   r   r   dh_test
  s    		rv   l                                      l   l                                    l   S9i@eM^w|o                i$),unicodePY3r
   r   r   	NameErrorbytesr   r	   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   rm   ru   rv   r   r   r   r   <module>	   s^   	
