Key generation procedure and code for RSA Algorithm.

profileprapulmutyala
rabinmillercode.c

#include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> int powerMod(int a, int b, int c) { int result = 1; a = a%c; while(b>0) { result = (result*a)%c; b--; } return result; } int rabinMillerTest(int n, int d, int r) { srand(time(0)); int random = 2 + rand()%(n-4); int num = powerMod(random, d, n); if(num==1 || num==(n-1)) { return 1; } int i=0; for(i=0;i<r;i++) { num = (num*num)%n; if(num==1) return 0; if(num==(n-1)) return 1; } return 0; } int isPrime(int n, int t) { if(n==2 || n==3) { return 1; } else if(n<=1 || n==4) { return 0; } else { int d = n-1, r=0; while(d%2==0) { r++; d /= 2; } int i; for(i=0;i<t;i++) { if(rabinMillerTest(n, d, r) == 0) { return 0; } } return 1; } } int main() { int selection; printf("Do you want to check individual number of test 1 or test (enter 1, 2, 3 respectively)\n"); scanf("%d",&selection); if(selection == 1) { int n,t; printf("Enter values of n and t respectively\n"); scanf("%d %d",&n,&t); if(isPrime(n, t) == 0) printf("%d is Composite\n",n); else printf("%d is Inconclusive\n",n); } else if( selection == 2) { //Test 1 printf("TEST 1:\n"); int t = 10; int i; int *primes; int primesIn[10] = {0}; primes = (int*)malloc(sizeof(int)*1000); int j=0; for(i=10000;i<11000;i++) { int check = isPrime(i,t); if(check == 1) { primes[j++] = i; primesIn[(i-10000-1)/100]++; } } for(i=0;i<j;i++) { printf("%d ",primes[i]); } printf("\n\n\n"); for(i=0;i<10;i++) { int low = 10000+1+100*i; int high = 10000+100*(i+1); printf("Number of primes in between %d and %d is %d\n", low, high, primesIn[i]); } } else if(selection == 3) { //Test 2 printf("\nTEST 2:\n"); int t=1,i,j; int randomOdds[10]; for(i=0;i<10;i++) { int temp = 0; while(temp%2==0) { temp = rand() + 5; } int flag; for(j=2;j<sqrt(temp)+1;j++) { flag = 0; if(temp%j==0) { randomOdds[i] = temp; flag = 1; break; } } if(flag == 0) { i--; } } for(i=0;i<10;i++) { int check = isPrime(randomOdds[i], t); if(check == 0) printf("%d is Composite\n",randomOdds[i]); else printf("%d is Inconclusive\n",randomOdds[i]); } } else { printf("Wrong Selection\n"); } return 0; }