56 lines
1.3 KiB
Fish
56 lines
1.3 KiB
Fish
function verify_file
|
|
if test (count $argv) -ne 2
|
|
echo "Usage: verify_file <file> <expected_hash>"
|
|
return 1
|
|
end
|
|
|
|
set file $argv[1]
|
|
if not test -f "$file"
|
|
echo "verify_file: '$file' is not a valid file"
|
|
return 1
|
|
end
|
|
|
|
set expected $argv[2]
|
|
set len (string length "$expected")
|
|
|
|
switch $len
|
|
case 32
|
|
set cmd md5sum
|
|
case 40
|
|
set cmd sha1sum
|
|
case 56
|
|
set cmd sha224sum
|
|
case 64
|
|
set cmd sha256sum
|
|
case 96
|
|
set cmd sha384sum
|
|
case 128
|
|
if command -q sha512sum
|
|
set cmd sha512sum
|
|
else if command -q b2sum
|
|
set cmd b2sum
|
|
else
|
|
echo "verify_file: no tool available for 128-char hash (sha512sum or b2sum required)"
|
|
return 1
|
|
end
|
|
case '*'
|
|
echo "verify_file: unknown hash length ($len chars). Supported: md5(32), sha1(40), sha224(56), sha256(64), sha384(96), sha512/b2(128)"
|
|
return 1
|
|
end
|
|
|
|
if not command -q $cmd
|
|
echo "verify_file: '$cmd' is not installed."
|
|
return 1
|
|
end
|
|
|
|
set actual ($cmd "$file" | string split -f1 " ")
|
|
|
|
if test "$actual" = "$expected"
|
|
echo "Match"
|
|
return 0
|
|
else
|
|
echo "Mismatch"
|
|
return 1
|
|
end
|
|
end
|