Module Name: othersrc Committed By: agc Date: Sat Jun 4 22:33:55 UTC 2011
Update of /cvsroot/othersrc/external/bsd/hash64 In directory ivanova.netbsd.org:/tmp/cvs-serv21752 Log Message: Initial import of hash64 functionality (libhash64(3), and hash64(1)) into othersrc. This library and program use two 32-bit hash algorithms combined to create one 64-bit hash value. The thinking behind this is that, while the individual algorithms are subject to collisions in the same way that any hash routine is, a hash value created by a combination of two hash algorithms is more difficult to exploit. The hash algorithms gathered here are the ones aggregated by Simon Burge in ftp://ftp.netbsd.org/pub/NetBSD/misc/simonb/hashtest.tar.gz and relate to this discussion from 2001(!): http://mail-index.netbsd.org/tech-perform/2001/11/29/0002.html Specifically, the algorithms in use are: perlhash/perl mousehash/mouse dumbhash/dumb dumbmulhash/dumbmul crchash/crc perlxorhash/perlxor pythonhash/python bernsteinhash/bernstein honeymanhash/honeyman pjwhash/pjw torekhash/torek byacchash/byacc tclhash/tcl gawkhash/gawk nemhash/nem and size (the last of which is a simple number of characters in the data that has been hashed). Whilst "size" is not technically a hash value, it is useful for a number of use cases. A number of hashing algorithms from the original discussion have been left out of this implementation, as they require more than 32-bits of context to calculate the resultant hash, and one of the goals of hash64(3) is to keep the implementation small and simple. The API of hash64(3) has been designed to model the API of sha1(3) and friends, with the exception that a single unsigned 64-bit integer is returned to indicate the hash value, rather than a raw/cooked character buffer. The internals of hash64(3) have been designed to allow easy addition of further 32-bit hash algorithms. As an aside, perlhash() is used internally to invoke the desired hashing functions. Example of its use: % hash64 -a perl,mouse Makefile HASH64 (Makefile) = 562f50c7f2030d74 % hash64 Makefile HASH64 (Makefile) = 562f50c7f2030d74 % hash64 < Makefile 562f50c7f2030d74 % hash64 -a mouse,perl Makefile HASH64 (Makefile) = f2030d74562f50c7 % hash64 -l perlhash/perl mousehash/mouse dumbhash/dumb dumbmulhash/dumbmul crchash/crc perlxorhash/perlxor pythonhash/python bernsteinhash/bernstein honeymanhash/honeyman pjwhash/pjw torekhash/torek byacchash/byacc tclhash/tcl gawkhash/gawk nemhash/nem size % hash64 -a pjw,size Makefile Makefile HASH64 (Makefile) = 09aa1a5a0000009c HASH64 (Makefile) = 09aa1a5a0000009c % wc -c Makefile 156 Makefile % This whole idea can and will be extended to combining other message digests to produce larger, but much more collision-resistant digests and hashes, including better protection against various attacks against digest algorithms such as pre-imaging. Status: Vendor Tag: CROOKS Release Tags: hash64-base N othersrc/external/bsd/hash64/Makefile N othersrc/external/bsd/hash64/hash64/Makefile N othersrc/external/bsd/hash64/libhash64/shlib_version N othersrc/external/bsd/hash64/libhash64/Makefile N othersrc/external/bsd/hash64/dist/hash64.c N othersrc/external/bsd/hash64/dist/hash64.h N othersrc/external/bsd/hash64/dist/main.c N othersrc/external/bsd/hash64/dist/Makefile N othersrc/external/bsd/hash64/dist/hash64.3 N othersrc/external/bsd/hash64/dist/hash64.1 No conflicts created by this import