#!/bin/bash # # Library: gpg.lib # Modified: 2024/12/09 08:20:00 # Derechos de Autor (C) [2024] [Mauro Rosero P. ] # # Este programa es software libre: usted puede redistribuirlo y/o modificarlo # bajo los términos de la Licencia Pública Affero General de GNU tal como # lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, # o (a su elección) cualquier versión posterior. # # Este programa se distribuye con la esperanza de que sea útil, # pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de # COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la # Licencia Pública Affero General de GNU para obtener más detalles. # # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . GPG_DEFAULT_PATH=$HOME/.gnupg GPG_CONFIG_PATH=bin/config GPG_TEMPLATE=gpg.config GPG_CONFIG=gpg.conf GPG_BACKUP_CFG=gpg.backup GPG_SUBKEY_ID="" GPG_REVOKE_FILES="*.rev" DB_GPG_PATH=$HOME/.gnupg DB_GPG_FILE=$USER.db DB_GPG_SUBKEYS_KEY="subkey_id" DB_GPG_SUBKEYS="GPG_SUBKEYS" SQL_GPG_SUBKEYS="${DB_GPG_SUBKEYS}.sql" # Test library function gpglib_test() { echo "GPG Library loaded!" exit 1 } # Set gpg environment function gpg_setting() { local BIN_CONFIG=$1 local GPG_PATH=$2 local LOCAL_BACKUP=$3 local TIMESTAMP=$4 # Check if gpg directory path exists if [ ! -d "${GPG_PATH}" ] then # Create gpg directory path mkdir -p ${GPG_PATH} if [ $? -ne 0 ]; then return 2 fi fi # Check if gpg template file exists if [ ! -f "${BIN_CONFIG}/${GPG_CFG_PATH}/${GPG_TEMPLATE}" ] then return 1 fi if [ -d "${LOCAL_BACKUP}" ] then if [ -f "${GPG_PATH}/${GPG_CONFIG}" ] then # Destination file backup local BACKUP_FILE="${LOCAL_BACKUP}/gpg_${TIMESTAMP}.bak" cp -f "${GPG_PATH}/${GPG_CONFIG}" "${BACKUP_FILE}" if [ $? -ne 0 ]; then return 3 fi fi fi # Copia el archivo de plantilla al destino cp -f "${BIN_CONFIG}/${GPG_CFG_PATH}/${GPG_TEMPLATE}" "${GPG_PATH}/${GPG_CONFIG}" return $? } # Local backup of gpp keys function gpg_backup() { local ZPASSWORD=$1 local DB_BACKUP=$2 local BIN_CONFIG=$3 local TIMESTAMP=$4 local rc=0 # Check if backup configuration file exists if [ ! -f $BIN_CONFIG/$GPG_BACKUP_CFG ] then return 10 fi local LOCAL_BACKUP=$HOME/$(cat < $BIN_CONFIG/$GPG_BACKUP_CFG) # Check if backup path exist if [ -z "$LOCAL_BACKUP" ]; then return 11 fi if [ ! -d "${LOCAL_BACKUP}" ] then mkdir -p "${LOCAL_BACKUP}" rc=$? if [ $rc -ne 0 ]; then return $rc fi fi # Verificar que la contraseña no este en blanco if [ -z "${ZPASSWORD}" ]; then return 13 fi # Exportar el anillo de claves GPG a un archivo de respaldo temporal local TMP_PATH=$(mktemp -d) local TMP_FILE="gpg.bak" gpg --export-options backup -o "${TMP_PATH}/${TMP_FILE}" --export rc=$? if [ $rc -ne 0 ]; then rm -rf "${tmp_path}" return $rc fi # Dump GPG_SUBKEYS table to SQL local TMP_DB_DUMP="${SQL_GPG_SUBKEYS}" local DB_DUMP="${TMP_PATH}/${TMP_DB_DUMP}" sqlite_dump "${DB_BACKUP}" "${DB_DUMP}" "${DB_GPG_SUBKEYS}" rc=$? if [ ${rc} -ne 0 ] then rm -rf "${TMP_PATH}" return $rc fi # Copiar los archivos de revocación local REVOKE_PATH="${GNUPGHOME:-$GPG_DEFAULT_PATH}/openpgp-revocs.d" cp -rf "${REVOKE_PATH}"/${GPG_REVOKE_FILES} "${TMP_PATH}/" rc=$? if [ $rc -ne 0 ] then rm -rf "${TMP_PATH}" return $rc fi # Cambiar el directorio de trabajo a la carpeta temporal para poder hacer el empaquetamiento zip cd "${TMP_PATH}" # Comprimir el archivo de respaldo en un archivo ZIP protegido con contraseña BACKUP_FILE="${LOCAL_BACKUP}/gpg_${USER}_${TIMESTAMP}" zip -r -P "${ZPASSWORD}" $BACKUP_FILE * rc=$? if [ $rc -ne 0 ] then rm -rf "${TMP_PATH}" return $rc fi rm -rf "${TMP_PATH}" return 0 }