[prev in list] [next in list] [prev in thread] [next in thread]
List: cygwin-apps
Subject: [PATCH] cygport/lib/src_prep.cygpart: use checksum files with packages
From: Brian Inglis via Cygwin-apps <cygwin-apps () cygwin ! com>
Date: 2024-04-30 22:57:13
Message-ID: 20240430225801.33521-2-Brian.Inglis () SystematicSW ! ab ! ca
[Download RAW message or body]
From: "Brian Inglis" <Brian.Inglis@SystematicSW.ab.ca>
Some package upstreams offer only checksums, for example .sha512sum, .sha256sum,
for verification rather than gpg signatures, for example .asc, .sig, .sign, etc;
use these checksum files when provided in a similar manner to gpg signatures;
these files are often provided with fixed names which may be renamed on download
to unique values using cygport URI fragment support like #/$NAME-VERSION.sha...sum;
use coreutils cksum as it supports all modern and legacy checksums and formats.
define __sum_verify() after __gpg_verify();
add to readonly function definition list
unpack(): skip files matching *.*sum
__src_prep():
define file types or prefixes in variable sum_exts;
in src files loop after __gpg_verify():
match file checksum type and call __sum_verify()
Signed-off-by: Brian Inglis <Brian.Inglis@SystematicSW.ab.ca>
---
lib/src_prep.cygpart | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 55 insertions(+), 1 deletion(-)
--- lib/src_prep.cygpart 2024-01-15 05:09:23.000000000 -0700
+++ lib/src_prep.cygpart 2024-04-30 11:41:01.218878400 -0600
@@ -88,6 +88,7 @@ unpack() {
# determine correct source decompression command
case ${unpack_file_path} in
*.asc|*.md5|*.sig|*.sign) continue ;;
+ *.*sum) continue ;;
*.tar.lrz)
check_prog_req lrzuntar lrzip
unpack_cmd="lrzuntar"
@@ -200,6 +201,43 @@ __gpg_verify() {
fi
}
+__sum_verify() {
+ local _file=${1#${DISTDIR}/};
+ local _filedesc=${2};
+ local _filetype=${3};
+ local _sum=${3%sum};
+
+ if ! check_prog cksum
+ then
+ # display notice only once
+ if ! defined _cksum_not_found_
+ then
+ inform "cksum must be installed in order to check checksums.";
+ _cksum_not_found_=1
+ fi
+
+ return 0;
+ fi
+
+ # {b2,b2b}{,sum} -> blake2b; ck{,sum} -> crc; {,sum} -> bsd
+ [ -z "${_sum}" ] && _sum=${_sum:-bsd}
+ [ "b2" = "${_sum}" ] && _sum=blake2b
+ [ "b2b" = "${_sum}" ] && _sum=blake2b
+ [ "ck" = "${_sum}" ] && _sum=crc
+
+ if defined DISTDIR && [ -d ${DISTDIR} ] && [ -f ${DISTDIR}/${_file} ]
+ then
+ cd ${DISTDIR}
+ inform "${_filedesc} ${_filetype} checksum verification follows:";
+ if [ "${_sum}" = "crc" ] || [ "${_sum}" = "bsd" ] || [ "${_sum}" = "sysv" ]
+ then
+ cksum -a ${_sum} ${_file%.${_filetype}} || true;
+ else
+ cksum -a ${_sum} -c ${_file} || true;
+ fi
+ fi
+}
+
__mkdirs() {
cd ${top};
mkdir -p ${srcdir} ${origsrcdir} ${B} ${D} ${T} ${configdir} ${logdir} ${distdir} \
${patchdir} ${spkgdir}; @@ -298,6 +336,10 @@ __src_prep() {
local src_pkg;
local tar_patch;
local n=1;
+ local sum_exts="sha512 sha384 sha256 sha224 b2 b2b blake2b sm3 sha1 md5 ck crc bsd \
sysv"; + # prefer newer stronger keys for faster lookup
+ # blake2b bsd crc md5 sha1 sha224 sha256 sha384 sha512 sm3 sysv
+ # {b2,b2b}{,sum} -> blake2b; ck{,sum} -> crc; {,sum} -> bsd
cd ${top};
@@ -328,6 +370,18 @@ __src_prep() {
__gpg_verify ${src_pkg} "SOURCE $((n++))" ${sigext};
fi
done
+ for sigext in ${sum_exts} '' # final entry is BSD .sum -> ''
+ do
+ if [ "${src_pkg}" != "${src_pkg%.${sigext}sum}" ]
+ then
+ __sum_verify ${src_pkg} "SOURCE $((n++))" "${sigext}sum";
+ break;
+ elif [ "${src_pkg}" != "${src_pkg%.${sigext}}" ] # fail if '' unless *.
+ then
+ __sum_verify ${src_pkg} "SOURCE $((n++))" "${sigext}";
+ break;
+ fi
+ done
done
for src_patch in ${_src_orig_patches}
@@ -510,4 +564,4 @@ __src_prep() {
}
readonly -f __cpio_gz_extract __gem_extract __srpm_extract unpack \
- __gpg_verify __mkdirs cygpatch __src_prep
+ __gpg_verify __sum_verify __mkdirs cygpatch __src_prep
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic