[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