Skip to content

Commit

Permalink
Squash merge PR #61 fix: コマンドの引数が間違えていた場合のメッセージ改善 Issue #33
Browse files Browse the repository at this point in the history
* change message improvement
* add test case of miss args
* add test case of not installed required commands
* changed the message when tar fails
* fix: archive for shfmt
* fix: openssl のエラーメッセージを出力するように修正
* fix: テストコードの説明文を修正

Close #33 コマンドの引数が間違えていた場合のメッセージ改善

- Related
    - #31 verifyがエラーになる?
    - #36 コマンドの引数の順番
  • Loading branch information
yoshi389111 authored Jun 16, 2021
1 parent 6d0cf1e commit a692e60
Show file tree
Hide file tree
Showing 27 changed files with 946 additions and 74 deletions.
47 changes: 32 additions & 15 deletions bin/archive
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,15 @@
# - 注意:利用前にスクリプトに実行権限を与えるのを忘れないでください。
#

# -----------------------------------------------------------------------------
# Requirement check
# -----------------------------------------------------------------------------
if ! type openssl 2>/dev/null 1>/dev/null; then
echo >&2 '暗号化に必要な openssl コマンドがインストールされていません。'

exit 1
fi

getRandStr() {
openssl rand -hex 16 2>&1
}
Expand Down Expand Up @@ -47,7 +56,12 @@ fi

# コマンド引数取得
# ----------------
INPUTFILE=$1
INPUTFILE="$1"

if [ ! -r "$INPUTFILE" ]; then
echo >&2 "圧縮&暗号化したいファイル ${INPUTFILE} が見つかりません。"
exit 1
fi

# 出力ファイル名設定
# ------------------
Expand All @@ -63,14 +77,15 @@ printf "%s" "- アーカイブ用ディレクトリを作成しています ...
TEMPDIR="./$(basename "$INPUTFILE")-archive/"

if ! mkdir -p "$TEMPDIR"; then
echo "NG:ディレクトリを作成できませんでした。"
echo "- 書き込み権限などを確認してください。"
echo >&2 "NG:ディレクトリを作成できませんでした。"
echo >&2 "- 書き込み権限などを確認してください。"
exit 1
fi
echo "OK"

ARCHIVE_PATH="${TEMPDIR}${OUTPUTFILE}"
PASSWORD_PATH="${TEMPDIR}${OUTPUTFILE}.passwd"
TEMPFILE="$(basename "$INPUTFILE").tar.gz"

# パスワードの生成
# ----------------
Expand All @@ -86,8 +101,8 @@ if ! (
umask 077
echo "$PASSWORD" >"${PASSWORD_PATH}"
); then
echo "NG:ファイルを作成できませんでした。"
echo "書き込み権限などを確認してください。"
echo >&2 "NG:ファイルを作成できませんでした。"
echo >&2 "書き込み権限などを確認してください。"
exit 1
fi
echo "OK"
Expand All @@ -97,8 +112,12 @@ echo "OK"
# - 参考文献:https://qiita.com/kite_999/items/cc39179463fd061b2e7d
printf "%s" "- ファイルを TAR/GZIP 圧縮 → AES 暗号化します ... "

if ! (tar -C "$(dirname "$INPUTFILE")" -cz "$(basename "$INPUTFILE")" | openssl enc -e -aes-256-cbc -salt -k "$PASSWORD" -out "${ARCHIVE_PATH}"); then
echo "NG:ファイルを圧縮・暗号化できませんでした。"
if ! tar -C "$(dirname "$INPUTFILE")" -czf "${TEMPDIR}${TEMPFILE}" "$(basename "$INPUTFILE")"; then
echo >&2 "NG:ファイルを圧縮できませんでした。"
exit 1
fi
if ! openssl enc -e -aes-256-cbc -salt -k "$PASSWORD" -out "${ARCHIVE_PATH}" <"${TEMPDIR}${TEMPFILE}"; then
echo >&2 "NG:ファイルを暗号化できませんでした。"
exit 1
fi
echo "OK"
Expand All @@ -116,7 +135,7 @@ echo
printf "%s" "- 共通鍵を読み込んでいます ... "

if ! PASSWORD=$(cat "${PASSWORD_PATH}"); then
echo "NG:共通鍵を読み込めませんでした。"
echo >&2 "NG:共通鍵を読み込めませんでした。"
exit 1
fi
echo "OK"
Expand All @@ -125,15 +144,13 @@ echo "OK"
# --------------------
printf "%s" "- 共通鍵でファイルを復号しています ... "

TEMPFILE="$(basename "$INPUTFILE").tar.gz"

if ! openssl enc \
-d -aes-256-cbc \
-salt \
-k "$PASSWORD" \
-in "${ARCHIVE_PATH}" \
-out "${TEMPDIR}${TEMPFILE}"; then
echo "NG:ファイルを復号できませんでした。"
echo >&2 "NG:ファイルを復号できませんでした。"
exit 1
fi
echo "OK"
Expand All @@ -143,7 +160,7 @@ echo "OK"
printf "%s" "- 復号された圧縮ファイルの解凍をしています ... "

if ! tar -C "$TEMPDIR" -xf "$TEMPDIR$TEMPFILE"; then
echo "NG:ファイルを解凍できませんでした。"
echo >&2 "NG:ファイルを解凍できませんでした。"
exit 1
fi
echo "OK"
Expand All @@ -158,16 +175,16 @@ HASHARCHIVED=$(md5f "$TEMPDIR$(basename "$INPUTFILE")")
if [ "$HASHORIGINAL" = "$HASHARCHIVED" ]; then
echo "OK"
else
echo "NG ハッシュ値が一致しません"
echo >&2 "NG ハッシュ値が一致しません"
exit 1
fi

# 作業ファイルの削除
# ------------------
printf "%s" "- 作業ファイルの削除をしています ... "

if ! (rm -f "$TEMPDIR$TEMPFILE" && rm -f "$TEMPDIR$(basename "$INPUTFILE")"); then
echo "NG:作業ファイルを削除できませんでした。"
if ! (rm -f "$TEMPDIR$TEMPFILE" "$TEMPDIR$(basename "$INPUTFILE")"); then
echo >&2 "NG:作業ファイルを削除できませんでした。"
exit 1
fi
echo "OK"
Expand Down
62 changes: 44 additions & 18 deletions bin/check
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@
# - 注意:利用前にスクリプトに実行権限を与えるのを忘れないでください。
#

# -----------------------------------------------------------------------------
# Requirement check
# -----------------------------------------------------------------------------
if ! type openssl 2>/dev/null 1>/dev/null; then
echo >&2 '暗号化に必要な openssl コマンドがインストールされていません。'

exit 1
fi

PATH_DIR_BIN="$(cd "$(dirname "$0")" && pwd)"

getRandStr() {
Expand All @@ -37,8 +46,20 @@ fi

# コマンド引数取得
# ----------------
USERNAME=$1
SECRETKEY=$2
USERNAME="$1"
SECRETKEY="$2"

if [ ! -r "$SECRETKEY" ]; then
echo >&2 "秘密鍵ファイル ${SECRETKEY} が見つかりません。"
exit 1
fi
if ! RESULT="$(openssl rsa -in "${SECRETKEY}" -text 2>&1 >/dev/null)"; then
echo >&2 "秘密鍵ファイル ${SECRETKEY} がサポートしていないフォーマットです。"
echo >&2
echo >&2 "Error(openssl)"
echo >&2 "$RESULT"
exit 1
fi

# trap の設定
# -----------
Expand All @@ -64,8 +85,8 @@ PATHFILE="./sample.${FILENAME}.txt"
printf "%s" "サンプル・ファイルを作成しています ... "

if ! echo "$SAMPLETEXT" >"$PATHFILE"; then
echo "NG:サンプル・ファイルの作成に失敗しました。"
echo "サンプル・ファイル名: ${PATHFILE}"
echo >&2 "NG:サンプル・ファイルの作成に失敗しました。"
echo >&2 "サンプル・ファイル名: ${PATHFILE}"
exit 1
fi
echo "OK"
Expand All @@ -75,8 +96,11 @@ echo "OK"
printf "%s" "サンプル・ファイルを暗号化しています ... "

if ! RESULT=$("$PATH_DIR_BIN"/enc "$USERNAME" "$PATHFILE" 2>&1); then
echo "NG:サンプル・ファイルの暗号化に失敗しました。"
echo "スクリプトの実行権限、ディレクトリの書き込み権限などを確認ください。"
echo >&2 "NG:サンプル・ファイルの暗号化に失敗しました。"
echo >&2 "スクリプトの実行権限、ディレクトリの書き込み権限などを確認ください。"
echo >&2
echo >&2 "Error(enc):"
echo >&2 "${RESULT}"
exit 1
fi
echo "OK"
Expand All @@ -86,9 +110,11 @@ echo "OK"
printf "%s" "暗号ファイルを復号しています ... "

if ! RESULT=$("$PATH_DIR_BIN"/dec "$SECRETKEY" "${PATHFILE}.enc" "${PATHFILE}.dec" 2>&1); then
echo "NG:暗号ファイルの復号中にエラーが発生しました。"
echo "スクリプトの実行権限、ディレクトリの書き込み権限などを確認ください。"
echo "Error: ${RESULT}"
echo >&2 "NG:暗号ファイルの復号中にエラーが発生しました。"
echo >&2 "スクリプトの実行権限、ディレクトリの書き込み権限などを確認ください。"
echo >&2
echo >&2 "Error(dec):"
echo >&2 "${RESULT}"
exit 1
fi
echo "OK"
Expand All @@ -98,13 +124,13 @@ echo "OK"
printf "%s" "オリジナルと復号ファイルを比較しています ... "

if ! diff "$PATHFILE" "${PATHFILE}.dec"; then
echo "NG:オリジナルと復号されたファイルが異なります。"
echo "オリジナル:"
cat "${PATHFILE}"
echo
echo "復号:"
cat "${PATHFILE}.dec"
echo
echo >&2 "NG:オリジナルと復号されたファイルが異なります。"
echo >&2 "オリジナル:"
cat "${PATHFILE}" >&2
echo >&2
echo >&2 "復号:"
cat "${PATHFILE}.dec" >&2
echo >&2
exit 1
fi
echo "OK"
Expand All @@ -114,8 +140,8 @@ echo "OK"
printf "%s" "サンプル・ファイルの削除中 ... "

if ! (rm "$PATHFILE" && rm "${PATHFILE}.enc"); then
echo "NG:一時ファイルの削除に失敗しました。 手動で削除してください。"
echo "ファイル名: ${PATHFILE}"
echo >&2 "NG:一時ファイルの削除に失敗しました。 手動で削除してください。"
echo >&2 "ファイル名: ${PATHFILE}"
exit 1
fi
echo "OK"
Expand Down
30 changes: 26 additions & 4 deletions bin/checkkeylength
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,20 @@
# - 注意:利用前にスクリプトに実行権限を与えるのを忘れないでください。
#

# -----------------------------------------------------------------------------
# Requirement check
# -----------------------------------------------------------------------------
if ! type openssl 2>/dev/null 1>/dev/null; then
echo >&2 'openssl コマンドがインストールされていません。'

exit 1
fi
if ! type ssh-keygen 2>/dev/null 1>/dev/null; then
echo >&2 'ssh-keygen コマンド(openssh)がインストールされていません。'

exit 1
fi

# ヘルプ表示
# ----------
if [ $# -lt 1 ]; then
Expand All @@ -31,7 +45,7 @@ getRandStr() {

catURL() {
if type curl 1>/dev/null 2>/dev/null; then
curl -s "$1"
curl --fail -s "$1"
elif type wget 1>/dev/null 2>/dev/null; then
wget -nv -O - "$1"
elif type fetch 1>/dev/null 2>/dev/null; then
Expand All @@ -44,7 +58,7 @@ catURL() {

# コマンド引数取得
# ----------------
USERNAME=$1
USERNAME="$1"

# trap の設定
# -----------
Expand All @@ -69,10 +83,18 @@ PATHPUBKEY="/tmp/${USERNAME}.${RAND}.pub"
# - 参考URL : https://qiita.com/m0r1/items/af16c41475d493ab6774
printf "%s" "${USERNAME} の GitHub 上の公開鍵を取得中 ... "

if ! catURL "https://github.com/${USERNAME}.keys" | head -n 1 >"$PATHPUBKEY"; then
echo "NG:公開鍵を取得・保存できませんでした。"
list_keys="$(catURL "https://github.com/${USERNAME}.keys")" || {
echo >&2 "NG:公開鍵を取得できませんでした。"
exit 1
}
if [ -z "$list_keys" ]; then
echo >&2 "NG:公開鍵が存在しませんでした"
exit 1
fi
echo "$list_keys" | head -n 1 >"$PATHPUBKEY" || {
echo >&2 "NG:公開鍵を保存できませんでした。"
exit 1
}
echo "OK"

# RSA公開鍵の鍵長を表示
Expand Down
53 changes: 47 additions & 6 deletions bin/dearchive
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,15 @@
# - 注意:利用前にスクリプトに実行権限を与えるのを忘れないでください。
#

# -----------------------------------------------------------------------------
# Requirement check
# -----------------------------------------------------------------------------
if ! type openssl 2>/dev/null 1>/dev/null; then
echo >&2 '復号化に必要な openssl コマンドがインストールされていません。'

exit 1
fi

# ヘルプ表示
# ----------
if [ $# -lt 3 ]; then
Expand All @@ -45,10 +54,34 @@ getRandStr() {

# コマンド引数取得
# ----------------
INPUTFILE=$1
OUTPUTPATH=$2
PASSWORDFILE=$3
PRIVATEKEYFILE=$4
INPUTFILE="$1"
OUTPUTPATH="$2"
PASSWORDFILE="$3"
PRIVATEKEYFILE="$4"

if [ ! -r "$INPUTFILE" ]; then
echo >&2 "復号&解凍したいファイル ${INPUTFILE} が見つかりません。"
exit 1
fi

if [ ! -r "$PASSWORDFILE" ]; then
echo >&2 "パスワードファイル ${PASSWORDFILE} が見つかりません。"
exit 1
fi

if [ -n "$PRIVATEKEYFILE" ]; then
if [ ! -r "$PRIVATEKEYFILE" ]; then
echo >&2 "秘密鍵ファイル ${PRIVATEKEYFILE} が見つかりません。"
exit 1
fi
if ! RESULT="$(openssl rsa -in "${PRIVATEKEYFILE}" -text 2>&1 >/dev/null)"; then
echo >&2 "秘密鍵ファイル ${PRIVATEKEYFILE} がサポートしていないフォーマットです。"
echo >&2
echo >&2 "Error(openssl)"
echo >&2 "$RESULT"
exit 1
fi
fi

# 一時ファイル
# ------------
Expand All @@ -69,7 +102,15 @@ trap "rm -rf /tmp/QiiCipher_${RAND}"'.*' 0
# --------------------
if [ -n "$PRIVATEKEYFILE" ]; then
PATH_DIR_BIN="$(cd "$(dirname "$0")" && pwd)"
"${PATH_DIR_BIN}"/dec "$PRIVATEKEYFILE" "$PASSWORDFILE" "$DECRYPTED_PASSWORDFILE"
if ! RESULT=$("${PATH_DIR_BIN}"/dec "$PRIVATEKEYFILE" "$PASSWORDFILE" "$DECRYPTED_PASSWORDFILE" 2>&1); then
echo >&2 "NG:パスワードファイルを復号できませんでした。"
echo >&2
echo >&2 "Error(dec):"
echo >&2 "${RESULT}"
exit 1
else
echo "${RESULT}"
fi
PASSWORD=$(cat "${DECRYPTED_PASSWORDFILE}")
else
PASSWORD=$(cat "${PASSWORDFILE}")
Expand All @@ -85,7 +126,7 @@ if ! openssl enc \
-k "$PASSWORD" \
-in "${INPUTFILE}" \
-out "${TEMPFILE}"; then
echo "NG:ファイルを復号できませんでした。"
echo >&2 "NG:ファイルを復号できませんでした。"
exit 1
fi

Expand Down
Loading

0 comments on commit a692e60

Please sign in to comment.