예제 #1
0
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;
}
예제 #2
0
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();
}
예제 #3
0
/* 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
}
예제 #4
0
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;
}
예제 #5
0
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();
}
예제 #6
0
bool GLVWindowControl::onDestroy(){
	glv().broadcastEvent(glv::Event::WindowDestroy);
	return true;
}
예제 #7
0
bool GLVWindowControl::onCreate(){
	glv().broadcastEvent(glv::Event::WindowCreate);
	return true;
}