in src/fp48.js [559:751]
ssmul: function(y) {
if (this.stype==ctx.FP.ONE)
{
this.copy(y);
return;
}
if (y.stype==ctx.FP.ONE)
return;
if (y.stype>=ctx.FP.SPARSE)
{
var z0=new ctx.FP16(this.a);
var z1=new ctx.FP16(0);
var z2=new ctx.FP16(0);
var z3=new ctx.FP16(0);
z0.mul(y.a);
if (ctx.ECP.SEXTIC_TWIST==ctx.ECP.M_TYPE)
{
if (y.stype==ctx.FP.SPARSE || this.stype==ctx.FP.SPARSE)
{
z2.getb().copy(this.b.getb());
z2.getb().mul(y.b.getb());
z2.geta().zero();
if (y.stype!=ctx.FP.SPARSE)
{
z2.geta().copy(this.b.getb());
z2.geta().mul(y.b.geta());
}
if (this.stype!=ctx.FP.SPARSE)
{
z2.geta().copy(this.b.geta());
z2.geta().mul(y.b.getb());
}
z2.times_i();
} else {
z2.copy(this.b);
z2.mul(y.b);
}
} else {
z2.copy(this.b);
z2.mul(y.b);
}
var t0=new ctx.FP16(this.a);
var t1=new ctx.FP16(y.a);
t0.add(this.b); t0.norm();
t1.add(y.b); t1.norm();
z1.copy(t0); z1.mul(t1);
t0.copy(this.b); t0.add(this.c); t0.norm();
t1.copy(y.b); t1.add(y.c); t1.norm();
z3.copy(t0); z3.mul(t1);
t0.copy(z0); t0.neg();
t1.copy(z2); t1.neg();
z1.add(t0);
this.b.copy(z1); this.b.add(t1);
z3.add(t1);
z2.add(t0);
t0.copy(this.a); t0.add(this.c); t0.norm();
t1.copy(y.a); t1.add(y.c); t1.norm();
t0.mul(t1);
z2.add(t0);
if (ctx.ECP.SEXTIC_TWIST==ctx.ECP.D_TYPE)
{
if (y.stype==ctx.FP.SPARSE || this.stype==ctx.FP.SPARSE)
{
t0.geta().copy(this.c.geta());
t0.geta().mul(y.c.geta());
t0.getb().zero();
if (y.stype!=ctx.FP.SPARSE)
{
t0.getb().copy(this.c.geta());
t0.getb().mul(y.c.getb());
}
if (this.stype!=ctx.FP.SPARSE)
{
t0.getb().copy(this.c.getb());
t0.getb().mul(y.c.geta());
}
} else {
t0.copy(this.c);
t0.mul(y.c);
}
} else {
t0.copy(this.c);
t0.mul(y.c);
}
t1.copy(t0); t1.neg();
this.c.copy(z2); this.c.add(t1);
z3.add(t1);
t0.times_i();
this.b.add(t0);
z3.norm();
z3.times_i();
this.a.copy(z0); this.a.add(z3);
} else {
if (this.stype==ctx.FP.SPARSER)
{
this.smul(y);
return;
}
if (ctx.ECP.SEXTIC_TWIST==ctx.ECP.D_TYPE)
{ // dense by sparser - 13m
var z0=new ctx.FP16(this.a);
var z2=new ctx.FP16(this.b);
var z3=new ctx.FP16(this.b);
var t0=new ctx.FP16(0);
var t1=new ctx.FP16(y.a);
z0.mul(y.a);
z2.pmul(y.b.real());
this.b.add(this.a);
t1.real().add(y.b.real());
t1.norm();
this.b.norm();
this.b.mul(t1);
z3.add(this.c);
z3.norm();
z3.pmul(y.b.real());
t0.copy(z0); t0.neg();
t1.copy(z2); t1.neg();
this.b.add(t0);
this.b.add(t1);
z3.add(t1);
z2.add(t0);
t0.copy(this.a); t0.add(this.c); t0.norm();
z3.norm();
t0.mul(y.a);
this.c.copy(z2); this.c.add(t0);
z3.times_i();
this.a.copy(z0); this.a.add(z3);
}
if (ctx.ECP.SEXTIC_TWIST==ctx.ECP.M_TYPE)
{
var z0=new ctx.FP16(this.a);
var z1=new ctx.FP16(0);
var z2=new ctx.FP16(0);
var z3=new ctx.FP16(0);
var t0=new ctx.FP16(this.a);
var t1=new ctx.FP16(0);
z0.mul(y.a);
t0.add(this.b); t0.norm();
z1.copy(t0); z1.mul(y.a);
t0.copy(this.b); t0.add(this.c);
t0.norm();
z3.copy(t0);
z3.pmul(y.c.getb());
z3.times_i();
t0.copy(z0); t0.neg();
z1.add(t0);
this.b.copy(z1);
z2.copy(t0);
t0.copy(this.a); t0.add(this.c); t0.norm();
t1.copy(y.a); t1.add(y.c); t1.norm();
t0.mul(t1);
z2.add(t0);
t0.copy(this.c);
t0.pmul(y.c.getb());
t0.times_i();
t1.copy(t0); t1.neg();
this.c.copy(z2); this.c.add(t1);
z3.add(t1);
t0.times_i();
this.b.add(t0);
z3.norm();
z3.times_i();
this.a.copy(z0); this.a.add(z3);
}
}
this.stype=ctx.FP.DENSE;
this.norm();
},