1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-29 06:21:14 +02:00

* Shorten SHA-256 hashes used in store path name generation to 160

bits, then encode them in a radix-32 representation (using digits
  and letters except e, o, u, and t).  This produces store paths like
  /nix/store/4i0zb0z7f88mwghjirkz702a71dcfivn-aterm-2.3.1.  The nice
  thing about this is that the hash part of the file name is still 32
  characters, as before with MD5.

  (Of course, shortening SHA-256 to 160 bits makes it no better than
  SHA-160 in theory, but hopefully it's a bit more resistant to
  attacks; it's certainly a lot slower.)
This commit is contained in:
Eelco Dolstra 2005-01-14 16:04:03 +00:00
parent 9530cc3170
commit d58a11e019
7 changed files with 108 additions and 36 deletions

View file

@ -8,7 +8,7 @@
using namespace std;
typedef enum { htMD5, htSHA1, htSHA256 } HashType;
typedef enum { htUnknown, htMD5, htSHA1, htSHA256 } HashType;
const int md5HashSize = 16;
@ -24,7 +24,10 @@ struct Hash
HashType type;
/* Create a zeroed hash object. */
/* Create an unusable hash object. */
Hash();
/* Create a zero-filled hash object. */
Hash(HashType type);
/* Check whether two hash are equal. */
@ -36,13 +39,20 @@ struct Hash
/* For sorting. */
bool operator < (const Hash & h) const;
/* Convert a hash code into a hexadecimal representation. */
operator string() const;
};
/* Convert a hash to a hexadecimal representation. */
string printHash(const Hash & hash);
/* Parse a hexadecimal representation of a hash code. */
Hash parseHash(const string & s);
Hash parseHash(HashType ht, const string & s);
/* Convert a hash to a base-32 representation. */
string printHash32(const Hash & hash);
/* Parse a base-32 representation of a hash code. */
Hash parseHash32(HashType ht, const string & s);
/* Verify that the given string is a valid hash code. */
bool isHash(const string & s);
@ -57,5 +67,9 @@ Hash hashFile(const Path & path, HashType ht);
md5(dump(path)). */
Hash hashPath(const Path & path, HashType ht);
/* Compress a hash to the specified number of bytes by cyclically
XORing bytes together. */
Hash compressHash(const Hash & hash, unsigned int newSize);
#endif /* !__HASH_H */