Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Example program
- #include <iostream>
- #include <string>
- #include <bitset>
- using namespace std;
- uint8_t lookupLeft[] = {11,8,3,14,10,12,1,4,9,6,2,13,15,5,0,7};
- uint8_t lookupRight[] = {8,14,4,11,1,6,0,3,10,12,5,9,7,15,2,13};
- uint8_t keys[] = {
- 0xde, 0xad, 0xbe, 0xef
- };
- uint16_t feistel(uint16_t input, uint8_t key)
- {
- uint8_t leftIn, rightIn;
- uint8_t leftOut, rightOut;
- uint8_t temp, temp1;
- uint16_t output;
- leftIn = (input & 0b1111111100000000) >> 8;
- rightIn = input & 0b0000000011111111;
- cout << "input "<< bitset<8>(leftIn) << ' ' << bitset<8>(rightIn) << endl;
- temp = rightIn ^ key;
- cout << "1xor " << bitset<8>(temp) << endl;
- temp1 = (lookupLeft[(temp & 0b11110000) >> 4] << 4) | lookupRight[temp & 0b00001111];
- temp = (lookupLeft[(temp & 0b11110000) >> 4] ) | lookupRight[temp & 0b00001111] << 4;
- cout << "lookup " << bitset<8>(temp1) << endl;
- cout << "reverse " << bitset<8>(temp) << endl;
- leftOut = rightIn;
- rightOut = temp ^ leftIn;
- output = (leftOut << 8) | (rightOut);
- cout << "output " << bitset<8>(output >> 8) << ' ' << bitset<8>(output) << endl;
- return output;
- }
- int main()
- {
- uint16_t input = 0b0101100100000010;
- uint16_t ret, temp;
- cout << "1 stage" << endl;
- ret = feistel(input, keys[0]);
- cout << endl << "2 stage" << endl;
- ret = feistel(ret, keys[1]);
- cout << endl << "3 stage" << endl;
- ret = feistel(ret, keys[2]);
- cout << endl << "4 stage" << endl;
- ret = feistel(ret, keys[3]);
- temp = ret >> 8;
- ret = (ret << 8) | temp;
- cout <<endl<<endl << "1 stage" << endl;
- ret = feistel(ret, keys[3]);
- cout << endl << "2 stage" << endl;
- ret = feistel(ret, keys[2]);
- cout << endl << "3 stage" << endl;
- ret = feistel(ret, keys[1]);
- cout << endl << "4 stage" << endl;
- ret = feistel(ret, keys[0]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement