2 #include <catacomb/fibrand.h>
4 /* --- Needham and Wheeler's original code --- *
6 * Almost. I changed the types from long to unsigned long.
9 void code(unsigned long* v
, unsigned long* k
) {
10 unsigned long y
=v
[0],z
=v
[1], sum
=0, /* set up */
11 delta
=0x9e3779b9, n
=32 ; /* a key schedule constant */
12 while (n
-->0) { /* basic cycle start */
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 */
21 unsigned long k
[4] = { 0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff };
22 unsigned long p
[2] = { 0x01234567, 0x89abcdef };
27 printf(" %08lx%08lx%08lx%08lx %08lx%08lx ",
28 k
[0], k
[1], k
[2], k
[3], p
[0], p
[1]);
30 printf("%08lx%08lx;\n", p
[0], p
[1]);
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]);
43 printf("%08lx%08lx;\n", p
[0], p
[1]);