Skip to content

Instantly share code, notes, and snippets.

@janlegner
Last active June 22, 2022 10:32
Show Gist options
  • Save janlegner/c4d66e59c0fa6523a1f9bb08cfb994a7 to your computer and use it in GitHub Desktop.
Save janlegner/c4d66e59c0fa6523a1f9bb08cfb994a7 to your computer and use it in GitHub Desktop.
#/bin/sh
{
err() {
echo "$@" >&2
exit 1
}
USAGE="Usage: @todo"
generate() {
PRIVATE_KEY_FILE=$(mktemp /tmp/private.XXXXXX)
PUBLIC_KEY_FILE=$(mktemp /tmp/public.XXXXXX)
openssl genrsa -out "$PRIVATE_KEY_FILE" 4096
openssl rsa -in "$PRIVATE_KEY_FILE" -outform PEM -pubout -out "$PUBLIC_KEY_FILE"
PUBLIC_KEY=$(<"$PUBLIC_KEY_FILE" base64 -w 0)
echo "$0 encrypt $PRIVATE_KEY_FILE $PUBLIC_KEY"
}
encrypt() {
PRIVATE_KEY_FILE="$1"
PUBLIC_KEY="$2"
if [ -z "$PRIVATE_KEY_FILE" ] || [ -z "$PUBLIC_KEY" ]
then
err "$USAGE"
fi
PUBLIC_KEY_FILE=$(mktemp /tmp/public.XXXXXX)
ENCRYPTED_FILE=$(mktemp /tmp/enc.XXXXXX)
<<<"$PUBLIC_KEY" base64 --decode > "$PUBLIC_KEY_FILE"
echo -n "Input secret: "
read -r SECRET
<<<"$SECRET" openssl rsautl -encrypt -inkey $PUBLIC_KEY_FILE -pubin -in /dev/stdin -out "$ENCRYPTED_FILE"
ENCRYPTED_SECRET=$(<"$ENCRYPTED_FILE" base64 -w 0)
echo "$0 decrypt $PRIVATE_KEY_FILE $ENCRYPTED_SECRET"
}
decrypt() {
PRIVATE_KEY_FILE="$1"
ENCRYPTED_SECRET="$2"
if [ -z "$PRIVATE_KEY_FILE" ] || [ -z "$ENCRYPTED_SECRET" ]
then
err "$USAGE"
fi
<<<"$ENCRYPTED_SECRET" base64 --decode | openssl rsautl -decrypt -in /dev/stdin -out /dev/stdout -inkey "$PRIVATE_KEY_FILE"
}
CMD="$1"
shift
if [ "$CMD" == "generate" ]
then
generate "$@"
elif [ "$CMD" == "encrypt" ]
then
encrypt "$@"
elif [ "$CMD" == "decrypt" ]
then
decrypt "$@"
else
err "$USAGE"
fi
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment