]> git.saurik.com Git - apple/network_cmds.git/blob - unbound/util/storage/lookup3.c
network_cmds-480.tar.gz
[apple/network_cmds.git] / 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 */