TentHash: a simple, portable, large-size hash for data fingerprinting

51 points cessen2

I've developed a non-cryptographic hash named TentHash.

Unlike hashes intended for use in hash maps, TentHash's target use cases are things like data fingerprinting and content addressable systems, which don't tolerate collisions.

You might (rightly) wonder "Why yet another hash?" I encourage you to check out the readme and design rationale for a more complete answer, but the short version is: I wanted a simple-to-implement, large-size hash appropriate for data fingerprinting. As far as I could find when I started this project, no such hashes existed... or at least the ones I found that might have met those requirements provided little evidence that they had done their homework beyond "it passes SMHasher!", which just isn't convincing for large-size hashes due to the enormous state space involved.

I'm posting this here because most of the work I did in the process of designing TentHash was done in Rust, and its primary implementation is also in Rust. However, TentHash is intended to be easily implementable in any language, and has an accompanying specification.

(EDIT: a friend noted that it would be good to mention that the plan is to declare the spec final in a few months, assuming no issues are found with it. I feel confident about the design and have spent a lot of time on it, but the intention is to give some time for other eyes to be on it as well, because it's easy to be confident and wrong!)