From: James Hilliard <james.hilliard1@gmail.com>
To: buildroot@buildroot.org
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
James Hilliard <james.hilliard1@gmail.com>,
Thomas Perale <thomas.perale@mind.be>,
Ricardo Martincoski <ricardo.martincoski@datacom.com.br>
Subject: [Buildroot] [PATCH v2 1/3] support/download: add blake2b-256 hash support
Date: Wed, 17 Jun 2026 11:42:06 -0600 [thread overview]
Message-ID: <20260617174208.3968183-1-james.hilliard1@gmail.com> (raw)
PyPI exposes a blake2b_256 digest for distribution files, and that
same digest is used in the hash-based files.pythonhosted.org download
paths. Add support for storing those hashes in Buildroot .hash files.
Teach the download hash checker to validate blake2b-256 entries using
b2sum -l 256, and update check-package so the new hash type and length
are accepted. Also add the CycloneDX hash spelling so generated SBOMs
can include blake2b-256 hashes from .hash files.
Update scanpypi to write the PyPI-provided blake2b_256 digest alongside
the existing md5 and sha256 entries.
Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
---
docs/manual/adding-packages-directory.adoc | 3 ++-
support/download/check-hash | 7 ++++++-
support/testing/tests/utils/test_generate_cyclonedx.py | 9 +++++++++
utils/checkpackagelib/lib_hash.py | 2 +-
utils/checkpackagelib/test_lib_hash.py | 4 ++++
utils/generate-cyclonedx | 1 +
utils/scanpypi | 7 ++++++-
7 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/docs/manual/adding-packages-directory.adoc b/docs/manual/adding-packages-directory.adoc
index 15de559deb..27f0fcd9a9 100644
--- a/docs/manual/adding-packages-directory.adoc
+++ b/docs/manual/adding-packages-directory.adoc
@@ -464,7 +464,7 @@ The format of this file is one line for each file for which to check the
hash, each line with the following three fields separated by two spaces:
* the type of hash, one of:
-** +md5+, +sha1+, +sha224+, +sha256+, +sha384+, +sha512+
+** +md5+, +sha1+, +sha224+, +sha256+, +sha384+, +sha512+, +blake2b-256+
* the hash of the file:
** for +md5+, 32 hexadecimal characters
** for +sha1+, 40 hexadecimal characters
@@ -472,6 +472,7 @@ hash, each line with the following three fields separated by two spaces:
** for +sha256+, 64 hexadecimal characters
** for +sha384+, 96 hexadecimal characters
** for +sha512+, 128 hexadecimal characters
+** for +blake2b-256+, 64 hexadecimal characters
* the name of the file:
** for a source archive: the basename of the file, without any directory
component,
diff --git a/support/download/check-hash b/support/download/check-hash
index d18ec8b134..74079dac1a 100755
--- a/support/download/check-hash
+++ b/support/download/check-hash
@@ -49,6 +49,7 @@ check_one_hash() {
case "${_h}" in
md5|sha1) ;;
sha224|sha256|sha384|sha512) ;;
+ blake2b-256) ;;
*) # Unknown hash, exit with error
printf "ERROR: unknown hash '%s' for '%s'\n" \
"${_h}" "${base}" >&2
@@ -57,7 +58,11 @@ check_one_hash() {
esac
# Do the hashes match?
- _hash="$( "${_h}sum" "${_file}" |cut -d ' ' -f 1 )"
+ if [ "${_h}" = "blake2b-256" ]; then
+ _hash="$( b2sum -l 256 "${_file}" |cut -d ' ' -f 1 )"
+ else
+ _hash="$( "${_h}sum" "${_file}" |cut -d ' ' -f 1 )"
+ fi
if [ "${_hash}" = "${_known}" ]; then
printf "%s: OK (%s: %s)\n" "${base}" "${_h}" "${_hash}"
return 0
diff --git a/support/testing/tests/utils/test_generate_cyclonedx.py b/support/testing/tests/utils/test_generate_cyclonedx.py
index e6640fbd0d..bb80a5ff23 100644
--- a/support/testing/tests/utils/test_generate_cyclonedx.py
+++ b/support/testing/tests/utils/test_generate_cyclonedx.py
@@ -186,6 +186,7 @@ class TestGenerateCycloneDX(unittest.TestCase):
"# source archive checksums\n"
"sha256 1111111111111111111111111111111111111111111111111111111111111111 foo-1.2.tar.gz\n"
"sha1 2222222222222222222222222222222222222222 foo-1.2.tar.gz\n"
+ "blake2b-256 3333333333333333333333333333333333333333333333333333333333333333 foo-1.2.tar.gz\n"
"sha256 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa LICENSE\n"
)
@@ -220,6 +221,10 @@ class TestGenerateCycloneDX(unittest.TestCase):
"alg": "SHA-1",
"content": "2222222222222222222222222222222222222222",
},
+ {
+ "alg": "BLAKE2b-256",
+ "content": "3333333333333333333333333333333333333333333333333333333333333333",
+ },
]
},
{
@@ -234,6 +239,10 @@ class TestGenerateCycloneDX(unittest.TestCase):
"alg": "SHA-1",
"content": "2222222222222222222222222222222222222222",
},
+ {
+ "alg": "BLAKE2b-256",
+ "content": "3333333333333333333333333333333333333333333333333333333333333333",
+ },
],
}
],
diff --git a/utils/checkpackagelib/lib_hash.py b/utils/checkpackagelib/lib_hash.py
index 5968c809bf..3eafe7d9e0 100644
--- a/utils/checkpackagelib/lib_hash.py
+++ b/utils/checkpackagelib/lib_hash.py
@@ -31,7 +31,7 @@ class HashNumberOfFields(_CheckFunction):
class HashType(_CheckFunction):
len_of_hash = {"md5": 32, "sha1": 40, "sha224": 56, "sha256": 64,
- "sha384": 96, "sha512": 128}
+ "sha384": 96, "sha512": 128, "blake2b-256": 64}
def check_line(self, lineno, text):
if _empty_line_or_comment(text):
diff --git a/utils/checkpackagelib/test_lib_hash.py b/utils/checkpackagelib/test_lib_hash.py
index fdc6338189..cbccad647d 100644
--- a/utils/checkpackagelib/test_lib_hash.py
+++ b/utils/checkpackagelib/test_lib_hash.py
@@ -124,6 +124,10 @@ HashType = [
'sha512 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678'
'9012345678\n',
[]),
+ ('blake2b-256',
+ 'any',
+ 'blake2b-256 1234567890123456789012345678901234567890123456789012345678901234\n',
+ []),
]
diff --git a/utils/generate-cyclonedx b/utils/generate-cyclonedx
index bade018cd4..2f5981934f 100755
--- a/utils/generate-cyclonedx
+++ b/utils/generate-cyclonedx
@@ -298,6 +298,7 @@ def cyclonedx_source_hashes(comp, source):
"sha256": "SHA-256",
"sha512": "SHA-512",
"md5": "MD5",
+ "blake2b-256": "BLAKE2b-256",
}
hashes = []
diff --git a/utils/scanpypi b/utils/scanpypi
index 61879e39d4..de658328fe 100755
--- a/utils/scanpypi
+++ b/utils/scanpypi
@@ -672,7 +672,7 @@ class BuildrootPackage():
print('Creating {filename}...'.format(filename=path_to_hash))
lines = []
if self.used_url['digests']['md5'] and self.used_url['digests']['sha256']:
- hash_header = '# md5, sha256 from {url}\n'.format(
+ hash_header = '# md5, sha256, blake2b-256 from {url}\n'.format(
url=self.metadata_url)
lines.append(hash_header)
hash_line = '{method} {digest} {filename}\n'.format(
@@ -685,6 +685,11 @@ class BuildrootPackage():
digest=self.used_url['digests']['sha256'],
filename=self.filename)
lines.append(hash_line)
+ hash_line = '{method} {digest} {filename}\n'.format(
+ method='blake2b-256',
+ digest=self.used_url['digests']['blake2b_256'],
+ filename=self.filename)
+ lines.append(hash_line)
if self.license_files:
lines.append('# Locally computed sha256 checksums\n')
--
2.53.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
next reply other threads:[~2026-06-17 17:42 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-17 17:42 James Hilliard [this message]
2026-06-17 17:42 ` [Buildroot] [PATCH v2 2/3] package/pkg-python: derive PyPI site from blake2b-256 hash James Hilliard
2026-06-17 17:42 ` [Buildroot] [PATCH v2 3/3] package/python-async-timeout: use hash-based PyPI site James Hilliard
2026-06-18 5:51 ` [Buildroot] [PATCH v2 1/3] support/download: add blake2b-256 hash support yann.morin
2026-06-18 14:04 ` [Buildroot] minimum system/coreutils requirements (was: support/download: add blake2b-256 hash support) Marcus Hoffmann via buildroot
2026-06-18 14:27 ` [Buildroot] minimum system/coreutils requirements Peter Korsgaard
2026-06-18 14:59 ` [Buildroot] minimum system/coreutils requirements (was: support/download: add blake2b-256 hash support) yann.morin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260617174208.3968183-1-james.hilliard1@gmail.com \
--to=james.hilliard1@gmail.com \
--cc=buildroot@buildroot.org \
--cc=ricardo.martincoski@datacom.com.br \
--cc=thomas.perale@mind.be \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox