Advertisement
WarPro

sdes

Nov 24th, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. #include <stdio.h>
  2. int l[4],r[4],keys[2][8],ct[8];
  3. void sbox(int sip[],int p[],int sbno,int i)
  4.  
  5.  
  6. {
  7. int sbox[2][4][4]={1,0,3,2,3,2,1,0,0,2,1,3,3,1,3,2,0,1,2,3,2,0,1,3,3,0,1,0,2,1,0,3};
  8. int rw,c,sop;
  9. rw = sip[3]+sip[0]*2;
  10. c = sip[2]+sip[1]*2;
  11. sop = sbox[sbno][rw][c]; //sop gives decimal value of S-Box Output
  12. for(;sop!=0;sop/=2)
  13. p[i--]=sop%2;
  14. }
  15. void cmp_fun(int round)
  16.  
  17.  
  18. {
  19. int EP[]={4,1,2,3,2,3,4,1},i,epd[8];
  20. int slip[4],srip[4];
  21. int p[4]={0},p4[]={2,4,3,1},np[4];
  22. for(i=0;i<8;i++) // E/P Permutation
  23. epd[i]=r[EP[i]-1];
  24. for(i=0;i<8;i++)//Performing XOR with Key
  25. if(i<4)
  26. slip[i] = epd[i]^keys[round][i]; // Using Key _ 1=>0
  27. else
  28. srip[i-4] = epd[i]^keys[round][i];
  29. sbox(slip,p,0,1);//Calling SBox 1, 0->SBOX 1
  30. sbox(srip,p,1,3);//Calling SBox 1, 1->SBOX 2
  31. for(i=0;i<4;i++) //P4 permutation
  32. np[i]=p[p4[i]-1];
  33. for(i=0;i<4;i++)
  34. l[i] = l[i]^np[i];
  35. }
  36. void left_shift(int keyip[],int nob)
  37.  
  38.  
  39. {
  40. int t1,t2,i;
  41. while(nob>0)
  42.  
  43.  
  44. {
  45. t1=keyip[0],t2=keyip[5];
  46. for(i=0;i<9;i++)
  47. if(i<4)
  48. keyip[i] =keyip[i+1];
  49. else if(i>4)
  50. keyip[i] = keyip[i+1];
  51. keyip[4]=t1,keyip[9]=t2;
  52. nob--;
  53. }
  54. }
  55. void gen_keys()
  56.  
  57.  
  58. {
  59. int key[10],i,keyip[10];
  60. int p10[]={3,5,2,7,4,10,1,9,8,6},p8[]={6,3,7,4,8,5,10,9};
  61. printf("Enter Key :");
  62. for(i=0;i<10;i++)
  63. scanf("%d", &key[i]);
  64. for(i=0;i<10;i++) // Permutation P10
  65. keyip[i] = key[p10[i]-1];
  66. left_shift(keyip,1); // Left Shifting (Array,No of bts)
  67. printf("\nKey1 :");
  68. for(i=0;i<8;i++){ //Permuting P8 on key1
  69. keys[0][i] = keyip[p8[i]-1];// Key1 Generated!!
  70. printf("%d",keys[0][i]);
  71. }
  72. left_shift(keyip,2);// Generating Key2 . .
  73. printf("\nKey2 :");
  74.  
  75.  
  76. for(i=0;i<8;i++){
  77. keys[1][i] = keyip[p8[i]-1];// Key2 Generated!!
  78. printf("%d",keys[1][i]);
  79. }
  80. }
  81. void En_De(int pt[],int c)
  82.  
  83.  
  84. {
  85. int ip[]={2,6,3,1,4,8,5,7},ipi[]={4,1,3,5,7,2,8,6},t[8],i;
  86. for(i=0;i<8;i++)// Performing Permutation on input bits!!
  87. if(i<4)
  88. l[i]=pt[ip[i]-1];
  89. else
  90. r[i-4] = pt[ip[i]-1];
  91. cmp_fun(c);//Round 0+1 using key 0+1
  92. for(i=0;i<4;i++) //Swapping left & right
  93. r[i]=l[i]+r[i],l[i]=r[i]-l[i],r[i]=r[i]-l[i];
  94. printf("\n\n");
  95. cmp_fun(!c); // Round 1+1 wid key1+1 wid swapped bits
  96. for(i=0;i<8;i++)
  97. if(i<4) t[i]=l[i];
  98. else t[i]=r[i-4];
  99. for(i=0;i<8;i++)
  100. ct[i] = t[ipi[i]-1];
  101. }
  102. void main()
  103.  
  104.  
  105. {
  106. int pt[8]={0},i;
  107. printf("Enter plain text binary bits:");
  108. for(i=0;i<8;i++)
  109. scanf("%d",&pt[i]);
  110. gen_keys(); // Generating Keys key1 & key2
  111. En_De(pt,0);
  112. printf("\nCipher Text :");
  113. for(i=0;i<8;i++)
  114. printf("%d",ct[i]);
  115. //Decrypting - - -
  116. En_De(ct,1);
  117. printf("\nPlain Text (After Decrypting):");
  118. for(i=0;i<8;i++)
  119. printf("%d",ct[i]);
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement