Created by: ston1th 2019-01-13 23:35:34
Updated by: ston1th 2019-02-18 19:04:18
Visibility: Public

Encrypted Editor

Install

cat <<'EOF'>> ~/.bashrc
e_cipher="TWOFISH"
e_digest="SHA512"
e_count="62914560"
e_gpg_cmd="gpg2 --quiet --batch --no-tty --passphrase-fd 0"
e_hash() { sha256sum ${1} | cut -d" " -f1; }
e_clean() { unset e_pass; shred -f -u -z $1; }
epw() {
  echo -n "enter password: " >&2
  read -s e_pass; echo >&2
  [ -z "${e_pass}" ] && { echo "error: empty password" >&2; return 1; } || return 0
}
evi() {
  e_plain=$(TMPDIR=/dev/shm mktemp)
  chmod 600 ${e_plain}
  [ -f "$1" ] && { ecat $1 "no_unset" >${e_plain} || { e_clean "${e_plain}"; return 1; }; }
  sum=$(e_hash ${e_plain})
  ${EDITOR} ${e_plain}
  [ "${sum}" != "$(e_hash ${e_plain})" ] && { ewrite "${e_plain}" "$1" || rm -f $1; }
  e_clean "${e_plain}"
}
ecat() {
  [ -z "${e_pass}" ] && { epw || return 1; }
  [ -f "$1" ] && echo "${e_pass}" | ${e_gpg_cmd} --decrypt $1
  local exc=$?
  [ "$2" == "no_unset" ] || unset e_pass
  return ${exc};
}
ewrite() {
  [ -z "${e_pass}" ] && { epw || return 1; }
  echo "${e_pass}" | ${e_gpg_cmd} --no-random-seed-file --s2k-digest-algo ${e_digest} --s2k-count ${e_count} --symmetric --armor --cipher-algo ${e_cipher} --digest-algo ${e_digest} --output - $1 >$2
}
EOF
. ~/.bashrc

Usage

# create, view, edit
evi <file>

# view
ecat <file>