Rearrange the file tree.
[u/mdw/catacomb] / symm / t / tea-test.c
CommitLineData
ea937a0e 1#include <stdio.h>
2#include <catacomb/fibrand.h>
3
4/* --- Needham and Wheeler's original code --- *
5 *
6 * Almost. I changed the types from long to unsigned long.
7 */
8
45c0fd36 9void code(unsigned long* v, unsigned long* k) {
ea937a0e 10unsigned long y=v[0],z=v[1], sum=0, /* set up */
45c0fd36
MW
11 delta=0x9e3779b9, n=32 ; /* a key schedule constant */
12while (n-->0) { /* basic cycle start */
ea937a0e 13 sum += delta ;
14 y += (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] ;
15 z += (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] ; /* end cycle */
45c0fd36 16 }
ea937a0e 17v[0]=y ; v[1]=z ; }
18
19int main(void)
20{
21 unsigned long k[4] = { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff };
22 unsigned long p[2] = { 0x01234567, 0x89abcdef };
23 fibrand f;
24
25 int i;
26
27 printf(" %08lx%08lx%08lx%08lx %08lx%08lx ",
28 k[0], k[1], k[2], k[3], p[0], p[1]);
29 code(p, k);
30 printf("%08lx%08lx;\n", p[0], p[1]);
31
32 fibrand_lcseed(&f, 0);
33 for (i = 1; i < 64; i++) {
34 k[0] = fibrand_step(&f);
35 k[1] = fibrand_step(&f);
36 k[2] = fibrand_step(&f);
37 k[3] = fibrand_step(&f);
38 p[0] = fibrand_step(&f);
39 p[1] = fibrand_step(&f);
40 printf(" %08lx%08lx%08lx%08lx %08lx%08lx ",
41 k[0], k[1], k[2], k[3], p[0], p[1]);
42 code(p, k);
43 printf("%08lx%08lx;\n", p[0], p[1]);
44 }
45c0fd36 45
ea937a0e 46 return (0);
47}