Ejemplo n.º 1
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
}
Ejemplo n.º 2
0
/* Restore g from octet string w */
void FP12_fromOctet(FP12 *g,octet *W)
{
	BIG_fromBytes((*g).a.a.a,&W->val[0]);			FP_nres((*g).a.a.a);
	BIG_fromBytes((*g).a.a.b,&W->val[MODBYTES]);		FP_nres((*g).a.a.b);
	BIG_fromBytes((*g).a.b.a,&W->val[2*MODBYTES]);	FP_nres((*g).a.b.a);
	BIG_fromBytes((*g).a.b.b,&W->val[3*MODBYTES]);	FP_nres((*g).a.b.b);
	BIG_fromBytes((*g).b.a.a,&W->val[4*MODBYTES]);	FP_nres((*g).b.a.a);
	BIG_fromBytes((*g).b.a.b,&W->val[5*MODBYTES]);	FP_nres((*g).b.a.b);
	BIG_fromBytes((*g).b.b.a,&W->val[6*MODBYTES]);	FP_nres((*g).b.b.a);
	BIG_fromBytes((*g).b.b.b,&W->val[7*MODBYTES]);	FP_nres((*g).b.b.b);
	BIG_fromBytes((*g).c.a.a,&W->val[8*MODBYTES]);	FP_nres((*g).c.a.a);
	BIG_fromBytes((*g).c.a.b,&W->val[9*MODBYTES]);	FP_nres((*g).c.a.b);
	BIG_fromBytes((*g).c.b.a,&W->val[10*MODBYTES]);	FP_nres((*g).c.b.a);
	BIG_fromBytes((*g).c.b.b,&W->val[11*MODBYTES]);	FP_nres((*g).c.b.b);
}