Advertisement
nikich800

Untitled

Feb 25th, 2022
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. // Example program
  2. #include <iostream>
  3. #include <string>
  4. #include <bitset>
  5.  
  6. using namespace std;
  7.  
  8. uint8_t lookupLeft[] = {11,8,3,14,10,12,1,4,9,6,2,13,15,5,0,7};
  9. uint8_t lookupRight[] = {8,14,4,11,1,6,0,3,10,12,5,9,7,15,2,13};
  10.  
  11. uint8_t keys[] = {
  12. 0xde, 0xad, 0xbe, 0xef
  13. };
  14.  
  15. uint16_t feistel(uint16_t input, uint8_t key)
  16. {
  17. uint8_t leftIn, rightIn;
  18. uint8_t leftOut, rightOut;
  19. uint8_t temp, temp1;
  20. uint16_t output;
  21.  
  22. leftIn = (input & 0b1111111100000000) >> 8;
  23. rightIn = input & 0b0000000011111111;
  24.  
  25. cout << "input "<< bitset<8>(leftIn) << ' ' << bitset<8>(rightIn) << endl;
  26.  
  27. temp = rightIn ^ key;
  28.  
  29. cout << "1xor " << bitset<8>(temp) << endl;
  30.  
  31. temp1 = (lookupLeft[(temp & 0b11110000) >> 4] << 4) | lookupRight[temp & 0b00001111];
  32. temp = (lookupLeft[(temp & 0b11110000) >> 4] ) | lookupRight[temp & 0b00001111] << 4;
  33.  
  34. cout << "lookup " << bitset<8>(temp1) << endl;
  35. cout << "reverse " << bitset<8>(temp) << endl;
  36.  
  37. leftOut = rightIn;
  38. rightOut = temp ^ leftIn;
  39.  
  40. output = (leftOut << 8) | (rightOut);
  41.  
  42. cout << "output " << bitset<8>(output >> 8) << ' ' << bitset<8>(output) << endl;
  43.  
  44. return output;
  45. }
  46.  
  47. int main()
  48. {
  49. uint16_t input = 0b0101100100000010;
  50. uint16_t ret, temp;
  51.  
  52. cout << "1 stage" << endl;
  53. ret = feistel(input, keys[0]);
  54. cout << endl << "2 stage" << endl;
  55. ret = feistel(ret, keys[1]);
  56. cout << endl << "3 stage" << endl;
  57. ret = feistel(ret, keys[2]);
  58. cout << endl << "4 stage" << endl;
  59. ret = feistel(ret, keys[3]);
  60.  
  61. temp = ret >> 8;
  62. ret = (ret << 8) | temp;
  63.  
  64. cout <<endl<<endl << "1 stage" << endl;
  65. ret = feistel(ret, keys[3]);
  66. cout << endl << "2 stage" << endl;
  67. ret = feistel(ret, keys[2]);
  68. cout << endl << "3 stage" << endl;
  69. ret = feistel(ret, keys[1]);
  70. cout << endl << "4 stage" << endl;
  71. ret = feistel(ret, keys[0]);
  72.  
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement