/* Tiny Encryption Algorithm Public domain */ void encrypt(unsigned long* v, unsigned long* k) { unsigned long v0=v[0], v1=v[1], sum=0, i; /* set up */ unsigned long delta=0x9e3779b9; /* a key schedule constant */ unsigned long k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */ for (i=0; i < 32; i++) { /* basic cycle start */ sum += delta; v0 += (v1<<4)+k0 ^ v1+sum ^ (v1>>5)+k1; v1 += (v0<<4)+k2 ^ v0+sum ^ (v0>>5)+k3; /* end cycle */ } v[0]=v0; v[1]=v1; } void decrypt(unsigned long* v, unsigned long* k) { unsigned long v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up */ unsigned long delta=0x9e3779b9; /* a key schedule constant */ unsigned long k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */ for(i=0; i<32; i++) { /* basic cycle start */ v1 -= (v0 << 4)+k2 ^ v0+sum ^ (v0 >> 5)+k3; v0 -= (v1 << 4)+k0 ^ v1+sum ^ (v1 >> 5)+k1; sum -= delta; /* end cycle */ } v[0]=v0; v[1]=v1; }