Finding the generator for group * mod p (p is a prime number)
int gen(int p)
{
int i,j,k,l;
for(i=2;i<p;i++)
{
k=1;
for(j=1;;j++)
{
k*=i;
k%=p;
printf("%d ",k);
if(k==1)
break;
}
if(j==(p-1))
return i;
}
}
{
int i,j,k,l;
for(i=2;i<p;i++)
{
k=1;
for(j=1;;j++)
{
k*=i;
k%=p;
printf("%d ",k);
if(k==1)
break;
}
if(j==(p-1))
return i;
}
}
Finding the jacobi value
#include<stdio.h>
main()
{
int i,j,k,l,m,n;
i=1;
j=-1;
printf("enter the two numbers\n");
scanf("%d %d",&m,&n);
while(m>1)
{
if(m%2==0)
{
printf("in if \n");
if(n%8==1 || n%8==7)
{
i=i*1;
}
else
i*=j;
m/=2;
}
else if(m>n)
{
printf("else if\n");
m=m%n;
}
else
{
printf("value is %d\n",(m%4)==3&&(n%4)==3);
if((m%4)==3&&(n%4)==3)
{
i*=j;
printf("%d %d %d \n",i,m,n);
}
k=n;
n=m;
m=k;
printf("%d",i);
}
printf(" %d %d %d\n",i,m,n);
}
}
main()
{
int i,j,k,l,m,n;
i=1;
j=-1;
printf("enter the two numbers\n");
scanf("%d %d",&m,&n);
while(m>1)
{
if(m%2==0)
{
printf("in if \n");
if(n%8==1 || n%8==7)
{
i=i*1;
}
else
i*=j;
m/=2;
}
else if(m>n)
{
printf("else if\n");
m=m%n;
}
else
{
printf("value is %d\n",(m%4)==3&&(n%4)==3);
if((m%4)==3&&(n%4)==3)
{
i*=j;
printf("%d %d %d \n",i,m,n);
}
k=n;
n=m;
m=k;
printf("%d",i);
}
printf(" %d %d %d\n",i,m,n);
}
}
Finding m-1 mod n using extended euclidean algorithm
int exeu(int m,int n)
{
int i,j,k,l,a1=1,a2=0,a3,b1=0,b2=1,b3,c1,c2,c3;
if(m>n)
{
i=m;
j=n;
}
else
{
i=n;
j=m;
}
a3=i;
b3=j;
while(b3>0)
{
c1=a1-(a3/b3)*b1;
c2=a2-(a3/b3)*b2;
c3=a3%b3;
a1=b1;
a2=b2;
a3=b3;
b1=c1;
b2=c2;
b3=c3;
}
if(i==m)
{
if(a1>0)
return a1;
else return n+a1;
}
else
{
if(a2>0)
return a2;
else return n+a2;
}
}
{
int i,j,k,l,a1=1,a2=0,a3,b1=0,b2=1,b3,c1,c2,c3;
if(m>n)
{
i=m;
j=n;
}
else
{
i=n;
j=m;
}
a3=i;
b3=j;
while(b3>0)
{
c1=a1-(a3/b3)*b1;
c2=a2-(a3/b3)*b2;
c3=a3%b3;
a1=b1;
a2=b2;
a3=b3;
b1=c1;
b2=c2;
b3=c3;
}
if(i==m)
{
if(a1>0)
return a1;
else return n+a1;
}
else
{
if(a2>0)
return a2;
else return n+a2;
}
}
Elgamal cryptosystem in C
#include<stdio.h>
main()
{
int i,j,k,l,m,x,n,p,g,c1=1,c2=1,c3=1;
printf("enter the prime number do you want to take\n");
scanf("%d",&p);
g=gen(p);
printf("enter the private key do you want to take\n");
scanf("%d",&x);
int y=1;
for(i=0;i<x;i++)
{
y*=g;
y%=p;
}
printf("the public key of the crypto system is (%d %d %d)\n",g,y,p);
printf("the encryption proccess\n");
printf("enter the number do you want to encrypt\n");
scanf("%d",&m);
printf("the random number you want to take\n");
scanf("%d",&k);
for(i=0;i<k;i++)
{
c1*=g;
c2*=y;
c1%=p;
c2%=p;
}
c2*=m;
printf("the encrypted message is (%d %d)\n",c1,c2);
printf("the decryption process is \n");
for(i=0;i<x;i++)
c3*=c1;
c3=exeu(c3,p);
n=c2*c3;
n%=p;
printf("the decrypted message is %d \n",n);
}
int exeu(int m,int n)
{
int i,j,k,l,a1=1,a2=0,a3,b1=0,b2=1,b3,c1,c2,c3;
if(m>n)
{
i=m;
j=n;
}
else
{
i=n;
j=m;
}
a3=i;
b3=j;
while(b3>0)
{
c1=a1-(a3/b3)*b1;
c2=a2-(a3/b3)*b2;
c3=a3%b3;
a1=b1;
a2=b2;
a3=b3;
b1=c1;
b2=c2;
b3=c3;
}
if(i==m)
{
if(a1>0)
return a1;
else return n+a1;
}
else
{
if(a2>0)
return a2;
else return n+a2;
}
}
int gen(int p)
{
int i,j,k,l;
for(i=2;i<p;i++)
{
k=1;
for(j=1;;j++)
{
k*=i;
k%=p;
if(k==1)
break;
}
if(j==(p-1))
return i;
}
}
main()
{
int i,j,k,l,m,x,n,p,g,c1=1,c2=1,c3=1;
printf("enter the prime number do you want to take\n");
scanf("%d",&p);
g=gen(p);
printf("enter the private key do you want to take\n");
scanf("%d",&x);
int y=1;
for(i=0;i<x;i++)
{
y*=g;
y%=p;
}
printf("the public key of the crypto system is (%d %d %d)\n",g,y,p);
printf("the encryption proccess\n");
printf("enter the number do you want to encrypt\n");
scanf("%d",&m);
printf("the random number you want to take\n");
scanf("%d",&k);
for(i=0;i<k;i++)
{
c1*=g;
c2*=y;
c1%=p;
c2%=p;
}
c2*=m;
printf("the encrypted message is (%d %d)\n",c1,c2);
printf("the decryption process is \n");
for(i=0;i<x;i++)
c3*=c1;
c3=exeu(c3,p);
n=c2*c3;
n%=p;
printf("the decrypted message is %d \n",n);
}
int exeu(int m,int n)
{
int i,j,k,l,a1=1,a2=0,a3,b1=0,b2=1,b3,c1,c2,c3;
if(m>n)
{
i=m;
j=n;
}
else
{
i=n;
j=m;
}
a3=i;
b3=j;
while(b3>0)
{
c1=a1-(a3/b3)*b1;
c2=a2-(a3/b3)*b2;
c3=a3%b3;
a1=b1;
a2=b2;
a3=b3;
b1=c1;
b2=c2;
b3=c3;
}
if(i==m)
{
if(a1>0)
return a1;
else return n+a1;
}
else
{
if(a2>0)
return a2;
else return n+a2;
}
}
int gen(int p)
{
int i,j,k,l;
for(i=2;i<p;i++)
{
k=1;
for(j=1;;j++)
{
k*=i;
k%=p;
if(k==1)
break;
}
if(j==(p-1))
return i;
}
}
No comments:
Post a Comment