xref: /aosp_15_r20/external/cronet/base/hash/README.md (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Choosing A Hash Function
2*6777b538SAndroid Build Coastguard Worker
3*6777b538SAndroid Build Coastguard Worker> Note: this document is still very much a work-in-progress. Currently missing:
4*6777b538SAndroid Build Coastguard Worker> - recommendations for hashed containers
5*6777b538SAndroid Build Coastguard Worker> - recommendations for a better persistent hash
6*6777b538SAndroid Build Coastguard Worker> - recommendations for a secure hash
7*6777b538SAndroid Build Coastguard Worker
8*6777b538SAndroid Build Coastguard WorkerIf a hash function with unchanging output is needed, please select from one of
9*6777b538SAndroid Build Coastguard Workerthe unchanging forever options below.
10*6777b538SAndroid Build Coastguard Worker
11*6777b538SAndroid Build Coastguard Worker## Non-cryptographic
12*6777b538SAndroid Build Coastguard Worker
13*6777b538SAndroid Build Coastguard Workername                                         | input                       | output     | unchanging forever | notes
14*6777b538SAndroid Build Coastguard Worker---------------------------------------------|-----------------------------|------------|--------------------|-------
15*6777b538SAndroid Build Coastguard Worker[`Hash()`][hash]                             | overloaded                  | `uint32_t` | no                 | This function is currently being updated to return `size_t`.
16*6777b538SAndroid Build Coastguard Worker[`PersistentHash()`][persistenthash]         | overloaded                  | `uint32_t` | yes                | Fairly weak but widely used for persisted hashes.
17*6777b538SAndroid Build Coastguard Worker[`CityHash64()`][cityhash64]                 | `base::span<const uint8_t>` | `uint64_t` | yes (note 1)       | Version 1.0.3. Has some known weaknesses.
18*6777b538SAndroid Build Coastguard Worker[`CityHash64WithSeed()`][cityhash64withseed] | `base::span<const uint8_t>` | `uint64_t` | yes (note 1)       | Version 1.0.3. Has some known weaknesses.
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard Worker## Cryptographic
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard Worker**There are no hashes in `//base` that provide cryptographic security.**
23*6777b538SAndroid Build Coastguard Worker
24*6777b538SAndroid Build Coastguard Worker name                          | input         | output        | unchanging forever | notes
25*6777b538SAndroid Build Coastguard Worker-------------------------------|---------------|---------------|--------------------|-------
26*6777b538SAndroid Build Coastguard Worker[`MD5String()`][md5string]     | `std::string` | `std::string` | yes                | **INSECURE**
27*6777b538SAndroid Build Coastguard Worker[`SHA1HashString`][sha1string] | `std::string` | `std::string` | yes                | **INSECURE**
28*6777b538SAndroid Build Coastguard Worker
29*6777b538SAndroid Build Coastguard Worker## Deprecated
30*6777b538SAndroid Build Coastguard Worker
31*6777b538SAndroid Build Coastguard Worker> Note: CRC32, Murmur2, and Murmur3 will be listed here.
32*6777b538SAndroid Build Coastguard Worker
33*6777b538SAndroid Build Coastguard WorkerNote 1: While CityHash is not guaranteed unchanging forever, the version used in
34*6777b538SAndroid Build Coastguard WorkerChrome is pinned to version 1.0.3.
35*6777b538SAndroid Build Coastguard Worker
36*6777b538SAndroid Build Coastguard Worker[hash]: https://cs.chromium.org/chromium/src/base/hash/hash.h?l=26
37*6777b538SAndroid Build Coastguard Worker[persistenthash]: https://cs.chromium.org/chromium/src/base/hash/hash.h?l=36
38*6777b538SAndroid Build Coastguard Worker[cityhash64]: https://cs.chromium.org/chromium/src/base/hash/city_v103.h?l=19
39*6777b538SAndroid Build Coastguard Worker[cityhash64withseed]: https://cs.chromium.org/chromium/src/base/hash/city_v103.h?l=20
40*6777b538SAndroid Build Coastguard Worker[md5string]: https://cs.chromium.org/chromium/src/base/hash/md5.h?l=74
41*6777b538SAndroid Build Coastguard Worker[sha1string]: https://cs.chromium.org/chromium/src/base/hash/sha1.h?l=22
42