diff --git a/utils/scripts/color-hash.ksh b/utils/scripts/color-hash.ksh index a692c43..0c87f63 100644 --- a/utils/scripts/color-hash.ksh +++ b/utils/scripts/color-hash.ksh @@ -43,6 +43,37 @@ function _color_hash_fnv1a print -nr -- $(( ($h >> 16) ^ ($h & 0xffff) )) } +function _color_hash_sha +{ + local c h s p + p=$1 + shift + s=$(printf "%08x%s" "${2:-0}" "$1") + h=$("$p" -qs "$s") + c=$((0x${h#${h%?}})) + while (( $c > 0 )); do + h=${h#??} + c=$(($c - 1)) + done + h=$((0x${h%${h#????}})) + print -nr -- $h +} + +function _color_hash_sha1 +{ + _color_hash_sha sha1 "$@" +} + +function _color_hash_sha256 +{ + _color_hash_sha sha256 "$@" +} + +function _color_hash_sha512 +{ + _color_hash_sha sha512 "$@" +} + function color_hash { local bright impl flag h n s @@ -52,7 +83,7 @@ function color_hash while getopts bi: flag; do case $flag in b) bright=true ;; - i) if [[ $OPTARG != @(djb2|fnv1|fnv1a) ]]; then + i) if [[ $OPTARG != @(djb2|fnv1|fnv1a|sha1|sha256|sha512) ]]; then return 1 fi impl=_color_hash_$OPTARG