modInverse & powMod
    Salih Dincer 
    salihdb at hotmail.com
       
    Sat Jun  8 12:28:43 UTC 2024
    
    
  
On Friday, 7 June 2024 at 13:43:29 UTC, Salih Dincer wrote:
> 
> SDB at 79
>
> I have only one question: Is there a modInverse() function in 
> the standard library for use in RSA?
Apparently not, it fell to lot :)
I already had such a function...
```d
auto modInverse(T)(T m, T n) pure
{
   T q, ilk = n;
   T y, tmp, x = 1;
   while (m > 1)
   {
     q = m / n;
     tmp = n;
       n = m % n;
       m = tmp;
     tmp = y;
       y = x - q * y;
       x = tmp;
   }
   return x < 0 ? x + ilk : x;
}
```
And in the BigInt module there was divMod() next to powmod():
```d
auto modInverse(BigInt a, BigInt m)
{
   BigInt q, m0 = m;
   BigInt tmp, y, x = 1;
   while (a > 1)
   {
     // m is remainder now
     tmp = m;
     divMod(a, m, q, m);
     // process same as Euclid's algorithm
     a = tmp;
     tmp = y;
     // Update y and x
     y = x - q * y;
     x = tmp;
   }
   // Make x positive
   if (x < 0) x += m0;
   return x;
}
```
Is PR required? Why not modInverse too!
SDB at 79
    
    
More information about the Digitalmars-d-learn
mailing list