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