#include 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> 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; }