Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- void encipher(long *v, long *k)
- {
- long v0 = v[0], v1 = v[1];
- long sum = 0;
- long delta = 0x9e3779b9;
- short rounds = 32;
- for(long i = 0; i<rounds; i++)
- {
- v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
- sum += delta;
- v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
- }
- v[0] = v0;
- v[1] = v1;
- }
- void decipher(long* v, long *key) {
- unsigned int i;
- short rounds = 32;
- long v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*rounds;
- for (i=0; i < rounds; i++) {
- v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
- sum -= delta;
- v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
- }
- v[0]=v0; v[1]=v1;
- }
- int main(){
- long data[2]; // v0 and v1, 64bits
- data[0] = 1;
- data[1] = 1;
- long key[4]; // 4 * 4 bytes = 16bytes = 128bits
- key[0] = 0x12345678;
- key[1] = 0x90ABCDEF;
- key[2] = 0xFEDCBA09;
- key[3] = 0x87654321;
- cout << "READ: \t\t" << data[0] << endl << "\t\t" << data[1] << endl;
- encipher(data, key);
- cout << "ENCIPHERED: \t" << data[0] << endl << "\t\t" << data[1] << endl;
- decipher(data, key);
- cout << "DECIPHERED: \t" << data[0] << endl << "\t\t" << data[1] << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement