Program 1: Write a program in C/C++ for error detecting code using
CRC-CCITT(16-bits).
#include<stdio.h>
char m[50],g[50],r[50],q[50],temp[50];
void calrem()
{ int i,j;
for(i=1;i<=16;i++)
r[i-1]=((int)temp[i]-48)^((int)g[i]-48)+48;
}
void shiftl()
{ int i;
for(i=1;i<=16;i++) r[i-1]=r[i];
}
void crc(int n)
{
int i,j;
for(i=0;i<n;i++) temp[i]=m[i];
for(i=0;i<n;i++) r[i]=m[i];
for(i=0;i<n-16;i++)
{
if(r[0] == '1')
{
q[i]='1';
calrem();
}
else
{
q[i]='0';
shiftl();
}
r[16]=m[17+i];
r[17]='\0';
for(j=0;j<=17;j++)
temp[j]=r[j];
}
q[n-16]='\0';
}
void caltrans(int n)
{
int i,k=0;
for(i=n-16;i<n;i++)
m[i]=((int)m[i]-48)^((int)r[k++]-48)+48;
m[i]='\0';
}
int main()
{
int n,i=0;
char ch,flag=0;
printf("Enter the frame bits:");
while((ch=getc(stdin))!='\n')
m[i++]=ch;
n=i;
for(i=0;i<16;i++)
m[n++]='0';
m[n]='\0';
printf("\n Message after appending 16 zeros:%s",m);
for(i=0;i<=16;i++)
g[i]='0';
g[0]=g[4]=g[11]=g[16]='1';g[17]='\0';
printf("\n Generator :%s\n",g);
crc(n);
printf("\n\n Quotient:%s",q);
printf("\n The final remainder is:%s",r);
caltrans(n);
printf("\n Transmitted frame:%s",m);
printf("\n\n Enter transmitted frame which contains %d bits:",n);
scanf("\n %s",m);
printf("CC checking\n");
crc(n);
printf("\n Remainder is:%s",r);
for(i=0;i<16;i++)
{
if(r[i] == '0')
{
flag = 0;
continue;
}
else
{
flag = 1;
break;
}
}
if (flag == 1)
printf("\n\n Error during transmission\n");
else
printf("\n\n Received frame is correct\n");
}
Program2: Write a program for distance vector algorithm to find suitable
path for transmission.
#include<stdio.h>
struct node
unsigned dist[20];
unsigned from[20];
}rt[10];
int main()
int dmat[20][20];
int n,i,j,k,count=0;
printf("\n enter the no of nodes\n");
scanf("%d",&n);
printf("enter the cost matrix:");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%d",&dmat[i][j]);
dmat[i][i]=0;
rt[i].dist[j]=dmat[i][j];
rt[i].from[j]=j;
do
count=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
if(rt[i].dist[j]>dmat[i][k]+rt[k].dist[j])
rt[i].dist[j]=rt[i].dist[k]+rt[k].dist[j];
rt[i].from[j]=k;
count++;
}
}
}while(count!=0);
for(i=0;i<n;i++)
printf("\n state value for router %d is\n",i+1);
for(j=0;j<n;j++)
printf("\t \n to node %d via %d,distance=%d\n",j+1,rt[i].from[j]+1,rt[i].dist[j]);
printf("\n\n");
return 0;
Program 3: Write a program in C/C++ to implement the Diffie-Hellman key
exchange algorithm.
#include<stdio.h>
#include<math.h>
#include<string.h>
long int p, alpha,ya,yb;
long int compute(long int b ,long int p, int m);
long int compute(long int b ,long int p, int m)
long int k = 1;
for (int j = 1;j <=p;j++)
k = k *b;
k = k % m;
return k;
int main()
{ long int p,key1,key2,xa,xb,n;
int alpha;
printf("\n Diffie Hellman Key EXchange MECHANISM\n");
printf("\n enter PRIME NUMBER and Primitive root \n");
scanf("%ld",&p);
scanf("%ld",&alpha);
n=p;
for(int i = 2; i <= n/2; ++i)
{
// condition for nonprime number
if(n%i == 0)
printf("The prime number is not correct\n");
exit(0);
printf("\nENTER USER A PRIvate key \n");
scanf("%ld",&xa);
//compute user A public key
ya=compute(alpha,xa,p);
printf("\n USER B PRIvate key \n");
scanf("%ld", &xb);
//compute user B public key
yb=compute(alpha,xb,p);
printf("\nUSER A sends PUBLIC KEY %ld ",ya);
printf("\nUSER B computes Shared secret key1");
key1=compute(ya,xb,p);
printf("\n Shared secret key1 is %ld",key1);
printf("\nUSER B sends PUBLIC KEY %ld ",yb);
printf("\nUSER A computes Shared secret key2");
key2=compute(yb,xa,p);
printf("\n Shared secret key is %ld",key2);
if (key1==key2)
{printf(" \n Both users have successfully exchanged the secret key\n");
printf (" \n shared secret key is %ld",key1);
else
printf("\n failed to Exchange the key !!!!");
return 1;
Program 4 :RSA
#include<stdio.h>
#include<string.h>
#include<math.h>
int mult(unsigned int x, unsigned int y,unsigned int n)
unsigned long int k=1;
int j;
for(j=1;j<=y;j++)
k=(k*x)%n;
return(unsigned int) k;
int main()
char msg[100],pt[100];
unsigned int ct[100],n,d,e,p,q,i;
printf("enter the message");
scanf("%s",msg);
strcpy(pt,msg);
for(i=0;i<strlen(msg);i++)
pt[i]=msg[i];
n=253;d=17;e=13;
printf("CT=");
for(i=0;i<strlen(msg);i++)
ct[i]=mult(pt[i],e,n);
for(i=0;i<strlen(msg);i++)
printf("%d",ct[i]);
printf("\nPT=");
for(i=0;i<strlen(msg);i++)
printf("%c",pt[i]);
for(i=0;i<strlen(msg);i++)
pt[i]=mult(ct[i],d,n);
return 0;
Program 5: Write a program in C/C++ for congestion control using leaky bucket
algorithm.
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
int
packets[8],i,j,clk,b_size,o_rate,i_rate,p_remain,p_sz_rm=0,p_sz,p_time,flag=0;
system("clear");
for(i=0;i<5;++i)
packets[i]=rand()%10;
printf("\n Enter the output rate:");
scanf("%d",&o_rate);
printf("\n Enter the Bucket Size:");
scanf("%d",&b_size);
for(i=0;i<5;++i)
if((packets[i]+p_sz_rm)>b_size)
if(packets[i]>b_size)
printf("\n Incoming packet size (%d) is Greater than bucket capacity -
REJECTED",packets[i]);
else
printf("\n Bucket capacity exceeded - REJECTED!!");
}
else
{ p_remain=4-i;
p_sz=packets[i];
p_sz_rm+=p_sz;
printf("\n_________________________\n");
printf("\n Incoming Packet :%d",p_sz);
printf("\n Transmission left:%d",p_sz_rm);
p_time=rand()%10;
printf("\n Next Packet Will come at :%d",p_time);
for(clk=0;clk<p_time && p_sz_rm>0;clk++)
printf("\n Time Left:%d",p_time-clk);
sleep(1);
printf(" - Transmitted!!");
if(p_sz_rm<=o_rate)
p_sz_rm=0;
else
p_sz_rm-=o_rate;
printf(" Bytes Remaining:%d",p_sz_rm);
if(p_time-clk>0)
printf(" \n Time left %d No packets to transmit!!",p_time-clk);
return(0);