// otherwise the arguments would alias.
var zz, r nat
for j := 0; j < w; j++ {
- zz = zz.mul(z, z)
+ zz = zz.sqr(z)
zz, z = z, zz
if v&mask != 0 {
v = y[i]
for j := 0; j < _W; j++ {
- zz = zz.mul(z, z)
+ zz = zz.sqr(z)
zz, z = z, zz
if v&mask != 0 {
powers[1] = x
for i := 2; i < 1<<n; i += 2 {
p2, p, p1 := &powers[i/2], &powers[i], &powers[i+1]
- *p = p.mul(*p2, *p2)
+ *p = p.sqr(*p2)
zz, r = zz.div(r, *p, m)
*p, r = r, *p
*p1 = p1.mul(*p, x)
// Unrolled loop for significant performance
// gain. Use go test -bench=".*" in crypto/rsa
// to check performance before making changes.
- zz = zz.mul(z, z)
+ zz = zz.sqr(z)
zz, z = z, zz
zz, r = zz.div(r, z, m)
z, r = r, z
- zz = zz.mul(z, z)
+ zz = zz.sqr(z)
zz, z = z, zz
zz, r = zz.div(r, z, m)
z, r = r, z
- zz = zz.mul(z, z)
+ zz = zz.sqr(z)
zz, z = z, zz
zz, r = zz.div(r, z, m)
z, r = r, z
- zz = zz.mul(z, z)
+ zz = zz.sqr(z)
zz, z = z, zz
zz, r = zz.div(r, z, m)
z, r = r, z
table[0].bbb = nat(nil).expWW(bb, Word(leafSize))
table[0].ndigits = ndigits * leafSize
} else {
- table[i].bbb = nat(nil).mul(table[i-1].bbb, table[i-1].bbb)
+ table[i].bbb = nat(nil).sqr(table[i-1].bbb)
table[i].ndigits = 2 * table[i-1].ndigits
}
continue
}
for j := uint(1); j < k; j++ {
- y = y.mul(y, y)
+ y = y.sqr(y)
quotient, y = quotient.div(y, y, n)
if y.cmp(nm1) == 0 {
continue NextRandom
// If n is a non-square we expect to find a d in just a few attempts on average.
// After 40 attempts, take a moment to check if n is indeed a square.
t1 = t1.sqrt(n)
- t1 = t1.mul(t1, t1)
+ t1 = t1.sqr(t1)
if t1.cmp(n) == 0 {
return false
}
t1 = t1.sub(t1, natP)
t2, vk = t2.div(vk, t1, n)
// V(k'+1) = V(2k+2) = V(k+1)² - 2.
- t1 = t1.mul(vk1, vk1)
+ t1 = t1.sqr(vk1)
t1 = t1.add(t1, nm2)
t2, vk1 = t2.div(vk1, t1, n)
} else {
t1 = t1.sub(t1, natP)
t2, vk1 = t2.div(vk1, t1, n)
// V(k') = V(2k) = V(k)² - 2
- t1 = t1.mul(vk, vk)
+ t1 = t1.sqr(vk)
t1 = t1.add(t1, nm2)
t2, vk = t2.div(vk, t1, n)
}
}
// k' = 2k
// V(k') = V(2k) = V(k)² - 2
- t1 = t1.mul(vk, vk)
+ t1 = t1.sqr(vk)
t1 = t1.sub(t1, natTwo)
t2, vk = t2.div(vk, t1, n)
}