X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/165c059ff958e6a98cdaf42d5d4ffd96f7646366..ea937a0ebd081c146194a848ff3ca3829265a341:/tests/xtea-test.c diff --git a/tests/xtea-test.c b/tests/xtea-test.c new file mode 100644 index 0000000..4880905 --- /dev/null +++ b/tests/xtea-test.c @@ -0,0 +1,60 @@ +#include +#include + +/* --- Needham and Wheeler's original code --- * + * + * Almost. I changed the types from long to unsigned long. + */ + +void tean(unsigned long * v, unsigned long * k, long N) { +unsigned long y=v[0], z=v[1], DELTA=0x9e3779b9 ; +if (N>0) { + /* coding */ + unsigned long limit=DELTA*N, sum=0 ; + while (sum!=limit) + y+= (z<<4 ^ z>>5) + z ^ sum + k[sum&3], + sum+=DELTA, + z+= (y<<4 ^ y>>5) + y ^ sum + k[sum>>11 &3] ; + } +else { + + /* decoding */ + unsigned long sum=DELTA*(-N) ; + while (sum) + z-= (y<<4 ^ y>>5) + y ^ sum + k[sum>>11 &3], + sum-=DELTA, + y-= (z<<4 ^ z>>5) + z ^ sum + k[sum&3]; + } +v[0]=y, v[1]=z ; +return ; +} + +int main(void) +{ + unsigned long k[4] = { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff }; + unsigned long p[2] = { 0x01234567, 0x89abcdef }; + fibrand f; + + int i; + + printf(" %08lx%08lx%08lx%08lx %08lx%08lx ", + k[0], k[1], k[2], k[3], p[0], p[1]); + tean(p, k, 32); + printf("%08lx%08lx;\n", p[0], p[1]); + + fibrand_lcseed(&f, 0); + for (i = 1; i < 64; i++) { + k[0] = fibrand_step(&f); + k[1] = fibrand_step(&f); + k[2] = fibrand_step(&f); + k[3] = fibrand_step(&f); + p[0] = fibrand_step(&f); + p[1] = fibrand_step(&f); + printf(" %08lx%08lx%08lx%08lx %08lx%08lx ", + k[0], k[1], k[2], k[3], p[0], p[1]); + tean(p, k, 32); + printf("%08lx%08lx;\n", p[0], p[1]); + } + + return (0); +}