Yc @s+y2edZddZddZddZWn0ek rddZeZeZddZYnXd d lZd ZdKZ dMZ ddZ ddZ ddZ dNe dZe d e dde ZddZde dZeeZee ee gZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Z d8d9Z!d:d;Z"e Z#d<Z$d=d>Z%d?d@Z&dAdBdCZ'd d l(Z(d dDdEZ)dFdGZ*dHdIZ+d S)OFcCsdjdd|DS)z(Convert array of integers to byte stringcss|]}t|VqdS)N)chr).0xr7/tmp/pip-build-3puug3g5/wheel/wheel/signatures/djbec.py szasbytes..)join)brrrasbytes sr cCs dj|S)z%Convert array of bytes to byte stringr)r)r rrr joinbytessr cCst||d|d?d@S)zReturn i'th bit of bytestring h)ord)hirrrbitsrTcCs||d|d?d@S)Nr r r)rrrrrrsNl S9i @eM^w|ocCstj|jS)N)hashlibsha512digest)mrrrH#srcCsJ|dkrdSt||d|d|}|d@rF|||}|S)Nrr r)expmod)r ertrrrr&s   rcCst|tdtS)Nr)rq)rrrrinv.sr!iAiBr cCs||dtt||d}t|tddt}|||tdkrd|tt}|ddkr~t|}|S)Nr r rr)r!drr I)yZxxrrrrxrecover4s$ r'cCs|\}}}}|\}}}} ||||t} ||||t} |d| t} |d|t} | | t}| | t}| | t}| | t}||t}||t}||t}||t}||||fS)Nr)r )Zpt1Zpt2X1Y1Z1ZT1ZX2ZY2ZZ2ZT2ABCDEFGrX3Y3Z3T3rrrxpt_addRsr7cCs|\}}}}||}||}d||}| t}||t} | | ||t} ||t} | |t} ||t} | | t}| | t}| | t}| | t}||||fS)Nr)r )ptr)r*r+_r,r-r.r/Jr0r2r1rr3r4r5r6rrr xpt_doublecs   r;cCs$|\}}||d||tfS)Nr )r )r8rr&rrrpt_xformts r<cCs8|\}}}}|t|t|t|tfS)N)r!r )r8rr&zr9rrr pt_unxformxsr>cCsJ|dkrtdStt||d?}|d@rFt||S|S)Nrr )rr )r<r;xpt_multr7)r8nr9rrrr?|s r?cCsttt||S)N)r>r?r<)r8rrrr scalarmultsrAcsLfddttDfddttdD}t|S)Ncsg|]}|?d@qS)r r)rr)r&rr s zencodeint..cs8g|].tfddtdDqS)cs&g|]}d||>qS)r r)rj)bitsrrrrBs z(encodeint...r )sumrange)r)rD)rrrBs r )rFr r )r&rr)rDr&r encodeintsrGcso|d}|dfddttdD|d@gfddttdD}t|S)Nrr csg|]}|?d@qS)r r)rr)r&rrrBs zencodepoint..cs8g|].tfddtdDqS)cs&g|]}d||>qS)r r)rrC)rDrrrrBs z*encodepoint...r )rErF)r)rD)rrrBs r )rFr r )Prrr)rDr&r encodepoints   .rIcs]t|dtdtfddtdtdD}tt|}t|S)Nrc3s&|]}d|t|VqdS)rN)r)rr)rrrrszpublickey..r#)rr rErFrAr-rI)skar,r)rr publickeys 8rLcs3t|tfddtdtDS)Nc3s&|]}d|t|VqdS)rN)r)rr)rrrrszHint..r)rrErFr )rr)rrHints rMcst|dtdtfddtdtdD}tfddttdtdD}t||}tt|}|tt||||t }t|t |S) Nrc3s&|]}d|t|VqdS)rN)r)rr)rrrrszsignature..r#csg|]}|qSrr)rr)rrrrBs zsignature..r r") rr rErFr rMrAr-rIlrG)rrJpkrKZinterrRSr)rr signatures 80&rScCsG|d}|d}| |||dt||||tdkS)Nrr )r$r )rHrr&rrr isoncurves  rTcs&tfddtdtDS)Nc3s&|]}d|t|VqdS)rN)r)rr)srrrszdecodeint..r)rErFr )rUr)rUr decodeintsrVcstfddtdtdD}t|}|d@ttdkr_t|}||g}t|std|S)Nc3s&|]}d|t|VqdS)rN)r)rr)rUrrrszdecodepoint..rr z#decoding point that is not on curve)rErFr r'rr rT Exception)rUr&rrHr)rUr decodepoints,    rXc Cst|tdkr"tdt|tdkrDtdt|dtd}t|}t|tdtd}tt|||}tt|}t t t |t t||}||kS)Nr"zsignature length is wrongr zpublic-key length is wrongr) lenr rWrXrVrMrIrAr-r>r7r<) rUrrOrQr,rRrZv1Zv2rrr checkvalids   *rZimc Csr|\}}|\}}|\}}d||||d|} d||||d|} | t| tfS)Nr"r)rH) r@rr$xnznZxmZzmZxdzdrr=rrradds    r^cCs^|\}}|d|dd}d|||dt|||d}|t|tfS)Nrr")r,rH)r@r[r\rr=rrrdoubles *r_ csZ|dftfdd|\\}}}|t|tS)Nr csn|dkrfS|d\}}|d@rRt||t|fSt|t||fS)Nr r)r^r_)rZpmZpm1)fonetworrras   zcurve25519..f)r_r!rH)r@baserr=r9r)rarbrcr curve25519s   recCs:|ptjdt}|dM}|d M}|d O}|S) Nrr @illrjl@)randomrandintrH)r@rrrgenkeys    rmcCsnddl}ttjtttjd}|jd}t|}t|||}t |||S)Nrzutf-8 ) osstrrkrlr encodeurandomrLrSrZ)romsgrJrOsigrrrdsa_tests  % rucCs:t}t}t|t|t|t|kS)N)rmre)Zsk1Zsk2rrrdh_test s  rvllllS9i @eM^w|oi$),unicodePY3r r r NameErrorbytesrr r rNrrr!r$r%r'ZByZBxr-r7r;r<r>r?rArGrIrLrMrSrTrVrXrZrHr,r^r_rerkrmrurvrrrr s^