[Refactor] add `nvm_get_checksum_binary`; use it in `nvm debug`
diff --git a/nvm.sh b/nvm.sh
index ca41eed..c4a80af 100644
--- a/nvm.sh
+++ b/nvm.sh
@@ -1286,32 +1286,47 @@
   nvm_echo "${VERSIONS}"
 }
 
-nvm_get_checksum_alg() {
-  if nvm_has_non_aliased "sha256sum"; then
-    nvm_echo 'sha-256'
-  elif nvm_has_non_aliased "shasum"; then
-    nvm_echo 'sha-256'
-  elif nvm_has_non_aliased "sha256"; then
-    nvm_echo 'sha-256'
-  elif nvm_has_non_aliased "gsha256sum"; then
-    nvm_echo 'sha-256'
-  elif nvm_has_non_aliased "openssl"; then
-    nvm_echo 'sha-256'
-  elif nvm_has_non_aliased "bssl"; then
-    nvm_echo 'sha-256'
-  elif nvm_has_non_aliased "sha1sum"; then
-    nvm_echo 'sha-1'
-  elif nvm_has_non_aliased "sha1"; then
-    nvm_echo 'sha-1'
-  elif nvm_has_non_aliased "shasum"; then
-    nvm_echo 'sha-1'
+nvm_get_checksum_binary() {
+  if nvm_has_non_aliased 'sha256sum'; then
+    nvm_echo 'sha256sum'
+  elif nvm_has_non_aliased 'shasum'; then
+    nvm_echo 'shasum'
+  elif nvm_has_non_aliased 'sha256'; then
+    nvm_echo 'sha256'
+  elif nvm_has_non_aliased 'gsha256sum'; then
+    nvm_echo 'gsha256sum'
+  elif nvm_has_non_aliased 'openssl'; then
+    nvm_echo 'openssl'
+  elif nvm_has_non_aliased 'bssl'; then
+    nvm_echo 'bssl'
+  elif nvm_has_non_aliased 'sha1sum'; then
+    nvm_echo 'sha1sum'
+  elif nvm_has_non_aliased 'sha1'; then
+    nvm_echo 'sha1'
   else
     nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.'
-    nvm_err 'Unaliased sha1sum, sha1, or shasum not found.'
+    nvm_err 'Unaliased sha1sum or sha1 not found.'
     return 1
   fi
 }
 
+nvm_get_checksum_alg() {
+  local NVM_CHECKSUM_BIN
+  NVM_CHECKSUM_BIN="$(nvm_get_checksum_binary 2>/dev/null)"
+  case "${NVM_CHECKSUM_BIN-}" in
+    sha256sum | shasum | sha256 | gsha256sum | openssl | bssl)
+      nvm_echo 'sha-256'
+    ;;
+    sha1sum | sha1)
+      nvm_echo 'sha-1'
+    ;;
+    *)
+      nvm_get_checksum_binary
+      return $?
+    ;;
+  esac
+}
+
 nvm_compute_checksum() {
   local FILE
   FILE="${1-}"
@@ -1347,9 +1362,6 @@
   elif nvm_has_non_aliased "sha1"; then
     nvm_err 'Computing checksum with sha1 -q'
     command sha1 -q "${FILE}"
-  elif nvm_has_non_aliased "shasum"; then
-    nvm_err 'Computing checksum with shasum'
-    command shasum "${FILE}" | command awk '{print $1}'
   fi
 }
 
@@ -2452,6 +2464,7 @@
       nvm_err "\$NVM_IOJS_ORG_MIRROR: '${NVM_IOJS_ORG_MIRROR}'"
       nvm_err "shell version: '$(${SHELL} --version | command head -n 1)'"
       nvm_err "uname -a: '$(command uname -a | command awk '{$2=""; print}' | command xargs)'"
+      nvm_err "checksum binary: '$(nvm_get_checksum_binary 2>/dev/null)'"
       if [ "$(nvm_get_os)" = "darwin" ] && nvm_has sw_vers; then
         OS_VERSION="$(sw_vers | command awk '{print $2}' | command xargs)"
       elif [ -r "/etc/issue" ]; then
@@ -3558,6 +3571,7 @@
         nvm_get_mirror nvm_get_download_slug nvm_download_artifact \
         nvm_install_npm_if_needed nvm_use_if_needed nvm_check_file_permissions \
         nvm_print_versions nvm_compute_checksum \
+        nvm_get_checksum_binary \
         nvm_get_checksum_alg nvm_get_checksum nvm_compare_checksum \
         nvm_version nvm_rc_version nvm_match_version \
         nvm_ensure_default_set nvm_get_arch nvm_get_os \
diff --git a/test/fast/Unit tests/nvm_get_checksum_binary b/test/fast/Unit tests/nvm_get_checksum_binary
new file mode 100755
index 0000000..0de0cd4
--- /dev/null
+++ b/test/fast/Unit tests/nvm_get_checksum_binary
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+set -ex
+
+die () { echo "$@" ; exit 1; }
+
+set +e # TODO: fix
+\. ../../../nvm.sh
+set -e
+
+BIN="$(nvm_get_checksum_binary)"
+
+case "${BIN-}" in
+  sha256sum | shasum | sha256 | gsha256sum | openssl | bssl | sha1sum | sha1 | shasum)
+    echo "${BIN} found"
+  ;;
+  *)
+    die "sha256sum | shasum | sha256 | gsha256sum | openssl | bssl | sha1sum | sha1 | shasum not found: found ${BIN}"
+  ;;
+esac