+++ /dev/null
-#!/usr/bin/env bash
-# Desc: Gets gpg fingerprint but replaces uid email addresses with hashes
-# Usage: bk-gpgfp-noemail 0xdc3469c9 74810B012346C9A6
-# Depends: gpg, b2sum
-# Version: 0.0.2
-
-yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
-die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status
-try() { "$@" || die "cannot $*"; } # runs args as command, reports args if command fails
-check_resembles_gpg_fingerprint() {
- # Desc: Checks if input string looks like gpg fingerprint
- # Usage: check_resembles_gpg_fingerprint arg1
- # Input: arg1: string
- # Output: exit code: 0 if arg1 is fingerprint, 1 otherwise
- # Depends: yell(), die(), try()
- # Version: 0.0.1
- local pattern1 pattern2 input input_length
-
- # Check args
- if [[ $# -ne 1 ]]; then
- die "ERROR:Invalid number of arguments:$#";
- else
- input="$1";
- fi;
-
- ## Trim leading `0x`
- pattern1="(0x)(.*)";
- if [[ $input =~ $pattern1 ]]; then
- input="${input:2}";
- #yell "DEBUG:input:$input";
- fi;
-
- ## Check if char count multiple of 8
- input_length="${#input}";
- if [[ ! $(( input_length % 8 )) -eq 0 ]]; then
- yell "DEBUG:Length not a multiple of 8:$input_length:$input";
- return 1;
- fi;
-
- ## Check if hexadecimal
- pattern2="[0-9A-Fa-f]{8,40}";
- if [[ $1 =~ $pattern2 ]]; then
- #yell "DEBUG:is a fingerprint:$arg";
- return 0;
- else
- #yell "DEBUG:Not a fingerprint:$arg";
- return 1;
- fi;
-}; # Checks if input string looks like gpg fingerprint
-main() {
- # Desc: main program
- # Depends: gpg, b2sum
- # Ref/Attrib: [1] Manipulating Strings. https://tldp.org/LDP/abs/html/string-manipulation.html
- declare -a fingerprints
- local gpg_text gpg_text_buffer pattern email
-
- # Check arguments
- n=0;
- for arg in "$@"; do
- ((n++));
- #yell "DEBUG:n:$n";
- #yell "DEBUG:arg:$arg";
-
- # Check if arg resembles gpg fignerprint
- if check_resembles_gpg_fingerprint "$arg"; then
- #yell "DEBUG:Resembles a gpg fingerprint:$arg";
- fingerprints+=("$arg");
- #yell "DEBUG:fingerprints:$(declare -p fingerprints)";
- else
- die "ERROR:Doesn't resemble a gpg fingerprint:$arg";
- fi;
- done;
-
- # Process fingerprints
- for arg in "${fingerprints[@]}"; do
- # Get gpg fingerprint text
- gpg_text="$(gpg --fingerprint --fingerprint "$arg" 2>&1)";
- #yell "DEBUG:gpg_text:$gpg_text";
-
- # Trim emails
- gpg_text_buffer="";
- while IFS= read -r line; do
- #yell "DEBUG:line:$line";
- ## Read $gpg_text line-by-line
-
- # Skip lines that don't start with 'uid'
- pattern="^uid";
- if [[ ! $line =~ $pattern ]]; then
- #yell "DEBUG:line doesn't start with \"uid\":$line";
- gpg_text_buffer="$(printf "%s\n%s" "$gpg_text_buffer" "$line")";
- continue;
- fi;
-
- # Trim email from $line
- ## Get email
- email="$(expr match "$line" '.*\(<.*$\)')";
- #yell "DEBUG:email1:$email";
- email="${email%>*}";
- #yell "DEBUG:email2:$email";
- email="${email#*<}";
- #yell "DEBUG:email3:$email";
-
- ## Strip email from $line
- line="${line% <*}"; # See [1]
- #yell "DEBUG:line1:$line";
-
- ## Add hashed email if $email length non-zero
- if [[ -n $email ]]; then
- email_hash="$(echo -n "$email" | b2sum -l32 | cut -d' ' -f1)"; # hash email using b2sum
- #yell "DEBUG:email_hash:$email_hash";
- line="$line <$email_hash>";
- #yell "DEBUG:line3:$line";
- fi;
-
- ## Append $line to $gpg_text_buffer
- gpg_text_buffer="$(printf "%s\n%s" "$gpg_text_buffer" "$line")";
- #done < <(echo "$gpg_text");
- done < <(printf "%s" "$gpg_text");
- echo "$gpg_text_buffer";
- done;
-}; # main program
-
-main "$@";
-
-# Author: Steven Baltakatei Sandoval
-# License: GPLv3+
-
-# Dependencies
-
-#1
- # b2sum (GNU coreutils) 8.32
- # Copyright (C) 2020 Free Software Foundation, Inc.
- # License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
- # This is free software: you are free to change and redistribute it.
- # There is NO WARRANTY, to the extent permitted by law.
-
- # Written by Padraig Brady and Samuel Neves.
-
-#2
- # gpg (GnuPG) 2.2.20
- # libgcrypt 1.8.8
- # Copyright (C) 2020 Free Software Foundation, Inc.
- # License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
- # This is free software: you are free to change and redistribute it.
- # There is NO WARRANTY, to the extent permitted by law.
-
- # Home: /home/baltakatei/.gnupg
- # Supported algorithms:
- # Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
- # Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
- # CAMELLIA128, CAMELLIA192, CAMELLIA256
- # Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
- # Compression: Uncompressed, ZIP, ZLIB, BZIP2
-
-#3
- # GNU bash, version 5.1.8(1)-release (x86_64-pc-linux-gnu)
- # Copyright (C) 2020 Free Software Foundation, Inc.
- # License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
-
- # This is free software; you are free to change and redistribute it.
- # There is NO WARRANTY, to the extent permitted by law.