]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/unbound/util/storage/lookup3.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / unbound / util / storage / lookup3.c
1 /*
2   February 2013(Wouter) patch defines for BSD endianness, from Brad Smith.
3   January 2012(Wouter) added randomised initial value, fallout from 28c3.
4   March 2007(Wouter) adapted from lookup3.c original, add config.h include.
5      added #ifdef VALGRIND to remove 298,384,660 'unused variable k8' warnings.
6      added include of lookup3.h to check definitions match declarations.
7      removed include of stdint - config.h takes care of platform independence.
8   url http://burtleburtle.net/bob/hash/index.html.
9 */
10 /*
11 -------------------------------------------------------------------------------
12 lookup3.c, by Bob Jenkins, May 2006, Public Domain.
13
14 These are functions for producing 32-bit hashes for hash table lookup.
15 hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final() 
16 are externally useful functions.  Routines to test the hash are included 
17 if SELF_TEST is defined.  You can use this free for any purpose.  It's in
18 the public domain.  It has no warranty.
19
20 You probably want to use hashlittle().  hashlittle() and hashbig()
21 hash byte arrays.  hashlittle() is is faster than hashbig() on
22 little-endian machines.  Intel and AMD are little-endian machines.
23 On second thought, you probably want hashlittle2(), which is identical to
24 hashlittle() except it returns two 32-bit hashes for the price of one.  
25 You could implement hashbig2() if you wanted but I haven't bothered here.
26
27 If you want to find a hash of, say, exactly 7 integers, do
28   a = i1;  b = i2;  c = i3;
29   mix(a,b,c);
30   a += i4; b += i5; c += i6;
31   mix(a,b,c);
32   a += i7;
33   final(a,b,c);
34 then use c as the hash value.  If you have a variable length array of
35 4-byte integers to hash, use hashword().  If you have a byte array (like
36 a character string), use hashlittle().  If you have several byte arrays, or
37 a mix of things, see the comments above hashlittle().  
38
39 Why is this so big?  I read 12 bytes at a time into 3 4-byte integers, 
40 then mix those integers.  This is fast (you can do a lot more thorough
41 mixing with 12*3 instructions on 3 integers than you can with 3 instructions
42 on 1 byte), but shoehorning those bytes into integers efficiently is messy.
43 -------------------------------------------------------------------------------
44 */
45 /*#define SELF_TEST 1*/
46
47 #include "config.h"
48 #include "util/storage/lookup3.h"
49 #include <stdio.h>      /* defines printf for tests */
50 #include <time.h>       /* defines time_t for timings in the test */
51 /*#include <stdint.h>     defines uint32_t etc  (from config.h) */
52 #include <sys/param.h>  /* attempt to define endianness */
53 #ifdef HAVE_SYS_TYPES_H
54 # include <sys/types.h> /* attempt to define endianness (solaris) */
55 #endif
56 #if defined(linux) || defined(__OpenBSD__)
57 #  ifdef HAVE_ENDIAN_H
58 #    include <endian.h>    /* attempt to define endianness */
59 #  else
60 #    include <machine/endian.h> /* on older OpenBSD */
61 #  endif
62 #endif
63 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
64 #include <sys/endian.h> /* attempt to define endianness */
65 #endif
66
67 /* random initial value */
68 static uint32_t raninit = (uint32_t)0xdeadbeef;
69
70 void
71 hash_set_raninit(uint32_t v)
72 {
73         raninit = v;
74 }
75
76 /*
77  * My best guess at if you are big-endian or little-endian.  This may
78  * need adjustment.
79  */
80 #if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \
81      __BYTE_ORDER == __LITTLE_ENDIAN) || \
82     (defined(i386) || defined(__i386__) || defined(__i486__) || \
83      defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL) || defined(__x86))
84 # define HASH_LITTLE_ENDIAN 1
85 # define HASH_BIG_ENDIAN 0
86 #elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && \
87        __BYTE_ORDER == __BIG_ENDIAN) || \
88       (defined(sparc) || defined(__sparc) || defined(__sparc__) || defined(POWERPC) || defined(mc68000) || defined(sel))
89 # define HASH_LITTLE_ENDIAN 0
90 # define HASH_BIG_ENDIAN 1
91 #elif defined(_MACHINE_ENDIAN_H_)
92 /* test for machine_endian_h protects failure if some are empty strings */
93 # if defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && _BYTE_ORDER == _BIG_ENDIAN
94 #  define HASH_LITTLE_ENDIAN 0
95 #  define HASH_BIG_ENDIAN 1
96 # endif
97 # if defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && _BYTE_ORDER == _LITTLE_ENDIAN
98 #  define HASH_LITTLE_ENDIAN 1
99 #  define HASH_BIG_ENDIAN 0
100 # endif /* _MACHINE_ENDIAN_H_ */
101 #else
102 # define HASH_LITTLE_ENDIAN 0
103 # define HASH_BIG_ENDIAN 0
104 #endif
105
106 #define hashsize(n) ((uint32_t)1<<(n))
107 #define hashmask(n) (hashsize(n)-1)
108 #define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k))))
109
110 /*
111 -------------------------------------------------------------------------------
112 mix -- mix 3 32-bit values reversibly.
113
114 This is reversible, so any information in (a,b,c) before mix() is
115 still in (a,b,c) after mix().
116
117 If four pairs of (a,b,c) inputs are run through mix(), or through
118 mix() in reverse, there are at least 32 bits of the output that
119 are sometimes the same for one pair and different for another pair.
120 This was tested for:
121 * pairs that differed by one bit, by two bits, in any combination
122   of top bits of (a,b,c), or in any combination of bottom bits of
123   (a,b,c).
124 * "differ" is defined as +, -, ^, or ~^.  For + and -, I transformed
125   the output delta to a Gray code (a^(a>>1)) so a string of 1's (as
126   is commonly produced by subtraction) look like a single 1-bit
127   difference.
128 * the base values were pseudorandom, all zero but one bit set, or 
129   all zero plus a counter that starts at zero.
130
131 Some k values for my "a-=c; a^=rot(c,k); c+=b;" arrangement that
132 satisfy this are
133     4  6  8 16 19  4
134     9 15  3 18 27 15
135    14  9  3  7 17  3
136 Well, "9 15 3 18 27 15" didn't quite get 32 bits diffing
137 for "differ" defined as + with a one-bit base and a two-bit delta.  I
138 used http://burtleburtle.net/bob/hash/avalanche.html to choose 
139 the operations, constants, and arrangements of the variables.
140
141 This does not achieve avalanche.  There are input bits of (a,b,c)
142 that fail to affect some output bits of (a,b,c), especially of a.  The
143 most thoroughly mixed value is c, but it doesn't really even achieve
144 avalanche in c.
145
146 This allows some parallelism.  Read-after-writes are good at doubling
147 the number of bits affected, so the goal of mixing pulls in the opposite
148 direction as the goal of parallelism.  I did what I could.  Rotates
149 seem to cost as much as shifts on every machine I could lay my hands
150 on, and rotates are much kinder to the top and bottom bits, so I used
151 rotates.
152 -------------------------------------------------------------------------------
153 */
154 #define mix(a,b,c) \
155 { \
156   a -= c;  a ^= rot(c, 4);  c += b; \
157   b -= a;  b ^= rot(a, 6);  a += c; \
158   c -= b;  c ^= rot(b, 8);  b += a; \
159   a -= c;  a ^= rot(c,16);  c += b; \
160   b -= a;  b ^= rot(a,19);  a += c; \
161   c -= b;  c ^= rot(b, 4);  b += a; \
162 }
163
164 /*
165 -------------------------------------------------------------------------------
166 final -- final mixing of 3 32-bit values (a,b,c) into c
167
168 Pairs of (a,b,c) values differing in only a few bits will usually
169 produce values of c that look totally different.  This was tested for
170 * pairs that differed by one bit, by two bits, in any combination
171   of top bits of (a,b,c), or in any combination of bottom bits of
172   (a,b,c).
173 * "differ" is defined as +, -, ^, or ~^.  For + and -, I transformed
174   the output delta to a Gray code (a^(a>>1)) so a string of 1's (as
175   is commonly produced by subtraction) look like a single 1-bit
176   difference.
177 * the base values were pseudorandom, all zero but one bit set, or 
178   all zero plus a counter that starts at zero.
179
180 These constants passed:
181  14 11 25 16 4 14 24
182  12 14 25 16 4 14 24
183 and these came close:
184   4  8 15 26 3 22 24
185  10  8 15 26 3 22 24
186  11  8 15 26 3 22 24
187 -------------------------------------------------------------------------------
188 */
189 #define final(a,b,c) \
190 { \
191   c ^= b; c -= rot(b,14); \
192   a ^= c; a -= rot(c,11); \
193   b ^= a; b -= rot(a,25); \
194   c ^= b; c -= rot(b,16); \
195   a ^= c; a -= rot(c,4);  \
196   b ^= a; b -= rot(a,14); \
197   c ^= b; c -= rot(b,24); \
198 }
199
200 /*
201 --------------------------------------------------------------------
202  This works on all machines.  To be useful, it requires
203  -- that the key be an array of uint32_t's, and
204  -- that the length be the number of uint32_t's in the key
205
206  The function hashword() is identical to hashlittle() on little-endian
207  machines, and identical to hashbig() on big-endian machines,
208  except that the length has to be measured in uint32_ts rather than in
209  bytes.  hashlittle() is more complicated than hashword() only because
210  hashlittle() has to dance around fitting the key bytes into registers.
211 --------------------------------------------------------------------
212 */
213 uint32_t hashword(
214 const uint32_t *k,                   /* the key, an array of uint32_t values */
215 size_t          length,               /* the length of the key, in uint32_ts */
216 uint32_t        initval)         /* the previous hash, or an arbitrary value */
217 {
218   uint32_t a,b,c;
219
220   /* Set up the internal state */
221   a = b = c = raninit + (((uint32_t)length)<<2) + initval;
222
223   /*------------------------------------------------- handle most of the key */
224   while (length > 3)
225   {
226     a += k[0];
227     b += k[1];
228     c += k[2];
229     mix(a,b,c);
230     length -= 3;
231     k += 3;
232   }
233
234   /*------------------------------------------- handle the last 3 uint32_t's */
235   switch(length)                     /* all the case statements fall through */
236   { 
237   case 3 : c+=k[2];
238   case 2 : b+=k[1];
239   case 1 : a+=k[0];
240     final(a,b,c);
241   case 0:     /* case 0: nothing left to add */
242     break;
243   }
244   /*------------------------------------------------------ report the result */
245   return c;
246 }
247
248
249 #ifdef SELF_TEST
250
251 /*
252 --------------------------------------------------------------------
253 hashword2() -- same as hashword(), but take two seeds and return two
254 32-bit values.  pc and pb must both be nonnull, and *pc and *pb must
255 both be initialized with seeds.  If you pass in (*pb)==0, the output 
256 (*pc) will be the same as the return value from hashword().
257 --------------------------------------------------------------------
258 */
259 void hashword2 (
260 const uint32_t *k,                   /* the key, an array of uint32_t values */
261 size_t          length,               /* the length of the key, in uint32_ts */
262 uint32_t       *pc,                      /* IN: seed OUT: primary hash value */
263 uint32_t       *pb)               /* IN: more seed OUT: secondary hash value */
264 {
265   uint32_t a,b,c;
266
267   /* Set up the internal state */
268   a = b = c = raninit + ((uint32_t)(length<<2)) + *pc;
269   c += *pb;
270
271   /*------------------------------------------------- handle most of the key */
272   while (length > 3)
273   {
274     a += k[0];
275     b += k[1];
276     c += k[2];
277     mix(a,b,c);
278     length -= 3;
279     k += 3;
280   }
281
282   /*------------------------------------------- handle the last 3 uint32_t's */
283   switch(length)                     /* all the case statements fall through */
284   { 
285   case 3 : c+=k[2];
286   case 2 : b+=k[1];
287   case 1 : a+=k[0];
288     final(a,b,c);
289   case 0:     /* case 0: nothing left to add */
290     break;
291   }
292   /*------------------------------------------------------ report the result */
293   *pc=c; *pb=b;
294 }
295
296 #endif /* SELF_TEST */
297
298 /*
299 -------------------------------------------------------------------------------
300 hashlittle() -- hash a variable-length key into a 32-bit value
301   k       : the key (the unaligned variable-length array of bytes)
302   length  : the length of the key, counting by bytes
303   initval : can be any 4-byte value
304 Returns a 32-bit value.  Every bit of the key affects every bit of
305 the return value.  Two keys differing by one or two bits will have
306 totally different hash values.
307
308 The best hash table sizes are powers of 2.  There is no need to do
309 mod a prime (mod is sooo slow!).  If you need less than 32 bits,
310 use a bitmask.  For example, if you need only 10 bits, do
311   h = (h & hashmask(10));
312 In which case, the hash table should have hashsize(10) elements.
313
314 If you are hashing n strings (uint8_t **)k, do it like this:
315   for (i=0, h=0; i<n; ++i) h = hashlittle( k[i], len[i], h);
316
317 By Bob Jenkins, 2006.  bob_jenkins@burtleburtle.net.  You may use this
318 code any way you wish, private, educational, or commercial.  It's free.
319
320 Use for hash table lookup, or anything where one collision in 2^^32 is
321 acceptable.  Do NOT use for cryptographic purposes.
322 -------------------------------------------------------------------------------
323 */
324
325 uint32_t hashlittle( const void *key, size_t length, uint32_t initval)
326 {
327   uint32_t a,b,c;                                          /* internal state */
328   union { const void *ptr; size_t i; } u;     /* needed for Mac Powerbook G4 */
329
330   /* Set up the internal state */
331   a = b = c = raninit + ((uint32_t)length) + initval;
332
333   u.ptr = key;
334   if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
335     const uint32_t *k = (const uint32_t *)key;         /* read 32-bit chunks */
336 #ifdef VALGRIND
337     const uint8_t  *k8;
338 #endif
339
340     /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */
341     while (length > 12)
342     {
343       a += k[0];
344       b += k[1];
345       c += k[2];
346       mix(a,b,c);
347       length -= 12;
348       k += 3;
349     }
350
351     /*----------------------------- handle the last (probably partial) block */
352     /* 
353      * "k[2]&0xffffff" actually reads beyond the end of the string, but
354      * then masks off the part it's not allowed to read.  Because the
355      * string is aligned, the masked-off tail is in the same word as the
356      * rest of the string.  Every machine with memory protection I've seen
357      * does it on word boundaries, so is OK with this.  But VALGRIND will
358      * still catch it and complain.  The masking trick does make the hash
359      * noticably faster for short strings (like English words).
360      */
361 #ifndef VALGRIND
362
363     switch(length)
364     {
365     case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
366     case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break;
367     case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break;
368     case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break;
369     case 8 : b+=k[1]; a+=k[0]; break;
370     case 7 : b+=k[1]&0xffffff; a+=k[0]; break;
371     case 6 : b+=k[1]&0xffff; a+=k[0]; break;
372     case 5 : b+=k[1]&0xff; a+=k[0]; break;
373     case 4 : a+=k[0]; break;
374     case 3 : a+=k[0]&0xffffff; break;
375     case 2 : a+=k[0]&0xffff; break;
376     case 1 : a+=k[0]&0xff; break;
377     case 0 : return c;              /* zero length strings require no mixing */
378     }
379
380 #else /* make valgrind happy */
381
382     k8 = (const uint8_t *)k;
383     switch(length)
384     {
385     case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
386     case 11: c+=((uint32_t)k8[10])<<16;  /* fall through */
387     case 10: c+=((uint32_t)k8[9])<<8;    /* fall through */
388     case 9 : c+=k8[8];                   /* fall through */
389     case 8 : b+=k[1]; a+=k[0]; break;
390     case 7 : b+=((uint32_t)k8[6])<<16;   /* fall through */
391     case 6 : b+=((uint32_t)k8[5])<<8;    /* fall through */
392     case 5 : b+=k8[4];                   /* fall through */
393     case 4 : a+=k[0]; break;
394     case 3 : a+=((uint32_t)k8[2])<<16;   /* fall through */
395     case 2 : a+=((uint32_t)k8[1])<<8;    /* fall through */
396     case 1 : a+=k8[0]; break;
397     case 0 : return c;
398     }
399
400 #endif /* !valgrind */
401
402   } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {
403     const uint16_t *k = (const uint16_t *)key;         /* read 16-bit chunks */
404     const uint8_t  *k8;
405
406     /*--------------- all but last block: aligned reads and different mixing */
407     while (length > 12)
408     {
409       a += k[0] + (((uint32_t)k[1])<<16);
410       b += k[2] + (((uint32_t)k[3])<<16);
411       c += k[4] + (((uint32_t)k[5])<<16);
412       mix(a,b,c);
413       length -= 12;
414       k += 6;
415     }
416
417     /*----------------------------- handle the last (probably partial) block */
418     k8 = (const uint8_t *)k;
419     switch(length)
420     {
421     case 12: c+=k[4]+(((uint32_t)k[5])<<16);
422              b+=k[2]+(((uint32_t)k[3])<<16);
423              a+=k[0]+(((uint32_t)k[1])<<16);
424              break;
425     case 11: c+=((uint32_t)k8[10])<<16;     /* fall through */
426     case 10: c+=k[4];
427              b+=k[2]+(((uint32_t)k[3])<<16);
428              a+=k[0]+(((uint32_t)k[1])<<16);
429              break;
430     case 9 : c+=k8[8];                      /* fall through */
431     case 8 : b+=k[2]+(((uint32_t)k[3])<<16);
432              a+=k[0]+(((uint32_t)k[1])<<16);
433              break;
434     case 7 : b+=((uint32_t)k8[6])<<16;      /* fall through */
435     case 6 : b+=k[2];
436              a+=k[0]+(((uint32_t)k[1])<<16);
437              break;
438     case 5 : b+=k8[4];                      /* fall through */
439     case 4 : a+=k[0]+(((uint32_t)k[1])<<16);
440              break;
441     case 3 : a+=((uint32_t)k8[2])<<16;      /* fall through */
442     case 2 : a+=k[0];
443              break;
444     case 1 : a+=k8[0];
445              break;
446     case 0 : return c;                     /* zero length requires no mixing */
447     }
448
449   } else {                        /* need to read the key one byte at a time */
450     const uint8_t *k = (const uint8_t *)key;
451
452     /*--------------- all but the last block: affect some 32 bits of (a,b,c) */
453     while (length > 12)
454     {
455       a += k[0];
456       a += ((uint32_t)k[1])<<8;
457       a += ((uint32_t)k[2])<<16;
458       a += ((uint32_t)k[3])<<24;
459       b += k[4];
460       b += ((uint32_t)k[5])<<8;
461       b += ((uint32_t)k[6])<<16;
462       b += ((uint32_t)k[7])<<24;
463       c += k[8];
464       c += ((uint32_t)k[9])<<8;
465       c += ((uint32_t)k[10])<<16;
466       c += ((uint32_t)k[11])<<24;
467       mix(a,b,c);
468       length -= 12;
469       k += 12;
470     }
471
472     /*-------------------------------- last block: affect all 32 bits of (c) */
473     switch(length)                   /* all the case statements fall through */
474     {
475     case 12: c+=((uint32_t)k[11])<<24;
476     case 11: c+=((uint32_t)k[10])<<16;
477     case 10: c+=((uint32_t)k[9])<<8;
478     case 9 : c+=k[8];
479     case 8 : b+=((uint32_t)k[7])<<24;
480     case 7 : b+=((uint32_t)k[6])<<16;
481     case 6 : b+=((uint32_t)k[5])<<8;
482     case 5 : b+=k[4];
483     case 4 : a+=((uint32_t)k[3])<<24;
484     case 3 : a+=((uint32_t)k[2])<<16;
485     case 2 : a+=((uint32_t)k[1])<<8;
486     case 1 : a+=k[0];
487              break;
488     case 0 : return c;
489     }
490   }
491
492   final(a,b,c);
493   return c;
494 }
495
496 #ifdef SELF_TEST
497
498 /*
499  * hashlittle2: return 2 32-bit hash values
500  *
501  * This is identical to hashlittle(), except it returns two 32-bit hash
502  * values instead of just one.  This is good enough for hash table
503  * lookup with 2^^64 buckets, or if you want a second hash if you're not
504  * happy with the first, or if you want a probably-unique 64-bit ID for
505  * the key.  *pc is better mixed than *pb, so use *pc first.  If you want
506  * a 64-bit value do something like "*pc + (((uint64_t)*pb)<<32)".
507  */
508 void hashlittle2( 
509   const void *key,       /* the key to hash */
510   size_t      length,    /* length of the key */
511   uint32_t   *pc,        /* IN: primary initval, OUT: primary hash */
512   uint32_t   *pb)        /* IN: secondary initval, OUT: secondary hash */
513 {
514   uint32_t a,b,c;                                          /* internal state */
515   union { const void *ptr; size_t i; } u;     /* needed for Mac Powerbook G4 */
516
517   /* Set up the internal state */
518   a = b = c = raninit + ((uint32_t)length) + *pc;
519   c += *pb;
520
521   u.ptr = key;
522   if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
523     const uint32_t *k = (const uint32_t *)key;         /* read 32-bit chunks */
524 #ifdef VALGRIND
525     const uint8_t  *k8;
526 #endif
527
528     /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */
529     while (length > 12)
530     {
531       a += k[0];
532       b += k[1];
533       c += k[2];
534       mix(a,b,c);
535       length -= 12;
536       k += 3;
537     }
538
539     /*----------------------------- handle the last (probably partial) block */
540     /* 
541      * "k[2]&0xffffff" actually reads beyond the end of the string, but
542      * then masks off the part it's not allowed to read.  Because the
543      * string is aligned, the masked-off tail is in the same word as the
544      * rest of the string.  Every machine with memory protection I've seen
545      * does it on word boundaries, so is OK with this.  But VALGRIND will
546      * still catch it and complain.  The masking trick does make the hash
547      * noticably faster for short strings (like English words).
548      */
549 #ifndef VALGRIND
550
551     switch(length)
552     {
553     case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
554     case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break;
555     case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break;
556     case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break;
557     case 8 : b+=k[1]; a+=k[0]; break;
558     case 7 : b+=k[1]&0xffffff; a+=k[0]; break;
559     case 6 : b+=k[1]&0xffff; a+=k[0]; break;
560     case 5 : b+=k[1]&0xff; a+=k[0]; break;
561     case 4 : a+=k[0]; break;
562     case 3 : a+=k[0]&0xffffff; break;
563     case 2 : a+=k[0]&0xffff; break;
564     case 1 : a+=k[0]&0xff; break;
565     case 0 : *pc=c; *pb=b; return;  /* zero length strings require no mixing */
566     }
567
568 #else /* make valgrind happy */
569
570     k8 = (const uint8_t *)k;
571     switch(length)
572     {
573     case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
574     case 11: c+=((uint32_t)k8[10])<<16;  /* fall through */
575     case 10: c+=((uint32_t)k8[9])<<8;    /* fall through */
576     case 9 : c+=k8[8];                   /* fall through */
577     case 8 : b+=k[1]; a+=k[0]; break;
578     case 7 : b+=((uint32_t)k8[6])<<16;   /* fall through */
579     case 6 : b+=((uint32_t)k8[5])<<8;    /* fall through */
580     case 5 : b+=k8[4];                   /* fall through */
581     case 4 : a+=k[0]; break;
582     case 3 : a+=((uint32_t)k8[2])<<16;   /* fall through */
583     case 2 : a+=((uint32_t)k8[1])<<8;    /* fall through */
584     case 1 : a+=k8[0]; break;
585     case 0 : *pc=c; *pb=b; return;  /* zero length strings require no mixing */
586     }
587
588 #endif /* !valgrind */
589
590   } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {
591     const uint16_t *k = (const uint16_t *)key;         /* read 16-bit chunks */
592     const uint8_t  *k8;
593
594     /*--------------- all but last block: aligned reads and different mixing */
595     while (length > 12)
596     {
597       a += k[0] + (((uint32_t)k[1])<<16);
598       b += k[2] + (((uint32_t)k[3])<<16);
599       c += k[4] + (((uint32_t)k[5])<<16);
600       mix(a,b,c);
601       length -= 12;
602       k += 6;
603     }
604
605     /*----------------------------- handle the last (probably partial) block */
606     k8 = (const uint8_t *)k;
607     switch(length)
608     {
609     case 12: c+=k[4]+(((uint32_t)k[5])<<16);
610              b+=k[2]+(((uint32_t)k[3])<<16);
611              a+=k[0]+(((uint32_t)k[1])<<16);
612              break;
613     case 11: c+=((uint32_t)k8[10])<<16;     /* fall through */
614     case 10: c+=k[4];
615              b+=k[2]+(((uint32_t)k[3])<<16);
616              a+=k[0]+(((uint32_t)k[1])<<16);
617              break;
618     case 9 : c+=k8[8];                      /* fall through */
619     case 8 : b+=k[2]+(((uint32_t)k[3])<<16);
620              a+=k[0]+(((uint32_t)k[1])<<16);
621              break;
622     case 7 : b+=((uint32_t)k8[6])<<16;      /* fall through */
623     case 6 : b+=k[2];
624              a+=k[0]+(((uint32_t)k[1])<<16);
625              break;
626     case 5 : b+=k8[4];                      /* fall through */
627     case 4 : a+=k[0]+(((uint32_t)k[1])<<16);
628              break;
629     case 3 : a+=((uint32_t)k8[2])<<16;      /* fall through */
630     case 2 : a+=k[0];
631              break;
632     case 1 : a+=k8[0];
633              break;
634     case 0 : *pc=c; *pb=b; return;  /* zero length strings require no mixing */
635     }
636
637   } else {                        /* need to read the key one byte at a time */
638     const uint8_t *k = (const uint8_t *)key;
639
640     /*--------------- all but the last block: affect some 32 bits of (a,b,c) */
641     while (length > 12)
642     {
643       a += k[0];
644       a += ((uint32_t)k[1])<<8;
645       a += ((uint32_t)k[2])<<16;
646       a += ((uint32_t)k[3])<<24;
647       b += k[4];
648       b += ((uint32_t)k[5])<<8;
649       b += ((uint32_t)k[6])<<16;
650       b += ((uint32_t)k[7])<<24;
651       c += k[8];
652       c += ((uint32_t)k[9])<<8;
653       c += ((uint32_t)k[10])<<16;
654       c += ((uint32_t)k[11])<<24;
655       mix(a,b,c);
656       length -= 12;
657       k += 12;
658     }
659
660     /*-------------------------------- last block: affect all 32 bits of (c) */
661     switch(length)                   /* all the case statements fall through */
662     {
663     case 12: c+=((uint32_t)k[11])<<24;
664     case 11: c+=((uint32_t)k[10])<<16;
665     case 10: c+=((uint32_t)k[9])<<8;
666     case 9 : c+=k[8];
667     case 8 : b+=((uint32_t)k[7])<<24;
668     case 7 : b+=((uint32_t)k[6])<<16;
669     case 6 : b+=((uint32_t)k[5])<<8;
670     case 5 : b+=k[4];
671     case 4 : a+=((uint32_t)k[3])<<24;
672     case 3 : a+=((uint32_t)k[2])<<16;
673     case 2 : a+=((uint32_t)k[1])<<8;
674     case 1 : a+=k[0];
675              break;
676     case 0 : *pc=c; *pb=b; return;  /* zero length strings require no mixing */
677     }
678   }
679
680   final(a,b,c);
681   *pc=c; *pb=b;
682 }
683
684 #endif /* SELF_TEST */
685
686 #if 0   /* currently not used */
687
688 /*
689  * hashbig():
690  * This is the same as hashword() on big-endian machines.  It is different
691  * from hashlittle() on all machines.  hashbig() takes advantage of
692  * big-endian byte ordering. 
693  */
694 uint32_t hashbig( const void *key, size_t length, uint32_t initval)
695 {
696   uint32_t a,b,c;
697   union { const void *ptr; size_t i; } u; /* to cast key to (size_t) happily */
698
699   /* Set up the internal state */
700   a = b = c = raninit + ((uint32_t)length) + initval;
701
702   u.ptr = key;
703   if (HASH_BIG_ENDIAN && ((u.i & 0x3) == 0)) {
704     const uint32_t *k = (const uint32_t *)key;         /* read 32-bit chunks */
705 #ifdef VALGRIND
706     const uint8_t  *k8;
707 #endif
708
709     /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */
710     while (length > 12)
711     {
712       a += k[0];
713       b += k[1];
714       c += k[2];
715       mix(a,b,c);
716       length -= 12;
717       k += 3;
718     }
719
720     /*----------------------------- handle the last (probably partial) block */
721     /* 
722      * "k[2]<<8" actually reads beyond the end of the string, but
723      * then shifts out the part it's not allowed to read.  Because the
724      * string is aligned, the illegal read is in the same word as the
725      * rest of the string.  Every machine with memory protection I've seen
726      * does it on word boundaries, so is OK with this.  But VALGRIND will
727      * still catch it and complain.  The masking trick does make the hash
728      * noticably faster for short strings (like English words).
729      */
730 #ifndef VALGRIND
731
732     switch(length)
733     {
734     case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
735     case 11: c+=k[2]&0xffffff00; b+=k[1]; a+=k[0]; break;
736     case 10: c+=k[2]&0xffff0000; b+=k[1]; a+=k[0]; break;
737     case 9 : c+=k[2]&0xff000000; b+=k[1]; a+=k[0]; break;
738     case 8 : b+=k[1]; a+=k[0]; break;
739     case 7 : b+=k[1]&0xffffff00; a+=k[0]; break;
740     case 6 : b+=k[1]&0xffff0000; a+=k[0]; break;
741     case 5 : b+=k[1]&0xff000000; a+=k[0]; break;
742     case 4 : a+=k[0]; break;
743     case 3 : a+=k[0]&0xffffff00; break;
744     case 2 : a+=k[0]&0xffff0000; break;
745     case 1 : a+=k[0]&0xff000000; break;
746     case 0 : return c;              /* zero length strings require no mixing */
747     }
748
749 #else  /* make valgrind happy */
750
751     k8 = (const uint8_t *)k;
752     switch(length)                   /* all the case statements fall through */
753     {
754     case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
755     case 11: c+=((uint32_t)k8[10])<<8;  /* fall through */
756     case 10: c+=((uint32_t)k8[9])<<16;  /* fall through */
757     case 9 : c+=((uint32_t)k8[8])<<24;  /* fall through */
758     case 8 : b+=k[1]; a+=k[0]; break;
759     case 7 : b+=((uint32_t)k8[6])<<8;   /* fall through */
760     case 6 : b+=((uint32_t)k8[5])<<16;  /* fall through */
761     case 5 : b+=((uint32_t)k8[4])<<24;  /* fall through */
762     case 4 : a+=k[0]; break;
763     case 3 : a+=((uint32_t)k8[2])<<8;   /* fall through */
764     case 2 : a+=((uint32_t)k8[1])<<16;  /* fall through */
765     case 1 : a+=((uint32_t)k8[0])<<24; break;
766     case 0 : return c;
767     }
768
769 #endif /* !VALGRIND */
770
771   } else {                        /* need to read the key one byte at a time */
772     const uint8_t *k = (const uint8_t *)key;
773
774     /*--------------- all but the last block: affect some 32 bits of (a,b,c) */
775     while (length > 12)
776     {
777       a += ((uint32_t)k[0])<<24;
778       a += ((uint32_t)k[1])<<16;
779       a += ((uint32_t)k[2])<<8;
780       a += ((uint32_t)k[3]);
781       b += ((uint32_t)k[4])<<24;
782       b += ((uint32_t)k[5])<<16;
783       b += ((uint32_t)k[6])<<8;
784       b += ((uint32_t)k[7]);
785       c += ((uint32_t)k[8])<<24;
786       c += ((uint32_t)k[9])<<16;
787       c += ((uint32_t)k[10])<<8;
788       c += ((uint32_t)k[11]);
789       mix(a,b,c);
790       length -= 12;
791       k += 12;
792     }
793
794     /*-------------------------------- last block: affect all 32 bits of (c) */
795     switch(length)                   /* all the case statements fall through */
796     {
797     case 12: c+=k[11];
798     case 11: c+=((uint32_t)k[10])<<8;
799     case 10: c+=((uint32_t)k[9])<<16;
800     case 9 : c+=((uint32_t)k[8])<<24;
801     case 8 : b+=k[7];
802     case 7 : b+=((uint32_t)k[6])<<8;
803     case 6 : b+=((uint32_t)k[5])<<16;
804     case 5 : b+=((uint32_t)k[4])<<24;
805     case 4 : a+=k[3];
806     case 3 : a+=((uint32_t)k[2])<<8;
807     case 2 : a+=((uint32_t)k[1])<<16;
808     case 1 : a+=((uint32_t)k[0])<<24;
809              break;
810     case 0 : return c;
811     }
812   }
813
814   final(a,b,c);
815   return c;
816 }
817
818 #endif /* 0 == currently not used */
819
820 #ifdef SELF_TEST
821
822 /* used for timings */
823 void driver1()
824 {
825   uint8_t buf[256];
826   uint32_t i;
827   uint32_t h=0;
828   time_t a,z;
829
830   time(&a);
831   for (i=0; i<256; ++i) buf[i] = 'x';
832   for (i=0; i<1; ++i) 
833   {
834     h = hashlittle(&buf[0],1,h);
835   }
836   time(&z);
837   if (z-a > 0) printf("time %d %.8x\n", z-a, h);
838 }
839
840 /* check that every input bit changes every output bit half the time */
841 #define HASHSTATE 1
842 #define HASHLEN   1
843 #define MAXPAIR 60
844 #define MAXLEN  70
845 void driver2()
846 {
847   uint8_t qa[MAXLEN+1], qb[MAXLEN+2], *a = &qa[0], *b = &qb[1];
848   uint32_t c[HASHSTATE], d[HASHSTATE], i=0, j=0, k, l, m=0, z;
849   uint32_t e[HASHSTATE],f[HASHSTATE],g[HASHSTATE],h[HASHSTATE];
850   uint32_t x[HASHSTATE],y[HASHSTATE];
851   uint32_t hlen;
852
853   printf("No more than %d trials should ever be needed \n",MAXPAIR/2);
854   for (hlen=0; hlen < MAXLEN; ++hlen)
855   {
856     z=0;
857     for (i=0; i<hlen; ++i)  /*----------------------- for each input byte, */
858     {
859       for (j=0; j<8; ++j)   /*------------------------ for each input bit, */
860       {
861         for (m=1; m<8; ++m) /*------------ for serveral possible initvals, */
862         {
863           for (l=0; l<HASHSTATE; ++l)
864             e[l]=f[l]=g[l]=h[l]=x[l]=y[l]=~((uint32_t)0);
865
866           /*---- check that every output bit is affected by that input bit */
867           for (k=0; k<MAXPAIR; k+=2)
868           { 
869             uint32_t finished=1;
870             /* keys have one bit different */
871             for (l=0; l<hlen+1; ++l) {a[l] = b[l] = (uint8_t)0;}
872             /* have a and b be two keys differing in only one bit */
873             a[i] ^= (k<<j);
874             a[i] ^= (k>>(8-j));
875              c[0] = hashlittle(a, hlen, m);
876             b[i] ^= ((k+1)<<j);
877             b[i] ^= ((k+1)>>(8-j));
878              d[0] = hashlittle(b, hlen, m);
879             /* check every bit is 1, 0, set, and not set at least once */
880             for (l=0; l<HASHSTATE; ++l)
881             {
882               e[l] &= (c[l]^d[l]);
883               f[l] &= ~(c[l]^d[l]);
884               g[l] &= c[l];
885               h[l] &= ~c[l];
886               x[l] &= d[l];
887               y[l] &= ~d[l];
888               if (e[l]|f[l]|g[l]|h[l]|x[l]|y[l]) finished=0;
889             }
890             if (finished) break;
891           }
892           if (k>z) z=k;
893           if (k==MAXPAIR) 
894           {
895              printf("Some bit didn't change: ");
896              printf("%.8x %.8x %.8x %.8x %.8x %.8x  ",
897                     e[0],f[0],g[0],h[0],x[0],y[0]);
898              printf("i %d j %d m %d len %d\n", i, j, m, hlen);
899           }
900           if (z==MAXPAIR) goto done;
901         }
902       }
903     }
904    done:
905     if (z < MAXPAIR)
906     {
907       printf("Mix success  %2d bytes  %2d initvals  ",i,m);
908       printf("required  %d  trials\n", z/2);
909     }
910   }
911   printf("\n");
912 }
913
914 /* Check for reading beyond the end of the buffer and alignment problems */
915 void driver3()
916 {
917   uint8_t buf[MAXLEN+20], *b;
918   uint32_t len;
919   uint8_t q[] = "This is the time for all good men to come to the aid of their country...";
920   uint32_t h;
921   uint8_t qq[] = "xThis is the time for all good men to come to the aid of their country...";
922   uint32_t i;
923   uint8_t qqq[] = "xxThis is the time for all good men to come to the aid of their country...";
924   uint32_t j;
925   uint8_t qqqq[] = "xxxThis is the time for all good men to come to the aid of their country...";
926   uint32_t ref,x,y;
927   uint8_t *p;
928
929   printf("Endianness.  These lines should all be the same (for values filled in):\n");
930   printf("%.8x                            %.8x                            %.8x\n",
931          hashword((const uint32_t *)q, (sizeof(q)-1)/4, 13),
932          hashword((const uint32_t *)q, (sizeof(q)-5)/4, 13),
933          hashword((const uint32_t *)q, (sizeof(q)-9)/4, 13));
934   p = q;
935   printf("%.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x\n",
936          hashlittle(p, sizeof(q)-1, 13), hashlittle(p, sizeof(q)-2, 13),
937          hashlittle(p, sizeof(q)-3, 13), hashlittle(p, sizeof(q)-4, 13),
938          hashlittle(p, sizeof(q)-5, 13), hashlittle(p, sizeof(q)-6, 13),
939          hashlittle(p, sizeof(q)-7, 13), hashlittle(p, sizeof(q)-8, 13),
940          hashlittle(p, sizeof(q)-9, 13), hashlittle(p, sizeof(q)-10, 13),
941          hashlittle(p, sizeof(q)-11, 13), hashlittle(p, sizeof(q)-12, 13));
942   p = &qq[1];
943   printf("%.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x\n",
944          hashlittle(p, sizeof(q)-1, 13), hashlittle(p, sizeof(q)-2, 13),
945          hashlittle(p, sizeof(q)-3, 13), hashlittle(p, sizeof(q)-4, 13),
946          hashlittle(p, sizeof(q)-5, 13), hashlittle(p, sizeof(q)-6, 13),
947          hashlittle(p, sizeof(q)-7, 13), hashlittle(p, sizeof(q)-8, 13),
948          hashlittle(p, sizeof(q)-9, 13), hashlittle(p, sizeof(q)-10, 13),
949          hashlittle(p, sizeof(q)-11, 13), hashlittle(p, sizeof(q)-12, 13));
950   p = &qqq[2];
951   printf("%.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x\n",
952          hashlittle(p, sizeof(q)-1, 13), hashlittle(p, sizeof(q)-2, 13),
953          hashlittle(p, sizeof(q)-3, 13), hashlittle(p, sizeof(q)-4, 13),
954          hashlittle(p, sizeof(q)-5, 13), hashlittle(p, sizeof(q)-6, 13),
955          hashlittle(p, sizeof(q)-7, 13), hashlittle(p, sizeof(q)-8, 13),
956          hashlittle(p, sizeof(q)-9, 13), hashlittle(p, sizeof(q)-10, 13),
957          hashlittle(p, sizeof(q)-11, 13), hashlittle(p, sizeof(q)-12, 13));
958   p = &qqqq[3];
959   printf("%.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x\n",
960          hashlittle(p, sizeof(q)-1, 13), hashlittle(p, sizeof(q)-2, 13),
961          hashlittle(p, sizeof(q)-3, 13), hashlittle(p, sizeof(q)-4, 13),
962          hashlittle(p, sizeof(q)-5, 13), hashlittle(p, sizeof(q)-6, 13),
963          hashlittle(p, sizeof(q)-7, 13), hashlittle(p, sizeof(q)-8, 13),
964          hashlittle(p, sizeof(q)-9, 13), hashlittle(p, sizeof(q)-10, 13),
965          hashlittle(p, sizeof(q)-11, 13), hashlittle(p, sizeof(q)-12, 13));
966   printf("\n");
967
968   /* check that hashlittle2 and hashlittle produce the same results */
969   i=47; j=0;
970   hashlittle2(q, sizeof(q), &i, &j);
971   if (hashlittle(q, sizeof(q), 47) != i)
972     printf("hashlittle2 and hashlittle mismatch\n");
973
974   /* check that hashword2 and hashword produce the same results */
975   len = raninit;
976   i=47, j=0;
977   hashword2(&len, 1, &i, &j);
978   if (hashword(&len, 1, 47) != i)
979     printf("hashword2 and hashword mismatch %x %x\n", 
980            i, hashword(&len, 1, 47));
981
982   /* check hashlittle doesn't read before or after the ends of the string */
983   for (h=0, b=buf+1; h<8; ++h, ++b)
984   {
985     for (i=0; i<MAXLEN; ++i)
986     {
987       len = i;
988       for (j=0; j<i; ++j) *(b+j)=0;
989
990       /* these should all be equal */
991       ref = hashlittle(b, len, (uint32_t)1);
992       *(b+i)=(uint8_t)~0;
993       *(b-1)=(uint8_t)~0;
994       x = hashlittle(b, len, (uint32_t)1);
995       y = hashlittle(b, len, (uint32_t)1);
996       if ((ref != x) || (ref != y)) 
997       {
998         printf("alignment error: %.8x %.8x %.8x %d %d\n",ref,x,y,
999                h, i);
1000       }
1001     }
1002   }
1003 }
1004
1005 /* check for problems with nulls */
1006  void driver4()
1007 {
1008   uint8_t buf[1];
1009   uint32_t h,i,state[HASHSTATE];
1010
1011
1012   buf[0] = ~0;
1013   for (i=0; i<HASHSTATE; ++i) state[i] = 1;
1014   printf("These should all be different\n");
1015   for (i=0, h=0; i<8; ++i)
1016   {
1017     h = hashlittle(buf, 0, h);
1018     printf("%2ld  0-byte strings, hash is  %.8x\n", i, h);
1019   }
1020 }
1021
1022
1023 int main()
1024 {
1025   driver1();   /* test that the key is hashed: used for timings */
1026   driver2();   /* test that whole key is hashed thoroughly */
1027   driver3();   /* test that nothing but the key is hashed */
1028   driver4();   /* test hashing multiple buffers (all buffers are null) */
1029   return 1;
1030 }
1031
1032 #endif  /* SELF_TEST */