mirror of
https://github.com/NixOS/nix
synced 2025-06-30 11:43:15 +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:
parent
9530cc3170
commit
d58a11e019
7 changed files with 108 additions and 36 deletions
|
@ -34,10 +34,6 @@ struct DrvInfo
|
|||
Path drvPath;
|
||||
Path outPath;
|
||||
Hash drvHash;
|
||||
|
||||
DrvInfo() : drvHash(htMD5)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
typedef map<Path, DrvInfo> DrvInfos;
|
||||
|
@ -74,7 +70,7 @@ bool parseDerivation(EvalState & state, Expr e, DrvInfo & drv)
|
|||
|
||||
a = queryAttr(e, "drvHash");
|
||||
if (!a) throw badTerm("derivation hash missing", e);
|
||||
drv.drvHash = parseHash(evalString(state, a));
|
||||
drv.drvHash = parseHash(htMD5, evalString(state, a));
|
||||
|
||||
a = queryAttr(e, "outPath");
|
||||
if (!a) throw badTerm("output path missing", e);
|
||||
|
@ -205,7 +201,7 @@ void createUserEnv(EvalState & state, const DrvInfos & drvs,
|
|||
makeBind(toATerm("drvPath"),
|
||||
makePath(toATerm(i->second.drvPath)), makeNoPos()),
|
||||
makeBind(toATerm("drvHash"),
|
||||
makeStr(toATerm((string) i->second.drvHash)), makeNoPos()),
|
||||
makeStr(toATerm(printHash(i->second.drvHash))), makeNoPos()),
|
||||
makeBind(toATerm("outPath"),
|
||||
makePath(toATerm(i->second.outPath)), makeNoPos())
|
||||
));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue