From eb605487e5c5703d073b96dbadb0c76dba9e9c4b Mon Sep 17 00:00:00 2001 From: Lucas Date: Wed, 11 Mar 2020 23:32:09 +0000 Subject: [PATCH] Add scripts from mblaze/contrib Directly from tag v6.0, e0733f187b34b21fa8335b9914c29a28fa2e856d. --- mblaze/Makefile | 6 ++++-- mblaze/contrib/mencrypt | 28 ++++++++++++++++++++++++++++ mblaze/contrib/mgpg | 20 ++++++++++++++++++++ mblaze/contrib/msign | 25 +++++++++++++++++++++++++ mblaze/contrib/mverify | 34 ++++++++++++++++++++++++++++++++++ 5 files changed, 111 insertions(+), 2 deletions(-) create mode 100755 mblaze/contrib/mencrypt create mode 100755 mblaze/contrib/mgpg create mode 100755 mblaze/contrib/msign create mode 100755 mblaze/contrib/mverify diff --git a/mblaze/Makefile b/mblaze/Makefile index 7f688de..5410831 100644 --- a/mblaze/Makefile +++ b/mblaze/Makefile @@ -15,20 +15,22 @@ PREFIX = ${HOME}/.mblaze BIN = m mless +CONTRIB = contrib/mencrypt contrib/mgpg contrib/msign contrib/mverify all: ${BIN} clean: rm -f ${BIN} -install: all env mlesskey mless-key-handler +install: all env mlesskey mless-key-handler ${CONTRIB} mkdir -pm 700 ${PREFIX} lesskey -o ${PREFIX}/mless mlesskey cp -f env mless-key-handler ${PREFIX} mkdir -p ${PREFIX}/bin cp -f ${BIN} ${PREFIX}/bin + cp -f ${CONTRIB} ${PREFIX}/bin cd ${PREFIX}/bin && chmod 555 ${BIN} uninstall: - cd ${PREFIX}/bin && rm -f ${BIN} + cd ${PREFIX}/bin && rm -f ${BIN} ${CONTRIB} rm -f ${PREFIX}/env ${PREFIX}/mless ${PREFIX}/mless-key-handler diff --git a/mblaze/contrib/mencrypt b/mblaze/contrib/mencrypt new file mode 100755 index 0000000..10077d6 --- /dev/null +++ b/mblaze/contrib/mencrypt @@ -0,0 +1,28 @@ +#!/bin/sh +# mencrypt PLAINMSG - generate a PGP/MIME signed and encrypted message + +[ -f "$1" ] || exit 1 + +IFS=' +' +FLAGS=$(maddr -a -h from:to:cc:bcc: "$1" |sort -u |sed 's/^/--recipient=/') + +FROM=$(maddr -a -h from "$1" | sed 1q) +[ "$FROM" ] && key="--default-key=$FROM" + +TMPD=$(mktemp -d -t mencrypt.XXXXXX) +trap "rm -rf '$TMPD'" INT TERM EXIT + +awk '/^$/,0' "$1" | + mmime | + gpg2 "$key" --armor --encrypt --sign $FLAGS -o "$TMPD/msg.asc" || + exit $? + +printf 'Version: 1\n' >"$TMPD/version" + +{ + sed '/^$/q' "$1" + printf '#application/pgp-encrypted %s/version\n' "$TMPD" + printf '#application/octet-stream %s/msg.asc\n' "$TMPD" +} | + mmime -t 'multipart/encrypted; protocol="application/pgp-encrypted"' diff --git a/mblaze/contrib/mgpg b/mblaze/contrib/mgpg new file mode 100755 index 0000000..4f0cfa4 --- /dev/null +++ b/mblaze/contrib/mgpg @@ -0,0 +1,20 @@ +#!/bin/sh -e + +tmp=$(mktemp -t mgpg.XXXXXX) +trap "rm -f '$tmp'" INT TERM EXIT + +{ + echo "Content-Type: $PIPE_CONTENTTYPE" + echo + cat +} > "$tmp" + +n=$(mshow -t "$tmp" | awk -F: ' + /: application\/pgp-encrypted/ {supported = 1} + /: application\/octet-stream/ {if (supported) print $1}') + +if [ "$n" ]; then + mshow -O "$tmp" "$n" | gpg2 -d 2>&1 || exit 0 + exit 64 +fi +exit 63 diff --git a/mblaze/contrib/msign b/mblaze/contrib/msign new file mode 100755 index 0000000..7f23ab4 --- /dev/null +++ b/mblaze/contrib/msign @@ -0,0 +1,25 @@ +#!/bin/sh +# msign PLAINMSG - generate a PGP/MIME signed message + +[ -f "$1" ] || exit 1 + +IFS=' +' + +TMPD=$(mktemp -d -t msign.XXXXXX) +trap "rm -rf '$TMPD'" INT TERM EXIT + +FROM=$(maddr -a -h from "$1" | sed 1q) +[ "$FROM" ] && key="--default-key=$FROM" + +awk '/^$/,0' "$1" | mmime | sed 's/$/ /' >"$TMPD"/content +gpg2 $key --armor --detach-sign -o "$TMPD"/signature.asc "$TMPD"/content || + exit $? + +{ + sed '/^$/q' "$1" + printf '#mblaze/raw %s/content\n' "$TMPD" + printf '#application/pgp-signature %s/signature.asc\n' "$TMPD" +} | + mmime -t 'multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"' + diff --git a/mblaze/contrib/mverify b/mblaze/contrib/mverify new file mode 100755 index 0000000..24db88d --- /dev/null +++ b/mblaze/contrib/mverify @@ -0,0 +1,34 @@ +#!/bin/sh +# mverify MSG - verify a OpenPGP or SMIME message + +# Needs gpg2 (for OpenPGP) and openssl (for SMIME). + +[ "$#" -eq 0 ] && set -- . + +mshow -t "$1" | DOS2UNIX='/ $/!s/$/ /' awk -v "msg=$1" ' +{ match($0, "^ *"); indent = RLENGTH } +$2 == "text/plain" { plain++ } +$2 == "multipart/signed" { signed = 0+$1; si = indent; next } +signed && !content && indent == si+2 { content = 0+$1; next } +signed && content && !signature && indent == si+2 { signature = 0+$1; type = $2 } +function q(a) { gsub("\\47", "\47\\\47\47", a); return "\47"a"\47" } +END { + if (type == "" && plain) { // guess plain text armored signature + exit(system("mshow -r " q(msg) " | gpg2 --verify")); + } else if (type == "") { + print("No signature found.") + exit(100) + } else if (type == "application/pgp-signature") { + exit(system("mshow -r -O " q(msg) " " q(content) \ + " | sed $DOS2UNIX | " \ + " { mshow -O " q(msg) " " q(signature) \ + " | gpg2 --verify - /dev/fd/3; } 3<&0")) + } else if (type == "application/pkcs7-signature") { + exit(system("mshow -r -O " q(msg) " " q(signed) \ + " | openssl smime -verify")) + } else { + print("Cannot verify signatures of type " type ".") + exit(2) + } +} +'