unsigned int MAX=256;
unsigned int MIN=1;
extended Euclidean algorithm
int gencongrel (unsigned int e, unsigned int r)
{
long temp, u, v, quotient, previous_u, previous_v;
u = 0;
previous_u = 1;
v = 1;
previous_v = 0;
while (r != 0) {
temp = r; quotient = e / r; r = e % r; e = temp; temp = u; u = previous_u - quotient * u; one and quotient
previous_u = temp; temp = v; v = previous_v - quotient * v; one and exponent
previous_v = temp; }
return (previous_u);
}
using the Euclidean algorithm
int gcd(unsigned int number, unsigned int r)
{
unsigned int temp;
while (r != 0 ) {
temp = r; r = number % r; number = temp; }
return number;
}
int gencoprime(unsigned int r)
{
unsigned int number;
do
{
do {
number = rand() % MAX;
} while (number < 3);
} while (gcd(number, r) != 1); the generated number and r is 1
return (number);
}
int genprime (void)
{
unsigned int modulus, modulus_squared, prime, number, result;
prime = 0; result = 0;
while (prime == 0) {
modulus = 2; modulus_squared = 4;
do {
number=rand() % MAX;
} while (number < MIN);
while (modulus_squared < number) root of the number
{
result = number % modulus; dividing the number by the current modulus
if (result == 0) {
prime = 0; break;
}
modulus_squared = modulus * modulus;
if (modulus == 2) {
modulus++; }
else
{
modulus++; modulus++;
}
}
if (result != 0) the square root of the number
{
prime = 1; }
}
return (number);
}
int gen_keys (void)
{
unsigned int p, q, e, n, r;
long d;
int error;
srand(time(NULL)); error = 1;
do {
p = genprime();
q = genprime();
} while (q == p);
n = p * q; r = (p - 1) * (q - 1); e = gencoprime(r); d = gencongrel(e, r); if (d <= 0)
{
d = d + r; }
FILE *fptr;
fptr = fopen("private_key.txt","w");
if (fptr != NULL) {
fprintf(fptr,"%ld %d\n", d, n); fflush(fptr);
fclose(fptr);
error = 0;
}
fptr = fopen("public_key.txt","w");
if ((fptr != NULL) || (error == 0))
fprintf(fptr,"%d %d\n", e, n); fflush(fptr);
fclose(fptr);
error = 0;
}
else
{
error = 1;
}
if (error == 0)
{
printf("\nKEY GENERATION SUCCESSFULL\n\n\n"); error
}
else
{
printf("\nERROR: KEY GENERATION UNSUCCESSFULL\n\n\n"); an error
return(1);
}
return(0);
}