Extended euclidean algorithm using recursion

This commit is contained in:
Imbus 2025-02-12 20:51:51 +01:00
parent 2c7904d2b3
commit 62439387e5
2 changed files with 32 additions and 0 deletions

17
rsa.c
View file

@ -13,6 +13,23 @@ int gcd(int a, int b) {
return a; return a;
} }
int extended_euclid(int a, int b, int *x, int *y) {
if (b == 0) {
*x = 1;
*y = 0;
return a;
}
int x1, y1;
int gcd = extended_euclid(b, a % b, &x1, &y1);
// Update x and y using results from recursive call
*x = y1;
*y = x1 - (a / b) * y1;
return gcd;
}
int totient(int n) { int totient(int n) {
int result = n; int result = n;

15
rsa.h
View file

@ -65,3 +65,18 @@ bool is_prime(int n);
* @return true if n is probably prime, false if n is composite. * @return true if n is probably prime, false if n is composite.
*/ */
bool miller_rabin(int n, int k); bool miller_rabin(int n, int k);
/**
* @brief Computes the greatest common divisor (GCD) of two integers a and b
* using the Extended Euclidean Algorithm. Also finds coefficients x and y such
* that ax + by = gcd(a, b).
*
* @param a The first integer.
* @param b The second integer.
* @param x Pointer to an integer to store the coefficient x in the equation ax
* + by = gcd(a, b).
* @param y Pointer to an integer to store the coefficient y in the equation ax
* + by = gcd(a, b).
* @return The greatest common divisor (gcd) of a and b.
*/
int extended_euclid(int a, int b, int *x, int *y);