I have with python:
e*d == 1%etf
we know (e) and (etf) and must discover (d) using the extended euclidean algorithm and the concept of mul
Here's an implementation of the extended Euclidean algorithm. I've taken the code from this answer, generalised it so that it works with moduli other than 262, and converted it from Java to Python:
def multiplicativeInverse(x, modulus):
if modulus <= 0:
raise ValueError("modulus must be positive")
a = abs(x)
b = modulus
sign = -1 if x < 0 else 1
c1 = 1
d1 = 0
c2 = 0
d2 = 1
# Loop invariants:
# c1 * abs(x) + d1 * modulus = a
# c2 * abs(x) + d2 * modulus = b
while b > 0:
q = a / b
r = a % b
# r = a - qb.
c3 = c1 - q*c2
d3 = d1 - q*d2
# Now c3 * abs(x) + d3 * modulus = r, with 0 <= r < b.
c1 = c2
d1 = d2
c2 = c3
d2 = d3
a = b
b = r
if a != 1:
raise ValueError("gcd of %d and %d is %d, so %d has no "
"multiplicative inverse modulo %d"
% (x, modulus, a, x, modulus))
return c1 * sign;
The trick you list with d = (e**(etf-2)) % etf
will work only if etf is prime. If it's not, you have to use the EEA itself to find the modular multiplicative inverse.