caudal/empaquetado/firmar-version.sh
esetheyers cf7cc9a8c7 Caudal 0.1.2
Diseño para móvil, programa de escritorio para Linux (un solo fichero) y versiones firmadas: manifiesto de huellas, firma PGP y la clave del autor (VERIFICAR.md).
2026-10-14 16:42:53 -05:00

38 lines
1.9 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# Prepara lo que acompaña a los ficheros de una versión para que cualquiera
# pueda comprobar que son los auténticos: un manifiesto con la huella SHA-256
# de cada fichero y la firma PGP de ese manifiesto. Es el mismo esquema que
# usan Sparrow o Bitcoin Core, y se puede comprobar desde Sparrow
# (Herramientas › Verificar descarga) o con dos órdenes (ver VERIFICAR.md).
#
# sh empaquetado/firmar-version.sh <carpeta con los ficheros> <versión> [clave]
#
# En la carpeta van los ficheros que se publican (instalables, APK, paquetes).
# Deja a su lado caudal-<versión>-manifest.txt y caudal-<versión>-manifest.txt.asc.
# «clave» es la huella o el correo de la clave con la que firmar; sin ella, la
# que gpg use por defecto. La firma la pide gpg: con la clave en una tarjeta,
# habrá que tenerla puesta y tocarla.
set -eu
CARPETA="${1:?Falta la carpeta con los ficheros de la versión}"
VERSION="${2:?Falta la versión (por ejemplo 0.1.1)}"
CLAVE="${3:-}"
MANIFIESTO="caudal-$VERSION-manifest.txt"
cd "$CARPETA"
rm -f "$MANIFIESTO" "$MANIFIESTO.asc"
# Todo lo que haya, salvo manifiestos y firmas de otras veces, en orden estable
FICHEROS="$(find . -maxdepth 1 -type f ! -name '*-manifest.txt' ! -name '*-manifest.txt.asc' ! -name '.*' | sed 's|^\./||' | LC_ALL=C sort)"
if [ -z "$FICHEROS" ]; then
echo "En $CARPETA no hay ningún fichero que firmar." >&2
exit 1
fi
printf '%s\n' "$FICHEROS" | while IFS= read -r f; do sha256sum -- "$f"; done > "$MANIFIESTO"
if [ -n "$CLAVE" ]; then
gpg --armor --detach-sign --local-user "$CLAVE" --output "$MANIFIESTO.asc" "$MANIFIESTO"
else
gpg --armor --detach-sign --output "$MANIFIESTO.asc" "$MANIFIESTO"
fi
# Se comprueba aquí mismo, como lo hará quien lo descargue
gpg --verify "$MANIFIESTO.asc" "$MANIFIESTO"
sha256sum --check "$MANIFIESTO"
echo
echo "Listo. Publica junto a los ficheros: $MANIFIESTO y $MANIFIESTO.asc"