diff --git a/Makefile b/Makefile index 4ac0297..bc7ff37 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,11 @@ -SHELL=/bin/bash +SHELL=/usr/bin/env bash prefix=$$HOME/.local bindir=$(prefix)/bin all: test test: - bats test/test.bats + make -C test lint: shellcheck bin/git-signatures @@ -14,4 +14,7 @@ install: mkdir -p $(bindir) install bin/git-signatures $(bindir) -.PHONY: all test lint install +clean: + make -C test clean + +.PHONY: all test lint install clean diff --git a/bin/git-signatures b/bin/git-signatures index 5914ead..d788555 100755 --- a/bin/git-signatures +++ b/bin/git-signatures @@ -9,12 +9,13 @@ COMMAND="$1" GETOPT=$(command -v gnu-getopt || command -v getopt) DATE=$(command -v gdate || command -v date) SHUF=$(command -v gshuf || command -v shuf) +GPG=$(command -v gpg2 || command -v gpg || echo gpg) main(){ - path_check git openssl xargs gpg || exit 1 + path_check git openssl xargs $GPG sed || exit 1 case $COMMAND in - ""|"-h"|"--help"|"help"|"usage") usage; exit 0;; + ""|"-h"|"--help"|"help"|"usage") usage "" 0;; "-v"|"--version") cmd_version; exit 0;; esac @@ -26,6 +27,7 @@ main(){ usage() { topic="${1:-}" + code="${2:-1}" case $topic in "" ) cat <<-EOF @@ -163,17 +165,14 @@ usage() { ;; esac + + exit $code } error() { - code="${1:-}" - case $code in - - "" ) cat <<-EOF - Unknown error. Good luck! - EOF - ;; - + reason="${1:-}" + code=1 + case $reason in "invalid_private_key" ) read -r -d '' template <<-EOF Unable to create signature. @@ -199,10 +198,28 @@ error() { EOF ;; + "gpg_status_fd" ) read -r -d '' template <<-EOF + Unable to parse gpg's status-fd output. + + %s + EOF + code=99 + ;; + + * ) read -r -d '' template <<-EOF + Unknown error. Good luck! + + %s + EOF + code=100 + ;; + esac # shellcheck disable=SC2059 - printf "${template}\\n" "${@:2}" + printf "${template}\\n" "${@:2}" >&2 + + exit $code } path_check() { @@ -215,55 +232,106 @@ path_check() { return 0 } -sig_parse(){ - local sig_raw="$1" - local sig_status="unknown" +parse_sigstatus(){ + local rev="$1" + local sigrev="$2" + local sig_key sig_frp sig_primary_frp sig_time sig_date sig_author sig_status sig_valid while read -r values; do - local key array sig_key sig_date sig_status sig_author + local status_code array pos IFS=" " read -r -a array <<< "$values" - key=${array[1]} - case $key in - "BADSIG"|"ERRSIG"|"EXPSIG"|"EXPKEYSIG"|"REVKEYSIG") - sig_key="${array[2]}" - sig_date="$($DATE -d @"${array[6]}")" - sig_status="$key" + [[ "${array[0]}" == "[GNUPG:]" ]] || error "gpg_status_fd" + status_code=${array[1]} + + #echo "$values" >&2 + # See `doc/DETAILS` in gnupg's repository for the message format + # https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob_plain;f=doc/DETAILS + case $status_code in + NEWSIG) + sig_author="${sig_author:-Unknown User <${array[2]}>}" ;; - "GOODSIG") - sig_author="${values:34}" + GOODSIG|EXPSIG|EXPKEYSIG|REVKEYSIG|BADSIG) sig_key="${array[2]}" + pos=$((11+${#status_code}+${#sig_key})) + sig_author="${values:$pos}" + sig_status="$status_code" ;; - "VALIDSIG") - sig_status="$key" - sig_date="$($DATE -d @"${array[4]}")" + ERRSIG) + sig_key="${array[2]}" + sig_time="${array[6]}" + sig_fpr="${array[8]}" + sig_status="$status_code" ;; - "SIG_ID") - sig_date="$($DATE -d @"${array[4]}")" - ;; - "NEWSIG") - sig_author="${sig_author:-Unknown User <${array[2]}>}" + VALIDSIG) + sig_fpr="${array[2]}" + sig_time="${array[4]}" + sig_primary_frp="${array[11]}" + if [[ "$sig_status" == "GOODSIG" ]]; then + sig_status="$status_code" + fi ;; TRUST_*) - sig_trust="${key//TRUST_/}" + sig_trust="${status_code//TRUST_/}" + ;; + # Things that can be ignored + KEYEXPIRED);; # this message is also emitted for expired subkeys + # EXPKEYSIG will be emitted for the key in question + KEYREVOKED);; # similarly + NO_PUBKEY);; # will produce ERRSIG + KEY_CONSIDERED);; + SIG_ID);; + PLAINTEXT*);; + VERIFICATION_COMPLIANCE_MODE);; + # Fallback + *) + error "gpg_status_fd" "Unknown gpg status code $status_code" ;; esac - done <<< "$sig_raw" - echo -n "$sig_key|$sig_status|$sig_trust|$sig_date|$sig_author" -} + done -sig_decode() { - local sig="$1" - printf '%s' "$sig" \ - | openssl base64 -d -A \ - | gpg -d --trustdb-name="$trust_db" --status-fd=1 2> /dev/null + sig_key="${sig_key:-UNKNOWN}" + sig_trust="${sig_trust:-UNKNOWN}" + if [[ -n "$sig_time" ]]; then + sig_date="$($DATE -d @"$sig_time")" + else + sig_date=UNKNOWN + fi + + case "$sig_status" in + VALIDSIG) + if [[ "$rev" != "$sigrev" ]]; then + # this is a replay attack + sig_status=INVALID + else + sig_status=VALID + fi + ;; + GOODSIG) error "gpg_status_fd" "gpg emited GOODSIG status but didn't emit VALIDSIG status, this is unexpected";; + EXPSIG);; + EXPKEYSIG) sig_status=EXPKEY;; + REVKEYSIG) sig_status=REVKEY;; + BADSIG) sig_status=INVALID;; + ERRSIG) sig_status=UNKNOWN;; + *) error "gpg_status_fd" "bad state";; + esac + + echo "$sig_key|$sig_status|$sig_trust|$sig_date|$sig_author" } get_sigs() { local ref="$1" - while IFS='' read -r line; do + local rev=$(git rev-parse "$ref") + local plainfile=$(mktemp -qp /dev/shm gpg.XXXXXXXXXX || mktemp gpg.XXXXXXXXXX) + local status plaintext + { git notes --ref signatures show "$ref" 2>/dev/null | grep -v "^$" || true; } | while IFS='' read -r line; do # shellcheck disable=SC2005 - # TODO: Figure out some other way to do this - echo "$(sig_parse "$(sig_decode "$line")")" - done < <(git notes --ref signatures show "$ref" | grep -v "^$") + status=$(echo -n "$line" \ + | openssl base64 -d -A \ + | $GPG -d --trustdb-name="$trust_db" --status-fd=3 3>&1 1>"$plainfile" 2>/dev/null) + plaintext=$(cat "$plainfile") + parse_sigstatus "$rev" "$plaintext" <<< "$status" + done + status=$? ; [[ $status != 0 ]] && exit $status # TODO: remove after switching to -e + rm "$plainfile" } cmd_version() { @@ -275,20 +343,18 @@ cmd_add() { opts="$($GETOPT -o hpk: -l help,push,key: -n "$PROGRAM" -- "$@")"; eval set -- "$opts" while true; do case $1 in - -h|--help) usage add; exit 0;; + -h|--help) usage add;; -k|--key) key_id="$2"; shift 2 ;; -p|--push) push=1; shift ;; --) shift; break ;; esac done - [ "$#" -gt 2 ] && usage add && exit 1 + [ "$#" -gt 2 ] && usage add ref=${1:-HEAD} key=${key_id:-$(git config user.signingKey)} - gpg --list-secret-keys "$key" &> /dev/null || { - error "invalid_private_key" "$key"; exit 1; - } + $GPG --list-secret-keys "$key" &> /dev/null || error "invalid_private_key" "$key" signature=$( \ git rev-parse "$ref" \ - | gpg --sign --local-user "$key" \ + | $GPG --compress-algo none --sign --local-user "$key" \ | openssl base64 -A \ ) printf "%s" "$signature" | git notes --ref signatures append --file=- @@ -303,12 +369,12 @@ cmd_show() { opts="$($GETOPT -o hrt: -l help,raw,trust-db: -n "$PROGRAM" -- "$@")"; eval set -- "$opts" while true; do case $1 in - -h|--help) usage show; exit 0;; + -h|--help) usage show;; -r|--raw) raw=1; shift ;; -t|--trust-db) trust_db="$2"; shift 2;; --) shift; break ;; esac done - [ "$#" -gt 1 ] && usage show && exit 1 + [ "$#" -gt 1 ] && usage show ref=${1:-HEAD} if [ "$raw" -ne 1 ]; then printf " %-16s | %-10s | %-9s | %-28s | %-50s \\n" \ @@ -316,12 +382,12 @@ cmd_show() { printf "=%.0s" {1..119} printf "\\n" fi - while IFS='' read -r sig_parsed; do + get_sigs "$ref" | while IFS='' read -r sig_parsed; do [ "$raw" -eq "1" ] && echo "$sig_parsed" && continue IFS="|" read -d '' -ra sig < <(echo -n "$sig_parsed") printf " %-16s | %-10s | %-9s | %28s | %-50s\\n" \ "${sig[0]}" "${sig[1]}" "${sig[2]}" "${sig[3]}" "${sig[4]}" - done < <(get_sigs "$ref") + done } cmd_verify() { @@ -329,26 +395,26 @@ cmd_verify() { opts="$($GETOPT -o hm:t: -l help,min-count:,trust-db: -n "$PROGRAM" -- "$@")"; eval set -- "$opts" while true; do case $1 in - -h|--help) usage verify; exit 0;; + -h|--help) usage verify;; -m|--min-count) min_count="$2"; shift 2 ;; -t|--trust-db) trust_db="$2"; shift 2;; --) shift; break ;; esac done - [ "$#" -gt 1 ] && usage verify && exit 1 + [ "$#" -gt 1 ] && usage verify ref=${1:-HEAD} valid_count=$( \ cmd_show --raw --trust-db="$trust_db" "$ref" \ - | grep "ULTIMATE" \ - | awk -F"|" '{ print $1 }' \ + | sed -n 's/^\([^|]*|VALID|ULTIMATE|\).*$/\1/p' \ + | sort \ | uniq \ | wc -l \ ) - [[ "$valid_count" -ge "$min_count" ]] || \ - { error "verify_failed" "$min_count"; exit 1; } + status=$? ; [[ $status != 0 ]] && exit $status # TODO: remove after switching to -e + [[ "$valid_count" -ge "$min_count" ]] || error "verify_failed" "$min_count" } cmd_init() { - [ "$#" -eq 0 ] || { usage init; exit 1; } + [ "$#" -eq 0 ] || usage init git config --add \ remote.origin.fetch \ "+refs/notes/signatures:refs/notes/signatures" @@ -364,23 +430,23 @@ cmd_init() { } cmd_import() { - [ "$#" -eq 0 ] || { usage import; exit 1; } + [ "$#" -eq 0 ] || usage import for server in $($SHUF -e ha.pool.sks-keyservers.net \ - hkp://p80.pool.sks-keyservers.net:80 \ - keyserver.ubuntu.com \ - hkp://keyserver.ubuntu.com:80 \ - pgp.mit.edu ) ; + hkp://p80.pool.sks-keyservers.net:80 \ + keyserver.ubuntu.com \ + hkp://keyserver.ubuntu.com:80 \ + pgp.mit.edu ) ; do # shellcheck disable=SC2046 - gpg \ + $GPG \ --keyserver "$server" \ --recv-keys $(xargs echo < .gitsigners) && { break || : ; } done - sed 's/$/:6:/g' < .gitsigners | gpg --import-ownertrust + sed 's/$/:6:/g' < .gitsigners | $GPG --import-ownertrust } cmd_pull() { - [ "$#" -eq 0 ] || { usage pull; exit 1; } + [ "$#" -eq 0 ] || usage pull if git rev-parse refs/tags/latest-signature >/dev/null 2>&1; then git fetch origin refs/notes/signatures:refs/notes/origin/signatures +refs/tags/latest-signature:refs/tags/origin/latest-signature @@ -391,7 +457,7 @@ cmd_pull() { } cmd_push() { - [ "$#" -eq 0 ] || { usage push; exit 1; } + [ "$#" -eq 0 ] || usage push if git rev-parse refs/tags/latest-signature >/dev/null 2>&1; then git push origin refs/notes/signatures +refs/tags/latest-signature diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 0000000..b21a169 --- /dev/null +++ b/test/Makefile @@ -0,0 +1,10 @@ +all: files + bats test.bats + +files: + ./generate_files.bash + +clean: + rm -rf files + +.PHONY: all clean diff --git a/test/files/keys/approver1.key b/test/files/keys/approver1.key deleted file mode 100644 index 9692b76..0000000 --- a/test/files/keys/approver1.key +++ /dev/null @@ -1,180 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- - -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 -+X8IKLS1MRAi7wmsF/hm0nFinglHuzglQGU= -=9LE9 ------END PGP PRIVATE KEY BLOCK----- ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -=IH0l ------END PGP PUBLIC KEY BLOCK----- diff --git a/test/files/keys/approver2.key b/test/files/keys/approver2.key deleted file mode 100644 index 785013d..0000000 --- a/test/files/keys/approver2.key +++ /dev/null @@ -1,180 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- - -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 -Y6oPU1P9zaGc9Y4iJZ4UWyHQ6WYO4Oqj1Lg= -=0eNq ------END PGP PRIVATE KEY BLOCK----- ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -=yKgx ------END PGP PUBLIC KEY BLOCK----- diff --git a/test/files/keys/approver3.key b/test/files/keys/approver3.key deleted file mode 100644 index 2f23481..0000000 --- a/test/files/keys/approver3.key +++ /dev/null @@ -1,180 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- - -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 -/tPjdDYKdbPEYqDdAzY5SbJSAAab2KzVMU8= -=+aZu ------END PGP PRIVATE KEY BLOCK----- ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQINBFtOmgQBEADBxaYZ7o2PE7JC7GI0sgVv1XXtKyIOax1Id1aylWP2klcj/gTA -dd4v7ijAWls4lcXk1feuLm55tWDNLfHikHANGQt2pgB1o+18F17t04dbqmZ6dnCz -LRnIrLEcT8PJ29cmvI+0ia0ZH9t1ob+Q23Rf2hw25UjFadUJ2bk65tf6jgFWBXje -Jh5vW3JPsbfr3pVLYZ+lZd0Fi5wuFY97Uj0r4lJPJK8pI6mgE8brCAQ3dS0PyFUZ -h4H5pw7klfJ2OMvRO6UhX5lzbTPstffHT+wf2seAoYqmsGAMB9pRhkR6uGIgEeX0 -vk0CIlPr5CKDcZWOZ26VvTzex6UUrXFduzRYa5o9LoR9VLJFZNJnoyQXRGHDY8GJ -/4AFXBCc4Q/rBHl3qgT2Z5kH1JSXUei/OMWy8IgtQPuSy+QA1dUyDFBBZjMq4ubu -R5WVf6dmmy9IlN4o2SX9KLkM3zHYowtPtuk+qci+Dmnft9kFM3G7MUOBW5POA6Aw -v3nfBD1zyZy3dZyV4xf7Ujqxjt8nc34oQDvvLd3Zlv9K+/ZQHeYv5RxbYLHlCrzY -pM2OieE5Dfdqa/XRpkc9JJ4HS8k/ZOLbLtiZaEfP6NRz4AakaPnX6sncPHa6W2TA -iNRd2XDv3syKkB6W59UpKDIs3sUjDDupnZSB0ykllhnR9HSTG1n7qIpGjQARAQAB -tCJBcHByb3ZlciAzIDxhcHByb3ZlcjNAY29tcGFueS5jb20+iQJOBBMBCAA4FiEE -JDvxxXjDUH5fW3UNoUeFAZiVSLkFAltOmgQCGwEFCwkIBwIGFQoJCAsCBBYCAwEC -HgECF4AACgkQoUeFAZiVSLm5WQ/9Hj1WjA8CWGF1Djru9cqqP5K9/uA3wcHeS2jd -IVM/wwQEZn8dedfwn99URm8wGcafFIDYP6+rHzug8qSYYbWniABYKxmmOZaJokSi -bMmrj5jlPHjdxZ6a+1G5P4YoJDvjJpLgbgdYSDidyG+KV2alMgXqVbcpRCNSixuA -aNqfUVHKinxo6UOPZb1Kl1N8+5OiitUQcaYhsdbmLUIlmucjaxmlSacRUouwylbP -t+8GE98MHlHFTi6OnM7aRPiL4rlr7TcYx/GqAlm3KBgPTmokrtYP4kwyQk8GCCuo -pQtwvTPPW9By+epoUmK6x91RupGUl3sLXve4fbacNGomE2wBDnSYmDE/ADZ1D9lA -y7oQpXv9ChiGgUFsq2EMIxM7rO31cL7DbuQSn2KtE1UplCVMf2ClbWpMd+hxnGCO -GwJ1SxtMPQC+/XDyt1oK3IBrY8w1fG+8vHY13nipfLTndUKohazSE49YgT90qia4 -9Te7yuYarThZzr/vHO+bGos9jLwyYGcECaOnfohybMDSeGgpOdQBm1kedPkfuRTA -PRV10UiU7C958VGfCCX1dvIW2U/Vodw9aoeWDgJa2Jdh5oocLpja60Z1SqAsN6R2 -nuBIQiISgyTkTv6Ge0G03wZ341rMbwfC/RDmlx4e0/e0IFEQR26fpv/Orq9FuPLI -L5t0RLy5Ag0EW06aBAEQANY6dZW4iDxWBYGa0lyknnPZ9Y5aka8Yzbnu6yP0T6xP -08wEWw43HzLxdB/KkwRMAC46ml2azrrsF6ym3H5qb/fPiayCCYKv2LGWrkm5q8JD -0vyg0mue079WOn+9sw/7igiJPjaPLKGN6BFdhTTmKsrGuItpDFsxM/TqSG/KTBKc -xXfP4/NrI0jJxtXPFVELUf0Rt8oJMdrjpkEDCxp3NctW5gXmTYXMNhWHhweSivz5 -6LiawG1FxcXsQpfftJ9ZWa3Qg7KnfSBny1Q05DuUiHd75WYejmmAoWRaGmlg4ngk -EJaSeRxMyPHyqI9UcsM88gmhPkSDXpQrRf6vY2TkGOezlZIQJHRYVju+K8tJCebq -j/+se4fa2EshZCq/8mVU4F1DBKR9TINLd6NYNe/uU7A6IgTpyUQegA7FF4bBgFBy -WPY1hWTJoZmeaQef4DbfO7h6SstWTOQQec27lab+Acd1HZxzpEVX3SSeK45eegF3 -BjKIjqC3A+vDkWJcgJlqIZi7zI3qk+J5ZqdUqKa34KZfR/+w0LXVOXAYapibB53j -bEJ9oNXift9KKLjQb4wMoIvuvCUqygAgSIZhBV/VDtbDkNOAM6a2QcEVkSofA/+M -rdYWsjxWEJKO/nldkaREh4Rb/DkTrgXt9bGuzhSqdYLsJx7Sed23DkYECPi4nfrH -ABEBAAGJBGwEGAEIACAWIQQkO/HFeMNQfl9bdQ2hR4UBmJVIuQUCW06aBAIbAgJA -CRChR4UBmJVIucF0IAQZAQgAHRYhBCufxFqwFulSgKZUGVeK8MO+Ob1jBQJbTpoE -AAoJEFeK8MO+Ob1jBOUP/1WrNnpMJNNU0A5vHkv161Y4iFI56ca3wghoUNGTu4db -gh9dKOO0nfiFoxcu2gCx+c/wSKSn7/NcRu0JVfBsAhvRbQokTCngHJfnT+sql9Y2 -z548puiuVLg6kIiK96k27JMBNGcA69TZr2rNBzrKNNwXZczGzD1JOE8vHYnHd5vf -l1nMdsThicrgOQ+NlEd1wO1OhiQoghNkWImcsavQ2ruI7joS7Zw1A3zvVuFDvf0j -KGkh31QrOobS1HAQR1gMRmayZltWhj35rPYFwqhIOJbeTx6P7D3TzFL8nb00dOdE -jAR3ngRhdoQl/e6m01Tn2iLFT9YP4HI5BOgkYSExzZD8gFXUOqcdfdEYElyFoFm5 -G2sPifgkXpk1SXGmYrzBDuqhwhGHUoseiQcYQAibQTelypEy0k64mKUMUwxv+Oy9 -8jz19kXfqxxBNkli5xj6AKFKGflyCsIgeK4k8TuaGWhMTDBQ5TrhxED/lnqm7Em+ -0spS5/VcrE392JkRBLPRJoCK6FQGeq/bDxcVPX3UlxPhdHPOtAWBR0Wz3HQuQPIx -iCRUrP25BT+pD7RHsf+gu5fllGq25tghtASVFFOulyyzVtYFkvmcOsO5ezKGMi5P -3ZCB4WSY+2ItMdE/7T+aFXdM3mYENmCY3TbDnx4bT0fOZ30EjAxrexvaYx43oeBR -9pYP/iZAWSBcDDttUBaSsdJFWH/KlJxdeg9MNSiDqtc0zwshdhTzcttFK+Y4duMm -UjbeEZc3FVjODu6RBtEBWq6UipsNJJBgLkEIdFGlJkGfpYiWTgosB9MPLjm0eEEr -okidH/ysy6XujLmQsqJuJOppXE6/Cr+YLmk2B6aQuKyWTBsRWcvsAxPvg8ijv8MY -7vijMEqrljrPQ3UTqnkxK/JGzy+SDra0xyonzlFid2E5OapgNUqu10uYxNsg4VSv -xh7ZvNQWZ7VQmcxL4rENTL5GCf1nOpip3CiToQnKt4Q2WjDBjoMmCTjU7K4TjTiL -TGAJW7JZZ/MBbMfHO+0DQF6AcB01SKG9FFO3xybxc7UU1HUYAkMhNYKoV5kNIsTs -Zbsie5KIXmt0cTBa7karJyTDGZ2x7Ovy2BK+3/TQO/dnSNz3E+otvznWfdDJhteP -ZMUtGFoORIltNHEgHb7lrFol9A+SvFdvTxlqzcS5jNMwS1VR/WKr9ra+dqHkVzdr -H8jcpV5zbmp0WOB6cMQHbfLcHmUuQ/3qYTLCOPwq2pqJOfKI2z4jZQvl/GOFT4qU -m7PnXx5jLUTTItDSBy/yRgXbJSN9MPebuBS0VctxMxd3C1i4p07NG2FvSGScroId -CTAIeib+CfZ5P/7T43Q2CnWzxGKg3QM2OUmyUgAGm9is1TFP -=FNig ------END PGP PUBLIC KEY BLOCK----- diff --git a/test/files/keys/author1.key b/test/files/keys/author1.key deleted file mode 100644 index d8adac3..0000000 --- a/test/files/keys/author1.key +++ /dev/null @@ -1,180 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- - -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 -EhtM5PYn0ytRqP85Za+qmdUXmes9Qw== -=qVbn ------END PGP PRIVATE KEY BLOCK----- ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -=uILQ ------END PGP PUBLIC KEY BLOCK----- diff --git a/test/files/keys/author2.key b/test/files/keys/author2.key deleted file mode 100644 index e97a27e..0000000 --- a/test/files/keys/author2.key +++ /dev/null @@ -1,180 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- - -lQcYBFtOmb8BEADHNdK2rcyZ7gNlnMfyDCZRD6FbevXXQVcjfroBuE1PGhtrtW4q -8ZLbARCV0TlQ9GjbGHpr1TdxKBX+TDBdQGZXoUSgDFWQ8qxconFD4P9PW0feohc7 -YSxM86Hvq1uRplcXgXx0g07FJzv9RhKd+b0L0xLqmGK4cO8HImNXM7SKwBd+wbUw -ZaVucieXAA0738P3ysG/YLE3D0AXUDcwQgQybuyhJxQcz5r5l76muQUL6InoF5lt -yb1Md5oGHoNNsMk5Je99hCDT1/VyVQP2oGayER5un9ZoYmDuyn1EgV3MjbzuhJFM -8YmEymojryhHwDs4O8NT5ezjcu3pE5O2jem6yJM0CiamlEeVqPEz946dmDX+lQsJ -gue1/zd9JtYRV7ASPxJam4HO0Mq17AXt/8uwWtCQ/h7vS3oJCc8fNfsm3NfgAaf/ -32RaDvCNTj/G0fYMGfd4WURBDaEVeuB5GmPfotr8N/je0NpOoD6vOSJxHominwu8 -CddagDOBv7XrDkTdHzxdMoVzFuN+J/MTPvIu33CUWpY4VM6XVoOXkB7n9T87PyhP -vtXm0EMuzgaozQMb2/lgfoCX1jdLbP+U7S5vbcf8VoPwDEMo5QgAVsGeTEU7Kytd -Il6KpxcxBRY5hX+Z0tcRuWGvqpG0+f78uDqg/sK3t73HIitqAkxNjEJjZQARAQAB -AA/7BvGPqaxp1Z0Kje/RYaoeFR89WZScnbx6Tr4WZQRJNY5MZwxeOFhOl8b0DrTJ -5vzN7C0bP0ehn2vCmyg0Bga+SnmljF/sWkQLJqNxh+h/cwL/K08XuOB3NytwI+F4 -10fRVfwTxsqOOVMCb/Pm/DiokpFF4drJPh05nP8MMA2Y/RPFqIu/RrOUTkLjsbYK -arbZps5wwxHvZg2TB1JVdMooSUsSgRTSn6Ug2r2joz4PDfjfWFv842saZ7WXhHUV -0I8ZRHOtDavy/6SnD9gkw45DEMaF+rHO5bk1db1QcSMtOM8L8dMPGXvQdkoejvsw -+pHvE9O0HZLbF0Z57RuF6ja3bypm9XibPUJKgm/A5b/prkNlJP3n3ZnSrPBq+D7P -4YNIovtJd8opnPGTqra4LgQjVHv/Azg2HcQdjjcIRcvJXk6sLNORAvE9iLD1ryRT -/QLEALBUeYjGab8bgtQ3iEcgUk6e94ryR5usln9PxsolfzBZI5oM9qBnRDy7uCBR -SlIQ2ViRSiduIly2UScucol0WvsT1cT5xS4nOwOUanLI+UFamex8WKVEV0ZHAHkL -gssIXfcJsuq5KIwbN2G5sSp5Ebd2pAa9hN5vTVaV1UT2N/VDYxIHHPGBdh/9duT5 -/LxZ39iakv7hUVaMRwbdI4BEVuWvzVJw1xt9L6JkQ+UoG5UIAMdSDPm5a6+7jL6+ -/KPAw6nVIQZBm3ToJHSuCuNpgQwEyHpxB/JPvKjv4nNddZgU3PHhv18hfJ2IP7VT -GnhGYAsnKXncOT7J4NLE6pa0nlN80FmAy9LWO5MBzNiApLRpkW16/NDQ9Lwbdhp5 -w5vLLBO96RjbPaUYQ81ievbyApDd2y7eiTMkGRlpmaGESXTcdpL7TBHDDLMVtUtg -EV4iC91Ey+qTq/kYLnzmsghaQQmy6AZu/AaO+Br5LOsR5id0LbH53NkaoI1rkaBZ -Rgjg++U/Er5qz7PmTF3w9VsafTIqrFHKNVedx3YCV31/wn1qvzUbOiNvvCZt8q8M -eepfiGsIAP/bvtpBdsof/qZblmHNO96uOTk4bqZhIaZXBCmiZPtMv3wvHgfPcH7T -XBNvfq7DfpNQQZbFfckagTRg4UidRO2UFG9PBl2btseT9ZIsT5iL5dVTwukhRXLc -VJTPniiSe3Pz6KAkwG8zFAEgBSMnrZTTkzaO2oJrQ9MPPWT6c3OFey/WcbVO/uV0 -dC1ry0HcJJ6f2Q9Pn3GPz2MGwcrzQTd8QLziqVgtgL7XMTIoJW7CSaRX2uB1DI6N -20+Qfe4CG7hnMKGCwZ942CsJhNVjKjY8Zg2Me0gsAQJBqkzUuyErSoqahaC/4rES -rnVEzJ6R9wDAJPszwfP5e7SvTUpl928H/1LEYqEHoku9iFuybE37ubz917aE2ruu -K0jbLbX1b+lrbY5Mm7CbRtEMUtYb7eH9OuJbO/MgyGp6ZZz+BeD4dcIyDWWkF9vt -XRxyJCC0OzT3rAieVgccRU/Aqib387CJDsZ4Jqm35+l/gGte2FNWh/0EDFdem+7x -//th2pNkiWfTrFpaPIlYib9ogj7PzxgHvhkDgtIEepD4eoIngJyKn5sh/Dip7k+V -LGaJF3EB2wnrxcywFvQroPbXZNqmdh44FYJ/itiMNtuPpHHTccJSfjYaWMSKTCFX -t+SAHGcxACKbdqHXJ35DA8sw5nM72YnrXJzDqL08v3lu0qzECgyMked/+LQeQXV0 -aG9yIDIgPGF1dGhvcjJAY29tcGFueS5jb20+iQJOBBMBCAA4FiEEeUsRwEs0tKGJ -jamJw9LzvCaJYOAFAltOmb8CGwEFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ -w9LzvCaJYOB1ThAAu7Z6svdtTvg4aZieqrh9vMQMQ+VLMq2K5mozv4JN+YM5Jlg0 -Rb7mr/HP51lC/oZliDdZsBZqIPGLMcCEXMz0vLWnFm3XGukWx+ZbD0soGcX+vFpL -vaasHLYOkQGEog9f/DmOv7VckDgq9LGbBSltH4XthUH8gfm/sSWO9DFbPbMF4tdg -3xzeyh6ZNScTebbZYY9oSRDDNOe1grUoe2XbkWfr28TyKkES7YRr73u2t2JC5/L0 -yKIY4VmKwwFemPYL0RVJkY00oei9ex1eUDpY1J1oXIGcWa4/IW3LXw3gzFG7nahU -FqjEZdJKd56VTuqxEfU5TXfjLSiRoUxegn6sgAT0q0KcJBV8kfZGGNkzgKPmf4QN -GTgCy3UaN6+Y+M4M11oZ8kZoSsphq+7GLxahsJhddh/Lf6uP58hAMIqiWCLQSAm1 -9FeI3LTS0SvRPRfjVJLNSo3X1T0oG9to1mFfpHcCuzCtxZANNeyZulTzQH51HB5I -ONHo0q4YXiCFg03As41xPRz1AN4RPpq1/fbMHmprPGUBZUhfd3oeYULmf5jjUM85 -tmty1PDvFYKXKG1MWuMH7p38QQHw6zwWzLaOWbbdgjhpe9srl8oeqrLER7GfR0SJ -btmYER80npXkRvWx+QOnUu4maWOuQ/aEqAa2hWahsJx4hZAEMC3TbfgoyredBxgE -W06ZvwEQANvCLXed0vSBNbb9J5cNT/RSpQtO7/+sdS0P3LBZv0ySo+L1iJrbLCdR -XgodjXQAdmEHKBxI+zquYwt4vtUVD7JhH9+rWTHKxK9CfjvuTBe9Rn2hW48OlIUS -KmeIs/RWvzdbZXyihbxihxZixKiU8IixLJwZAGU9DtgoAx1CfCTciAVuqUKvEbLd -xjiS76qEGdnDARTjOf6mKcFVFaIBUNqM3QIIf0K48bIZDr1Ni/TyLJ3ZLSgawVNq -HvFU7Q+2PD9YmhUleQgbTOvsyfvzTD0fc+5Z0N5d+sZNHG7hRFFx1ACVRmGESjjR -Xd0ziIC0nNlKmlQbqlwjqwXuY6F8WPjUwIUsBsOB9dYafSuMsOAQiqcLzjo2SPjg -pqvu5RB4uB7Y25dwhppfzj/jkYCzr8I9uwNevj3s40BzpqdznoLBnNfNJ8TQS7+2 -GF+iaXCC0GOPHjXDXR51q91qsoDSDxpmuCCxRWDaUNRyVe6fq+nwG3wJ+380w9tU -7wfT6q75ImXATETOmzvyNdVUkrwb5cnZ7g4n7g5ek0ztRpwv96eHVF8MDNafl8rI -4X5aYvZeG+JwjxasUm9mWsOIHcldqWpTB6ue0r+7RhgjGq23bKvwJZX/7P2Q5Ysi -tvn24x6Grlt8VKjqGPxbZG/umwsFUh1eOLWQCXijwipXwFzRF1fPABEBAAEAD/0S -iswR6csMOCZdAsSg5HQosTWqaLL4xGEWRMTbsmIUQJ+h/XkIJYV26dDz+VgsMs/K -OKbdpoDGi9x6i50acI6XzMWHA1FHnlkn6oXcYhGhXSYoYOfo5nnvzz95tEyh/K6U -qdo8NAa+hVe3Mu07kv/6oJ+bEJCUE9AZVMLygix9/CEtlPYK7nRuJNoRTI1hVCHn -c4jQ7aoNvpDX9oLLqq3BfjcCcWh/eKH+fRb2/Q1ZxRQW238jNG+Eel55Z8khO41s -BBQekNnCx9iFMMA+lhUKmtYW0eHWqWC786ZHBF9vbQA01Mn3KqJylqPQKR8TsQM2 -lSqRY//LV3OAnbbIjN8azUue8zsF6DgFTArtZNMU21COMv8ZueWwdoUYxIt2Jxw+ -eUXnSEVY+oSOxfbJxhVVG4ksQsuVUU9pUy3mPn68IV0+AOPIrPSl0SUSuEIMdn1H -xvVcOvIk18EhQ2v8w5f/gXKyn69K1VMpJXrraMOXpsm0sNAwK3PBFMzQ794YUwpS -VRkj8RFgHCk7b3Q5VmFZXg7npz3LKKZuNdZ8K5xTwqsnSjTPg6IFkziOinbSiszF -iL42+eRTpPG4VuYXBYkv/OGNdTIaS5TL6UI+oHuFZ2CvPeLb/QNxOtDUqgFzJJQ0 -fJ3PxocUU2KHfiXPYEa34wkBL9s7q+AYv+S16BGw5QgA5XqJAOQR0SjVajJCnZsZ -mF0Z8ZMIGo7eHEdQ+njj1fv0Q66SZy7Ml8QkIbDtq6x0v9hKcGoCVVNnXTQyND59 -bXh+XyHODEJuCexc4VZxW2Bvnml2KHnCKvntP2Gkei1HUl+Gzs6twjh9wEcHq7ZQ -d5MAXsafRRStZUZkPzDEMSbNxRPNobc8+aAm/5C5OjgLS9RmYPfvaLP+smYU48sI -fB3UgR0Pu7nfX9yJZaYNoukczJLz3kUozNjiDHUUJ8QlVi/kG9YU+iW/Xkzk8wMr -24fdVDiT9JXtwl4j4mcDOfTVscpE0N+kLz4+2Q8TDMlZJ3a14/A/NlLJryVeVvhf -1QgA9SgOuwhFg8SV33GDlN2Yus5Io2n4vAUH7dT5XwyEz7KDtI+D7J2CNKbOGa7Y -vVx2qxuiL/9BwkcCfXn9O0F5UT7DK/gyf7xSWnq6g2j9Uti4l6HBAxrjR7gzfCsk -+1NLcz4MHpY7B9ra4F5/mV97Kq9GaNtbz9Fp03qT8p8HchkTbWCOOImqUW7YCSB5 -XFbRWvaqLFPpMNzJ+E8dNQNGsGnCgHzbU9lrViSqmGOyjPZgxqYQA2SyzX+xGBqZ -Lpu20zUfggHhWyNJcBJBglilD7f0w3o3OCBO3HeLgp787uU9suqE7x//9BeTyYLO -QAA0sNzLI1KCUI2E9sb0yv/PEwf8CQ52b40hEeJCqEA2Gpby6fn4RRluLPv43Wcl -kZoIdMvWad1ATGTq/sDEVCUn/TvjzSTgJHrCVX87tS7xKWkG1mNMQeemBdxlE+/3 -mDzfTEZn2NWsXkDLSDe0MSxTKCjQ3Ry8AQDNXBOsZL3Vk5CCKTiD06bUQLFOuINv -CduGPfXJ0Cz4lPU/E7C36pNIyAxnSIcfhO+00ppw+oG7Glxqtt2DKQxAzvk/xfZO -OvgZhTWBeHfiDQc4APv819LTIHGENckKGDqfxKxKFu3mJ4kBAlkRPp5fs+MJNpHz -NNieTcUhqmTes0Zki6fyATD0HOs6//dVBcN0e9RSOxiaRBlrU39niQRsBBgBCAAg -FiEEeUsRwEs0tKGJjamJw9LzvCaJYOAFAltOmb8CGwICQAkQw9LzvCaJYODBdCAE -GQEIAB0WIQRaMo1AqMWwXmLCYX6c8tcZ40gHqQUCW06ZvwAKCRCc8tcZ40gHqevd -D/4j8XfrmGAePG046JZ7SOsLl0SJGRMEoos1hC/7pvsA26l9Bh18pZFbW/fWvE1v -QK44aNAzbS3mVaeyj9PgKrs8q2vFtzZte5oR5AtArWGWX62zIKI3SsDlIhRNPGK6 -VoVIABmmM0rwJgHKCSNc5ZZMVOriNNDFzwXgmxRepNeiQDBYG0hC3EnTEK88cjti -qh/ENxS3OHfKui63nb7qqsNRMtIBAkdcNhM2a+OiN7xaVudBimpCd1NodoTmYfjM -8akq7v0ypwO7x7faRQ+c0EF4TVyq6Jq/HsZ1osMeFJ3bAkOX5lX6dCxEIkby4bhX -Mpnv8RdNeB0XqJrL7Irl6UNKuYMMme68SvJdjMuGMZ04YbukPVUaEgWcBpfCt0k6 -kLeIjx//cfidSC/gyREZMdt1lsd2x25Mpk7FOqZPDjfEoluzgGkX4z99JTnhyL11 -ha2IVNv6hHtqTTcfnUxbQN8wMZoVn7QLcnVGtOMBys25SAcg99oIWH26isnO+APy -a1txr7bbVrHXEmE6xuomaDxDYTYoNl1Wq94b3xCG3s4rPwDJg/LLJw3xseflrB1/ -O0OkijFWc5WjEsUWMj3EgLbXykEyNk+JFXW8XP2y1/FQa83E5KCT8zZ3qt6o6DCr -fbURoKgMpefOdwyDHmBlEzfjXr168JVpXQONMpJdDO6c9WtmD/4ns6OmydK/LRUK -N9paChppIMU300BwKrRZM33LVrOFHiBlyi2jHkWyV3TaklJwK53IrNB00kjZB9h1 -0YFOM8tymFyVlH5QchALsgs6fGDIAlj9P6rtAOh9hkJYk2vuGkP07O80tZrI2eSE -Gz/hehYdyCuCQng5s77k7ZgEhWQLH+GP402o83prVRWmHJGoY9ku00kWm1FVBdeL -VvfdHMHnZHE9Wxcp3cpDdV57F4BRosqwUphjTl/Ebqh0VNQFu4zZ2FaVFYCCL+Ja -R/awzBRmGQEMlG15BcIpy9q20EqA7LLuPg81rR4UbcdW8zkqbolEAZ7JcVxyrp1N -5hAw3jT75BypY0b4wSzwVlvpnBNzdJS1P+uXr/bjjeePFhH+0msseIWIpu/ibX5P -sxMMpeXOWKBMyXuU2EsdUpqYiD2ful7HeUMbzUa7csnqbOIUNQeddGGjO6olDO2p -+KGunbjcgo87zWIlOJNdnFtpcpRlJtDMiyw/nW8YNmOewPbEa+c0ZNWDm2AKG/aC -AeokNPNxu7KKTfflVnBUkXtj//kDAKrYavRfN3zwYbwvLY7EuU7plzUz3/aFhyaF -GSMsdXpHTsWmxIai8HEWuGILb3QKPsI2HSwMOavKGgdbHS3c1XL7WevSU6IzJqn7 -h4tFD6IZFl+Vo8m+8fpGXUzYMutOwA== -=Ypd7 ------END PGP PRIVATE KEY BLOCK----- ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -=pmn6 ------END PGP PUBLIC KEY BLOCK----- diff --git a/test/files/keys/author3.key b/test/files/keys/author3.key deleted file mode 100644 index f918e1f..0000000 --- a/test/files/keys/author3.key +++ /dev/null @@ -1,180 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- - -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 -QiQnX1imSFB2aJou0ZICBdFO++U5hQ== -=+GLW ------END PGP PRIVATE KEY BLOCK----- ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -=AjBQ ------END PGP PUBLIC KEY BLOCK----- diff --git a/test/files/keys/keys.trust b/test/files/keys/keys.trust deleted file mode 100644 index 6136b75..0000000 --- a/test/files/keys/keys.trust +++ /dev/null @@ -1,6 +0,0 @@ -AA0D50CD349E56A605D4B9A14946B61F9E14D504:6: -61D6381214D65BAAE7C95D3FF9F1790C6EA68BED:6: -243BF1C578C3507E5F5B750DA1478501989548B9:6: -B66A475D4E90C041CDB199336951F69D0435230E:6: -794B11C04B34B4A1898DA989C3D2F3BC268960E0:6: -E19DA3D414B165FDCEDFD88EEAD2207769E3D5DC:6: diff --git a/test/generate_files.bash b/test/generate_files.bash new file mode 100755 index 0000000..8589f94 --- /dev/null +++ b/test/generate_files.bash @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +set -o errexit + +. test_helper.bash + +mkdir files +cd files + +setup_gpg + +make_gpg_key() { + set=$1 + uid=$2 + name=$3 + trust=$4 + expiration=$5 + + setup_gpg + faketime -f -2y \ + gpg --batch --pinentry-mode loopback --yes --passphrase "" \ + --quick-generate-key "$name <$uid@$set>" default default ${expiration:-never} + gpg --armor --export-secret-key > $set/$uid.key + cp $GNUPGHOME/openpgp-revocs.d/*.rev $set/$uid.rev + sed -i "s/:---/---/" $set/$uid.rev + if [[ "$trust" != "" ]]; then + grip=$(basename $GNUPGHOME/openpgp-revocs.d/*.rev) + grip=${grip%.rev} + echo "$grip:$trust:" >> $set/trust + fi + teardown_gpg +} + +mkdir -p example.com +echo -n > example.com/trust + +make_gpg_key example.com author1 "Author 1" 6 +make_gpg_key example.com approver1 "Approver 1" 6 +make_gpg_key example.com approver2 "Approver 2" 6 + +make_gpg_key example.com expired1 "Expired 1" 6 "1y" + +make_gpg_key example.com sillyUID1 "VALID|ULTIMATE Silly 1" +make_gpg_key example.com sillyUID2 "VALID|ULTIMATE| Silly 2" +make_gpg_key example.com sillierUID "Sillier +DEADBEEF|VALID|ULTIMATE|" + +mkdir -p example.org +echo -n > example.org/trust + +make_gpg_key example.org author2 "Author 2" 6 diff --git a/test/test.bats b/test/test.bats old mode 100644 new mode 100755 index 9e197e2..92c3714 --- a/test/test.bats +++ b/test/test.bats @@ -2,52 +2,159 @@ load test_helper -@test "can add signature to current HEAD" { - run git signatures add HEAD - [ "$status" -eq 0 ] +@test "show" { + check () { + git signatures show + git signatures show HEAD + git signatures show --raw + git signatures show --raw HEAD + } + check # check it doesn't fail with no signatures + git signatures add + check # check it doesn't fail with a signature } -@test "can add signature to current HEAD with key as argument" { - run git signatures add --key "approver1@company.com" HEAD - [ "$status" -eq 0 ] +@test "sign" { + sign() { + git signatures add $1 + git signatures add --key "Approver 1" $1 + } + sign + run git signatures show --raw + [ $(wc -l <<< "$output") = 2 ] + sign HEAD + run git signatures show --raw + [ $(wc -l <<< "$output") = 4 ] } -@test "can add signature and automatically push" { +@test "sign and push" { run git signatures add --push - [ "$status" -eq 0 ] + THIS=$(git rev-parse HEAD) + cd $REPO_REMOTE + run git signatures show --raw $THIS + [ $(wc -l <<< "$output") = 1 ] } -@test "can not add signature to current HEAD with invalid key" { +@test "invalid keys fail properly" { + run git signatures add --key "INVALIDKEY" + [ "$status" -eq 1 ] + git config user.signingKey "INVALIDKEY" - run git signatures add HEAD + + run git signatures add [ "$status" -eq 1 ] } -@test "can not add signature to current HEAD with invalid key as argument" { - run git signatures add --key "INVALIDKEY" HEAD +@test "verify" { + git signatures add + git signatures verify --min-count=1 + run git signatures verify --min-count=2 [ "$status" -eq 1 ] -} -@test "can show signatures" { - run git signatures show HEAD - [ "$status" -eq 0 ] -} + git signatures add --key "Approver 1" + git signatures verify --min-count=2 + run git signatures verify --min-count=3 + [ "$status" -eq 1 ] -@test "can show signatures in raw mode" { - run git signatures show --raw HEAD - [ "$status" -eq 0 ] + git signatures add --key "Approver 2" + git signatures verify --min-count=3 + run git signatures show --raw + [ $(grep "VALID" <<< "$output" | wc -l) = 3 ] + [ $(grep "ULTIMATE" <<< "$output" | wc -l) = 3 ] } -@test "can not verify if number of valid sigs below min-count" { - git signatures add --push +@test "verify with an expired key" { + PAST='faketime -f -2y' + echo "### 2 years ago" + $PAST gpg -k + $PAST git signatures add --key "Expired 1" + $PAST git signatures add --key "Approver 1" + $PAST git signatures verify --min-count=2 || true + + echo "### now" + git signatures verify --min-count=1 run git signatures verify --min-count=2 [ "$status" -eq 1 ] + run git signatures show --raw + [ $(grep "EXPKEY" <<< "$output" | wc -l) = 1 ] } -@test "can verify if number of valid sigs meets min-count" { - run git signatures add --key "approver1@company.com" HEAD - run git signatures add --key "approver2@company.com" HEAD - git signatures show >&2 +@test "verify with a revoked key" { + git signatures add --key "Approver 1" + git signatures add --key "Approver 2" + git signatures verify --min-count=2 + + gpg --import "$FILES"/example.com/approver1.rev + git signatures verify --min-count=1 run git signatures verify --min-count=2 - [ "$status" -eq 0 ] + [ "$status" -eq 1 ] + run git signatures show --raw + [ $(grep "REVKEY" <<< "$output" | wc -l) = 1 ] +} + +@test "verify with a unknown key" { + ( + cd "$REPO_REMOTE" + + setup_gpg + gpg --import "$FILES"/example.org/*.key &>/dev/null + gpg --import-ownertrust "$FILES"/example.org/trust &>/dev/null + gpg -k + + git signatures add --push # Author 2 + ) + run git signatures verify --min-count=1 + [ "$status" -eq 1 ] + run git signatures show --raw + [ $(grep "UNKNOWN" <<< "$output" | wc -l) = 1 ] +} + +@test "verify with a broken signature" { + git signatures add + + THIS=$(git rev-parse HEAD) + git checkout refs/notes/signatures + openssl base64 -d -A < $THIS > decoded + head -c -16 decoded > broken + head -c 16 /dev/zero >> broken + gpg --list-packets < broken + openssl base64 -A < broken > $THIS + git add . + git commit -m "broken signature packet" + echo $(git rev-parse HEAD) > .git/refs/notes/signatures + + git checkout master + run git signatures verify --min-count=1 + [ "$status" -eq 1 ] + run git signatures show --raw + [ $(grep "INVALID" <<< "$output" | wc -l) = 1 ] +} + +@test "signatures can't be reused (replay attack)" { + git signatures add --key "Approver 1" + git signatures add --key "Approver 2" + + THAT=$(git rev-parse HEAD~1) + THIS=$(git rev-parse HEAD) + git checkout refs/notes/signatures + cp $THIS $THAT + git add . + git commit -m "replay attack" + echo $(git rev-parse HEAD) > .git/refs/notes/signatures + + git checkout master~1 + run git signatures verify --min-count=1 + [ "$status" -eq 1 ] + run git signatures show --raw + [ $(grep "INVALID" <<< "$output" | wc -l) = 2 ] +} + +@test "signatures can't be spoofed by using silly user names" { + git signatures add --key "Silly 1" + git signatures add --key "Silly 2" + git signatures add --key "Sillier" + run git signatures verify --min-count=1 + [ "$status" -eq 1 ] + run git signatures show --raw + [ $(grep "UNDEFINED" <<< "$output" | wc -l) = 3 ] } diff --git a/test/test_helper.bash b/test/test_helper.bash index 3f7d78f..89297a5 100644 --- a/test/test_helper.bash +++ b/test/test_helper.bash @@ -1,34 +1,67 @@ -setup(){ +setup_gpg() { [[ -f "/usr/bin/gpg2" ]] && alias gpg="/usr/bin/gpg2" - PATH="$PATH:bin" - REPO_REMOTE="$(mktemp -d)"; export REPO_REMOTE - REPO_LOCAL="$(mktemp -d)"; export REPO_LOCAL - GNUPGHOME="$(mktemp -d)"; export GNUPGHOME + export GNUPGHOME=$(mktemp -d) gpg-agent \ --daemon \ --allow-preset-passphrase 3>&- & export GPG_AGENT_PID="$!" + + echo "GNUPGHOME=$GNUPGHOME" echo "GPG_AGENT_PID=$GPG_AGENT_PID" - gpg --import test/files/keys/*.key - gpg --import-ownertrust test/files/keys/keys.trust +} - git init --bare "$REPO_REMOTE" - git clone "$REPO_REMOTE" "$REPO_LOCAL" +teardown_gpg() { + rm -rf "$GNUPGHOME" + kill -9 "$GPG_AGENT_PID" || true +} - export GIT_WORK_TREE=$REPO_LOCAL - export GIT_DIR=$REPO_LOCAL/.git +setup(){ + # git sets this for commands it execs from git-rebase + # thus breaking tests running from git-rebase + unset GIT_DIR - touch "$REPO_LOCAL/testfile" + setup_gpg - git add . + export FILES=$(pwd)/files + + gpg --import "$FILES"/example.com/*.key &>/dev/null + gpg --import-ownertrust "$FILES"/example.com/trust &>/dev/null + gpg -k + + export PATH=$(pwd)/../bin:$PATH + + export REPO_REMOTE=$(mktemp -d) + export REPO_LOCAL=$(mktemp -d) + git init "$REPO_REMOTE" + git clone "$REPO_REMOTE" "$REPO_LOCAL" + + cd "$REPO_LOCAL" git config user.name "Author 1" - git config user.email "author1@company.com" - git config user.signingkey "author1@company.com" + git config user.email "author1@example.com" + git config user.signingkey "author1@example.com" + + touch testfile + git add . git commit -m "initial commit" + echo "changes" > testfile + git add . + git commit -m "second commit" + + cd "$REPO_REMOTE" + git config user.name "Author 2" + git config user.email "author2@example.org" + git config user.signingkey "author2@example.org" + + git remote add origin "$REPO_LOCAL" + git fetch origin + git checkout -b master origin/master + git pull + + cd "$REPO_LOCAL" } teardown(){ - rm -rf "$REPO_REMOTE" "$REPO_LOCAL" "$GNUPGHOME" - kill -9 "$GPG_AGENT_PID" || true + teardown_gpg + rm -rf "$REPO_REMOTE" "$REPO_LOCAL" }