#include<stdio.h>
#include<conio.h>
void p10(int data[10])
{
 int i,j;
 int temp[10];
 temp[0]=data[2];
 temp[1]=data[4];
 temp[2]=data[1];
 temp[3]=data[6];
 temp[4]=data[3];
 temp[5]=data[9];
 temp[5]=data[0];
 temp[7]=data[8];
  temp[8]=data[7];
 temp[9]=data[5];
 for(i=0;i<10;i++)
  data[i]=temp[i];
}
void p8(int data[10],int data2[8])
{
 data2[0]=data[5];
 data2[1]=data[2];
 data2[2]=data[6];
 data2[3]=data[3];
 data2[4]=data[7];
 data2[5]=data[4];
 data2[6]=data[9];
 data2[7]=data[8];
}
void ip(int data[8])
{
 int i,j,temp[8];
  temp[0]=data[1];
 temp[1]=data[5];
 temp[2]=data[2];
 temp[3]=data[0];
 temp[4]=data[3];
 temp[5]=data[7];
 temp[6]=data[4];
 temp[7]=data[6];
 for(i=0;i<8;i++)
  data[i]=temp[i];
}
void iip(int data[8])
{
 int i,j;
 int temp[8];
 temp[0]=data[3];
 temp[1]=data[0];
 temp[2]=data[2];
 temp[3]=data[4];
 temp[4]=data[6];
 temp[5]=data[1];
  temp[6]=data[7];
 temp[7]=data[5];
 for(i=0;i<8;i++)
  data[i]=temp[i];
}
void ep(int data[4],int data2[8])
{
 data2[0]=data[3];
 data2[1]=data[0];
 data2[2]=data[1];
 data2[3]=data[2];
 data2[4]=data[1];
 data2[5]=data[2];
  data2[6]=data[3];
 data2[7]=data[0];
}
void p4(int data[4])
{
 int i,j;
 int temp[4];
 temp[0]=data[1];
 temp[1]=data[3];
 temp[2]=data[2];
 temp[3]=data[0];
 for(i=0;i<4;i++)
  data[i]=temp[i];
}
/*void mat(int ss1[],int ss2[])
{
}*/
void lshift(int key[])
{
  int temp=key[0];
 for(int i=0;i<5;i++)
  key[i]=key[i+1];
  key[4]=temp;
}
void b4lshift(int key[],int k1h[],int k2h[])
{
  for(int i=0;i<5;i++)
  {
  k1h[i]=key[i];
  k2h[i]=key[i+5];
 }
}
void aflshift(int k1h[],int k2h[],int temp[],int key[])
{
 for(int i=0;i<5;i++)
 {
  temp[i]=k1h[i];
  temp[i+5]=k2h[i];
  key[i]=k1h[i];
  key[i+5]=k2h[i];
 }
}
void div_pt(int pt[],int pt1[],int pt2[])
 {
 for(int i=0;i<4;i++)
 {
  pt1[i]=pt[i];
  pt2[i]=pt[i+4];
 }
}
void xor8(int pt[],int subkey[])
{
 for(int i=0;i<8;i++)
 {
  if(pt[i]==subkey[i])
    pt[i]=0;
  else
   pt[i]=1;
  }
}
void xor4(int temp1[],int temp2[])
{
 for(int i=0;i<4;i++)
 {
  if(temp1[i]==temp2[i])
   temp1[i]=0;
  else
   temp1[i]=1;
 }
}
void binary(int n,int bin[2])
{
 int i;
 for(i=1;i>=0;i--)
 {
  bin[i]=n%2;
  n=n/2;
 }
}
void subs_choice(int sc1[],int sc2[])
{
 //int ss01[2],ss1[2];
 int s0[4][4]={1,0,3,2,3,2,1,0,0,2,1,3,3,1,3,2},s1[4][4]={0,1,2,3,2,0,1,3,3,0,1,0,2,1,0,3},i,j,k,l,bin1[2],bin2[2];
 //binary2decimal
 i=sc1[0]*2+sc1[3];
 j=sc1[1]*2+sc1[2];
 k=sc2[0]*2+sc2[3];
 l=sc2[1]*2+sc2[2];
 i=s0[i][j];
 binary(i,bin1);
 j=s1[k][l];
 binary(j,bin2);
 //4 bits are stored in sc1
 for(i=0;i<2;i++)
 {
  sc1[i]=bin1[i];
  sc1[i+2]=bin2[i];
 }
}
void swap(int a1[4],int a2[4],int a3[8])
{
  for(int i=0;i<4;i++)
  {
  a3[i]=a2[i];
  a3[i+4]=a1[i];
  }
}
void main()
{
 int i,j,pt[8],key[10],pt1[4],pt2[4],k1h[5],k2h[5],ct[8];
 int s0[4][4],s1[4][4],temp[10],subkey[8],sc1[4],sc2[4],li[4];
 clrscr();
 printf("Enter the 8 bit plain text:");
 for(i=0;i<8;i++)
  scanf("%d",&pt[i]);
 printf("Enter key:");
 for(i=0;i<10;i++)
  scanf("%d",&key[i]);
 ip(pt);
 p10(key);
 b4lshift(key,k1h,k2h);
 lshift(k1h);
 lshift(k2h);
 aflshift(k1h,k2h,temp,key);
 p8(temp,subkey);
  //round operation
 div_pt(pt,pt1,pt2);
 for(i=0;i<4;i++)
  li[i]=pt2[i];
 ep(pt2,pt);
 xor8(pt,subkey); //stores xor value in pt
 div_pt(pt,sc1,sc2);
 //sbox
 subs_choice(sc1,sc2); //sc1 stores the 4 bits
 p4(sc1);
 xor4(sc1,pt1);//xor value stored in sc1
 swap(li,sc1,ct);
 iip(ct);
 printf("\n\nThe cipher text is : ");
 for(i=0;i<8;i++)
  printf("%d ",ct[i]);
  getch();
}
 
 
 
 ^ Go to Top
^ Go to Top
No comments:
Post a Comment