Class that implements the xTEA encryption algorithm.
This enables you to encrypt data without requiring mcrypt.
From the C source: ----------------------------------------- The Tiny Encryption Algorithm (TEA) by David Wheeler and Roger Needham of the Cambridge Computer Laboratory.
Placed in the Public Domain by David Wheeler and Roger Needham.
**** ANSI C VERSION (New Variant) ****
Notes:
TEA is a Feistel cipher with XOR and and addition as the non-linear mixing functions.
Takes 64 bits of data in v[0] and v[1]. Returns 64 bits of data in w[0] and w[1]. Takes 128 bits of key in k[0] - k[3].
TEA can be operated in any of the modes of DES. Cipher Block Chaining is, for example, simple to implement.
n is the number of iterations. 32 is ample, 16 is sufficient, as few as eight may be OK. The algorithm achieves good dispersion after six iterations. The iteration count can be made variable if required.
Note this is optimised for 32-bit CPUs with fast shift capabilities. It can very easily be ported to assembly language on most CPUs.
delta is chosen to be the real part of (the golden ratio Sqrt(5/4) - 1/2 ~ 0.618034 multiplied by 2^32).
This version has been amended to foil two weaknesses identified by David A. Wagner (daw@cs.berkeley.edu): 1) effective key length of old-variant TEA was 126 not 128 bits 2) a related key attack was possible although impractical.
void encipher(unsigned long *const v,unsigned long *const w, const unsigned long *const k) { register unsigned long y=v[0],z=v[1],sum=0,delta=0x9E3779B9,n=32;
while(n-->0) { y+= (z4 ^ z>>5) + z ^ sum + k[sum&3]; sum += delta; z+= (y4 ^ y>>5) + y ^ sum + k[sum>>11 & 3]; }
w[0]=y; w[1]=z; }
void decipher(unsigned long *const v,unsigned long *const w, const unsigned long *const k) { register unsigned long y=v[0],z=v[1],sum=0xC6EF3720, delta=0x9E3779B9,n=32;
w[0]=y; w[1]=z; }
-----------------------------------------
Located in /Xtea2.php (line 120)
Constructor, sets the number of iterations.
Decrypt an encrypted string using a specific key.
Encrypt a string using a specific key.
Set the number of iterations to use.
Handle proper unsigned add, dealing with PHP's signed add.
Decipher a single long (32-bit) value.
Encipher a single long (32-bit) value.
Convert a hexadecimal string to a binary string (e.g. convert "616263" to "abc").
Convert long to character string.
Resize data string to a multiple of specified size.
Handle proper unsigned right shift, dealing with PHP's signed shift.
Convert string to array of long.
Documentation generated on Wed, 8 Sep 2004 21:20:46 +0200 by phpDocumentor 1.3.0RC3