Example #1
0
/* SU= 160 */
void FP12_frob(FP12 *w,FP2 *f)
{
	FP2 f2,f3;
	FP2_sqr(&f2,f);     /* f2=f^2 */
	FP2_mul(&f3,&f2,f); /* f3=f^3 */

	FP4_frob(&(w->a),&f3);
	FP4_frob(&(w->b),&f3);
	FP4_frob(&(w->c),&f3);

	FP4_pmul(&(w->b),&(w->b),f);
	FP4_pmul(&(w->c),&(w->c),&f2);
}
/* XTR xtr_a function */
void FP4_xtr_A(FP4 *r,FP4 *w,FP4 *x,FP4 *y,FP4 *z)
{
	FP4 t1,t2;

	FP4_copy(r,x);

	FP4_sub(&t1,w,y);

	FP4_pmul(&t1,&t1,&(r->a));
	FP4_add(&t2,w,y);
	FP4_pmul(&t2,&t2,&(r->b));
	FP4_times_i(&t2);

	FP4_add(r,&t1,&t2);
	FP4_add(r,r,z);

	FP4_norm(r);
}
Example #3
0
/* catering for special case that arises from special form of ATE pairing line function */
void FP12_smul(FP12 *w,FP12 *y)
{
	FP4 z0,z2,z3,t0,t1;

	FP4_copy(&z3,&(w->b));
	FP4_mul(&z0,&(w->a),&(y->a));
	FP4_pmul(&z2,&(w->b),&(y->b).a);
	FP4_add(&(w->b),&(w->a),&(w->b));
	FP4_copy(&t1,&(y->a));
	FP2_add(&t1.a,&t1.a,&(y->b).a);

	FP4_mul(&(w->b),&(w->b),&t1);  
	FP4_add(&z3,&z3,&(w->c));
	FP4_pmul(&z3,&z3,&(y->b).a);
	FP4_neg(&t0,&z0);
	FP4_neg(&t1,&z2);

	FP4_add(&(w->b),&(w->b),&t0);   // z1=z1-z0
#if CHUNK<64	
	FP4_norm(&(w->b));
#endif
	FP4_add(&(w->b),&(w->b),&t1);   // z1=z1-z2

	FP4_add(&z3,&z3,&t1);        // z3=z3-z2
	FP4_add(&z2,&z2,&t0);        // z2=z2-z0

	FP4_add(&t0,&(w->a),&(w->c));
	
	FP4_mul(&t0,&(y->a),&t0);
	FP4_add(&(w->c),&z2,&t0);

	FP4_times_i(&z3);
	FP4_add(&(w->a),&z0,&z3);

	FP12_norm(w);
}