You are on page 1of 3

/* IDEA - International Data Encryption Algorithm */

/*
Author: Rohit Saini

Input:
64 bit plain data
128 bit key
Output:
64 bit cipher data
*/

#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>

unsigned int a[16]={0};


unsigned int msg[4]={36,37,38,39};
unsigned int key[8]={8,4,1,2,3,5,7,9};

void xor(int p,unsigned int c,unsigned int d)


{
a[p]=c^d;
}

void mul(int p,unsigned int c,unsigned int d)


{
a[p]= ((c*d)% 65536)+1;
}

void add(int p,unsigned int c,unsigned int d)


{
a[p]=(c+d) % 65536;
}

void leftRotate(unsigned int key[])


{
int i,j;
unsigned int temp,t;
temp = key[0];
t=key[1];
for (i = 0; i <=5 ; i++)
{
key[i]=key[i+1]<<9|key[i+2]>>7;
}
key[6]=key[7]<<9|temp>>7;
key[7]=temp<<9|t>>7;

void main()
{
int i=0,j,k=0,h=0,t=0,l,flag,fl=0;
unsigned int subkey[8]={0};
clrscr();

cout<<"\nOriginal msg : \n";


for(i=0;i<4;i++)
{
cout<<" "<<msg[i];
}

flag=0;
for(j=0;j<8;j++)
{

for(t=t%8;t<8 && h<6;)


{
if(flag==0)
{

subkey[h]=key[t++];
h=(h++)%6;

if(fl++==7)
{
leftRotate(key);
flag=1;fl=0;
}
}
else
{
subkey[h]=key[t%8];
t++;
h=(h++)%6;
fl++;
}

t=t%8;
}
h=0;
flag=0;

mul(1,msg[0],subkey[0]);
add(2,msg[1],subkey[1]);
add(3,msg[2],subkey[2]);
mul(4,msg[3],subkey[3]);
xor(5,a[1],a[3]);
xor(6,a[2],a[4]);
mul(7,a[5],subkey[4]);
add(8,a[6],a[7]);
mul(9,a[8],subkey[5]);
add(10,a[7],a[9]);
xor(11,a[1],a[9]);
xor(12,a[3],a[9]);
xor(13,a[2],a[10]);
xor(14,a[4],a[10]);
}

leftRotate(key);
for(t=t%8;t<8 && h<4;)
{
subkey[h]=key[t%8];
t++;
}

mul(1,msg[0],subkey[0]);
add(2,msg[1],subkey[1]);
add(3,msg[2],subkey[2]);
mul(4,msg[3],subkey[3]);

cout<<"\n\nCipher msg is \n :";


for(i=1;i<=4;i++)
{
cout<<" "<<a[i];
}
getch();
}

You might also like