From a7cee528c5967ffe20e50fb9dc329987843d42ec Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 26 Feb 2009 21:12:35 +0000 Subject: [PATCH] * Handle base-16 hashes in manifests. --- scripts/download-using-manifests.pl.in | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts/download-using-manifests.pl.in b/scripts/download-using-manifests.pl.in index b681ccf347..6246ed3f62 100644 --- a/scripts/download-using-manifests.pl.in +++ b/scripts/download-using-manifests.pl.in @@ -348,11 +348,22 @@ while (scalar @path > 0) { } +# Make sure that the hash declared in the manifest matches what we +# downloaded and unpacked. + if (defined $finalNarHash) { my ($hashAlgo, $hash) = parseHash $finalNarHash; - my $hash2 = `@bindir@/nix-hash --type $hashAlgo --base32 $targetPath` + + # The hash in the manifest can be either in base-16 or base-32. + # Handle both. + my $extraFlag = + ($hashAlgo eq "sha256" && length($hash) != 64) + ? "--base32" : ""; + + my $hash2 = `@bindir@/nix-hash --type $hashAlgo $extraFlag $targetPath` or die "cannot compute hash of path `$targetPath'"; chomp $hash2; + die "hash mismatch in downloaded path $targetPath; expected $hash, got $hash2" if $hash ne $hash2; } else {