* 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:
parent
9530cc3170
commit
d58a11e019
7 changed files with 108 additions and 36 deletions
|
@ -81,8 +81,12 @@ Strings filterReferences(const string & path, const Strings & paths)
|
|||
for (Strings::const_iterator i = paths.begin();
|
||||
i != paths.end(); i++)
|
||||
{
|
||||
string s = string(baseNameOf(*i), 0, 32);
|
||||
parseHash(s);
|
||||
string baseName = baseNameOf(*i);
|
||||
unsigned int pos = baseName.find('-');
|
||||
if (pos == string::npos)
|
||||
throw Error(format("bad reference `%1%'") % *i);
|
||||
string s = string(baseName, 0, pos);
|
||||
// parseHash(htSHA256, s);
|
||||
ids.push_back(s);
|
||||
backMap[s] = *i;
|
||||
}
|
||||
|
|
|
@ -415,14 +415,12 @@ Path makeStorePath(const string & type,
|
|||
Hash & hash, const string & suffix)
|
||||
{
|
||||
/* e.g., "source:sha256:1abc...:/nix/store:foo.tar.gz" */
|
||||
string s = type + ":sha256:" + (string) hash + ":"
|
||||
string s = type + ":sha256:" + printHash(hash) + ":"
|
||||
+ nixStore + ":" + suffix;
|
||||
|
||||
Hash nameHash = hashString(s, htSHA256);
|
||||
|
||||
printMsg(lvlError, format("name input: %1% -> %2%") % s % (string) nameHash);
|
||||
|
||||
return nixStore + "/" + (string) nameHash + "-" + suffix;
|
||||
return nixStore + "/"
|
||||
+ printHash32(compressHash(hashString(s, htSHA256), 20))
|
||||
+ "-" + suffix;
|
||||
}
|
||||
|
||||
|
||||
|
@ -461,7 +459,7 @@ Path addToStore(const Path & _srcPath)
|
|||
Hash h2 = hashPath(dstPath, htSHA256);
|
||||
if (h != h2)
|
||||
throw Error(format("contents of `%1%' changed while copying it to `%2%' (%3% -> %4%)")
|
||||
% srcPath % dstPath % (string) h % (string) h2);
|
||||
% srcPath % dstPath % printHash(h) % printHash(h2));
|
||||
|
||||
makePathReadOnly(dstPath);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue