diff --git a/rsa.py b/rsa.py
index 27cecf4ecf5c1a9a0505cb4437ce086b4a93cb4a..0da8342ab078a20db19932f58b877c3628daa573 100644
--- a/rsa.py
+++ b/rsa.py
@@ -123,14 +123,25 @@ def EuclideEtendu(a,b):
     return u1, v1
 
 def inverseMod(x,b):
-        return (x % b + b) % b
+    return (x % b + b) % b
+
+
+def lpowmod(x, y, n):
+    """puissance modulaire: (x**y)%n avec x, y et n entiers"""
+    result = 1
+    while y>0:
+        if y&1>0:
+            result = (result*x)%n
+        y >>= 1
+        x = (x*x)%n    
+    return result
 
 p,q = EuclideEtendu2(n, e, 1, 0, 0, 1)
 nPrime = (p - 1)*(q - 1)
-d = inverseMod(e, nPrime)
+d = inverseMod(nPrime, e)
+print(d)
 
-d *= -1
 for k in range(len(messages)):
-    tmp = inverseMod(int(pow(messages[k],d)),n)
+    tmp = inverseMod(n,lpowmod(messages[k],d,n))
     print(tmp)