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).
38 lines
1.9 KiB
Bash
Executable file
38 lines
1.9 KiB
Bash
Executable file
#!/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"
|