G1 PFC::mult(const G1& w,const Big& k) { G1 z; ECn Q; if (w.mtable!=NULL) { // we have precomputed values Big e=k; if (k<0) e=-e; int i,j,t=w.mtbits; //MR_ROUNDUP(2*S,WINDOW_SIZE); j=recode(e,t,WINDOW_SIZE,t-1); z.g=w.mtable[j]; for (i=t-2;i>=0;i--) { j=recode(e,t,WINDOW_SIZE,i); z.g+=z.g; if (j>0) z.g+=w.mtable[j]; } if (k<0) z.g=-z.g; } else { Big u[2]; Q=w.g; glv(k,*ord,W,SB,u); endomorph(Q,*Beta); Q=mul(u[0],w.g,u[1],Q); z.g=Q; } return z; }
bool GLVInputControl::keyToGLV(const al::Keyboard& k, bool down){ down ? glv().setKeyDown(k.key()) : glv().setKeyUp(k.key()); const_cast<glv::Keyboard*>(&glv().keyboard())->alt(k.alt()); const_cast<glv::Keyboard*>(&glv().keyboard())->caps(k.caps()); const_cast<glv::Keyboard*>(&glv().keyboard())->ctrl(k.ctrl()); const_cast<glv::Keyboard*>(&glv().keyboard())->meta(k.meta()); const_cast<glv::Keyboard*>(&glv().keyboard())->shift(k.shift()); return glv().propagateEvent(); }
/* Multiply P by e in group G1 */ void PAIR_G1mul(ECP *P,BIG e) { #ifdef USE_GLV /* Note this method is patented */ int i,np,nn; ECP Q; BIG cru,t,q; BIG u[2]; BIG_rcopy(q,CURVE_Order); glv(u,e); ECP_affine(P); ECP_copy(&Q,P); BIG_rcopy(cru,CURVE_Cru); FP_nres(cru); FP_mul(Q.x,Q.x,cru); /* note that -a.B = a.(-B). Use a or -a depending on which is smaller */ np=BIG_nbits(u[0]); BIG_modneg(t,u[0],q); nn=BIG_nbits(t); if (nn<np) { BIG_copy(u[0],t); ECP_neg(P); } np=BIG_nbits(u[1]); BIG_modneg(t,u[1],q); nn=BIG_nbits(t); if (nn<np) { BIG_copy(u[1],t); ECP_neg(&Q); } ECP_mul2(P,&Q,u[0],u[1]); #else ECP_mul(P,e); #endif }
bool GLVWindowControl::onResize(int dw, int dh){ glv().extent(glv().width() + dw, glv().height() + dh); //printf("GLVWindowControl onResize: %d %d %f %f\n", dw, dh, glv().width(), glv().height()); glv().broadcastEvent(glv::Event::WindowResize); return true; }
bool GLVInputControl::onMouseDown(const Mouse& m){ glv::space_t xrel=m.x(), yrel=m.y(); glv().setMouseDown(xrel,yrel, m.button(), 0); glv().setMousePos(m.x(), m.y(), xrel, yrel); return !glv().propagateEvent(); }
bool GLVWindowControl::onDestroy(){ glv().broadcastEvent(glv::Event::WindowDestroy); return true; }
bool GLVWindowControl::onCreate(){ glv().broadcastEvent(glv::Event::WindowCreate); return true; }