Function inv_mod
pub fn inv_mod<const BITS: usize, const LIMBS: usize>(
num: Uint<BITS, LIMBS>,
modulus: Uint<BITS, LIMBS>,
) -> Option<Uint<BITS, LIMBS>>
Expand description
⚠️ Modular inversion using extended GCD.
It uses the Bezout identity
a * modulus + b * num = gcd(modulus, num)
where a
and b
are the cofactors from the extended Euclidean algorithm.
A modular inverse only exists if modulus
and num
are coprime, in which
case gcd(modulus, num)
is one. Reducing both sides by the modulus then
results in the equation b * num = 1 (mod modulus)
. In other words, the
cofactor b
is the modular inverse of num
.
It differs from gcd_extended
in that it only computes the required
cofactor, and returns None
if the GCD is not one (i.e. when num
does
not have an inverse).