aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/primops.cc28
-rw-r--r--tests/lang/eval-okay-hash.exp2
-rw-r--r--tests/lang/eval-okay-hash.nix9
3 files changed, 15 insertions, 24 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 84c4bbb88..f66b24b77 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -1107,27 +1107,18 @@ static void prim_unsafeDiscardOutputDependency(EvalState & state, Value * * args
}
-static void prim_hash(EvalState & state, Value * * args, Value & v)
+/* Return the cryptographic hash of a string in base-16. */
+static void prim_hashString(EvalState & state, Value * * args, Value & v)
{
- PathSet context;
-
string type = state.forceStringNoCtx(*args[0]);
- string s = state.forceStringNoCtx(*args[1]);
+ HashType ht = parseHashType(type);
+ if (ht == htUnknown)
+ throw Error(format("unknown hash type `%1%'") % type);
- HashType ht;
- if (type == "md5"){
- ht = htMD5;
- } else if (type == "sha256"){
- ht = htSHA256;
- } else {
- throw Error(format("bad hash type `%1%'") % type);
- }
+ PathSet context; // discarded
+ string s = state.forceString(*args[1], context);
- Hash h = hashString(ht, s);
-
- string hash = printHash(h);
-
- mkString(v, hash, context);
+ mkString(v, printHash(hashString(ht, s)), context);
};
@@ -1258,8 +1249,7 @@ void EvalState::createBaseEnv()
addPrimOp("__stringLength", 1, prim_stringLength);
addPrimOp("__unsafeDiscardStringContext", 1, prim_unsafeDiscardStringContext);
addPrimOp("__unsafeDiscardOutputDependency", 1, prim_unsafeDiscardOutputDependency);
-
- addPrimOp("__hash", 2, prim_hash);
+ addPrimOp("__hashString", 2, prim_hashString);
// Versions
addPrimOp("__parseDrvName", 1, prim_parseDrvName);
diff --git a/tests/lang/eval-okay-hash.exp b/tests/lang/eval-okay-hash.exp
index 369b983d5..7bbe452bc 100644
--- a/tests/lang/eval-okay-hash.exp
+++ b/tests/lang/eval-okay-hash.exp
@@ -1 +1 @@
-[ "6c69ee7f211c640419d5366cc076ae46" "bb3438fbabd460ea6dbd27d153e2233b" "900a4469df00ccbfd0c145c6d1e4b7953dd0afafadd7534e3a4019e8d38fc663" "ad0387b3bd8652f730ca46d25f9c170af0fd589f42e7f23f5a9e6412d97d7e56" ]
+[ "d41d8cd98f00b204e9800998ecf8427e" "6c69ee7f211c640419d5366cc076ae46" "bb3438fbabd460ea6dbd27d153e2233b" "da39a3ee5e6b4b0d3255bfef95601890afd80709" "cd54e8568c1b37cf1e5badb0779bcbf382212189" "6d12e10b1d331dad210e47fd25d4f260802b7e77" "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" "900a4469df00ccbfd0c145c6d1e4b7953dd0afafadd7534e3a4019e8d38fc663" "ad0387b3bd8652f730ca46d25f9c170af0fd589f42e7f23f5a9e6412d97d7e56" ]
diff --git a/tests/lang/eval-okay-hash.nix b/tests/lang/eval-okay-hash.nix
index 65cd8afeb..2fff17f84 100644
--- a/tests/lang/eval-okay-hash.nix
+++ b/tests/lang/eval-okay-hash.nix
@@ -1,6 +1,7 @@
let
- md5 = builtins.hash "md5";
- sha256 = builtins.hash "sha256";
- strings = [ "text 1" "text 2" ];
+ md5 = builtins.hashString "md5";
+ sha1 = builtins.hashString "sha1";
+ sha256 = builtins.hashString "sha256";
+ strings = [ "" "text 1" "text 2" ];
in
- (builtins.map md5 strings) ++ (builtins.map sha256 strings)
+ (builtins.map md5 strings) ++ (builtins.map sha1 strings) ++ (builtins.map sha256 strings)