From f7252519beabb35fb2412992a971f20e0d4048a9 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Fri, 14 Aug 2020 11:28:17 +0200 Subject: Update crt utils --- .local/bin/crt-fp | 68 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 28 deletions(-) (limited to '.local/bin/crt-fp') diff --git a/.local/bin/crt-fp b/.local/bin/crt-fp index a764ba6..ec14fcc 100755 --- a/.local/bin/crt-fp +++ b/.local/bin/crt-fp @@ -10,49 +10,61 @@ # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more # details. +# Space-separated list of supported algorithms +readonly ALGS="md5 sha1 sha256" + main() { # Handle opts - opts "$@" - shift "$OPTS" - unset OPTS + while getopts ":g:h" opt + do + case "$opt" in + g) DO_ALGS="$DO_ALGS $OPTARG" ;; + h) usage && exit 0 ;; + *) + printf "Invalid option passed: %s\n" "$OPTARG" >&2 + ;; + esac + done + + shift $(( OPTIND - 1 )) - # Show help - [ "$OPT_HELP_ONLY" ] && usage && exit 0 - [ -z "$1" ] && usage && exit 1 + # Set algs to show by default + [ -z "$DO_ALGS" ] && DO_ALGS="$ALGS" + + # Use STDIN as cert if no arguments are given + if [ -z "$*" ] || [ "$1" = "-" ] + then + no_args=1 + set -- "$(mktemp)" + cat > "$1" + fi # Generate fingerprint info for all certificates in question for crt in "$@" do - printf "%s: \n" "$crt" - for alg in md5 sha1 sha256 + # Skip this certificate if it does not exist + if [ ! -f "$crt" ] + then + printf "No such file or directory: %s\n" "$crt" >&2 + continue + fi + + # Skip the filename if only a single file is being checked + [ "$#" -gt 1 ] && printf "%s: \n" "$crt" + + # Show fingerprints for files + for alg in $DO_ALGS do - printf " %-8s %s\n" "$alg" "$(fingerprint "$alg" "$crt")" + [ "$#" -gt 1 ] && printf "%s" "\t" + printf "%-6s %s\n" "$alg" "$(fingerprint "$alg" "$crt")" done done } fingerprint() { - openssl x509 -noout -fingerprint "-$1" -inform pem -in "$2" \ - | awk -F= '{ print $NF }' -} - -opts() -{ - OPTS=0 - - while getopts ":h" opt - do - case "$opt" in - h) OPT_HELP_ONLY=1 ;; - *) - printf "Invalid option passed: %s\n" "$OPTARG" >&2 - ;; - esac - done - - unset opt + openssl x509 -noout -fingerprint "-$1" -inform pem -in "$2" | awk -F= '{ print $NF }' } usage() -- cgit v1.1