Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Dec 2007 07:42:15 -0500
From:      "Aryeh M. Friedman" <aryeh.friedman@gmail.com>
To:        Ivan Voras <ivoras@freebsd.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: BSD license compatible hash algorithm?
Message-ID:  <4774EF27.90307@gmail.com>
In-Reply-To: <fl2qiv$qoh$1@ger.gmane.org>
References:  <5950EE0C-383D-4D6B-9991-A0DEABD2ADE4@u.washington.edu> <20071228003716.GB48997@lor.one-eyed-alien.net> <B8D4C3C6-B867-4550-9F17-4DC6930D10E2@u.washington.edu> <fl2qiv$qoh$1@ger.gmane.org>

next in thread | previous in thread | raw e-mail | index | archive | help
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ivan Voras wrote:
> Garrett Cooper wrote:
>
>>     Looks promising, but how difficult would it be to port the code
>> to other platforms (Win32 for instance?).
>
> The hash algorithm itself as implemented in hash.h is pretty much a
> text-book hash algorithm (D.J.Bernstein's):
>
> #ifndef HASHINIT
> #define HASHINIT        5381
> #define HASHSTEP(x,c)   (((x << 5) + x) + (c))
> #endif
>
> /*
>  * Return a 32-bit hash of the given buffer.  The init
>  * value should be 0, or the previous hash value to extend
>  * the previous hash.
>  */
> static __inline uint32_t
> hash32_buf(const void *buf, size_t len, uint32_t hash)
> {
>         const unsigned char *p = buf;
>
>         while (len--)
>                 hash = HASHSTEP(hash, *p++);
>
>         return hash;
> }
>
> It apparently has some weaknesses if used on binary (non-text) data
> but I don't see why it wouldn't work on Windows.

All hashs have issues with pooling.... see
http://www.burtleburtle.net/bob/hash/index.html... btw it is a old
wives tale that the number of buckets should be prime (mostly based on
the very weak implementation Knuth offered)

- --
Aryeh M. Friedman
FloSoft Systems
http://www.flosoft-systems.com
Developer, not business, friendly
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.4 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFHdO8mzIOMjAek4JIRApb6AJ93JNR1sIPg6mH4TrOCEUn2jfdinwCeI/UO
IQLG9bX1N5PHxsSALDS7dzw=
=saZk
-----END PGP SIGNATURE-----




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4774EF27.90307>