]> Sergey Matveev's repositories - bass.git/commitdiff
No dependency on meta4ra-hashers-detect
authorSergey Matveev <stargrave@stargrave.org>
Sat, 14 Mar 2026 17:09:43 +0000 (20:09 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 14 Mar 2026 17:09:43 +0000 (20:09 +0300)
build/bin/cksum
build/bin/hashers-detect [new file with mode: 0755]
build/bin/hashes-check
build/bin/hashes-gen
build/distfiles/bin/metadir-from-file
build/distfiles/dl/default.rc
build/distfiles/dl/gcc-4-compile-with-gcc-5.patch.do
build/lib/mk-pkg
build/lib/pkg-inst
build/pkg/cp-arch
lib/rc

index 55bcbd96d13e6a6dbf7f5e0f4e60e42c13178a5c0681b3b492fb062dd5fcf28c..6c692c2b6df9c85e0b0b13e1db33caacbcd6cc838a1afe463f42fe329d4abbe9 100755 (executable)
@@ -38,7 +38,7 @@ while [ $# -ne 0 ] ; do
     *)
         printf %d:%s, $(printf %s "$arg" | wc -c) "$arg"
     esac
-done | "$BASS_ROOT"/build/bin/hashes-gen "$hashers" >$tmp
+done | BASS_HASHERS="$hashers" "$BASS_ROOT"/build/bin/hashes-gen >$tmp
 read _name hsh <$tmp
 [ -n "$hsh" ]
 perl -MMIME::Base64 \
diff --git a/build/bin/hashers-detect b/build/bin/hashers-detect
new file mode 100755 (executable)
index 0000000..c3f8b5e
--- /dev/null
@@ -0,0 +1,122 @@
+#!/bin/sh -e
+# Detect possible hashers
+
+desired="$1"
+
+check() {
+    local name="$1"
+    local cmd="$2"
+    our=$(echo -n hello world |
+        sh -e -c "$cmd" |
+        { read h rem ; printf %s "$h"; })
+    [ $HSH == "$our" ] && echo "$name $cmd" || return 1
+}
+
+no() {
+    echo no $1 >&2
+}
+
+n=blake3-256
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=d74981efa70a0c880b8d8c1985d075dbcbf679b99a5f9914e5aaf96b831a9e24
+    check $n b3sum || # https://github.com/BLAKE3-team/BLAKE3
+    check $n "meta4ra-hash -hashers $n:builtin" ||
+    no $n
+fi
+
+n=blake2b-512
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=021ced8799296ceca557832ab941a50b4a11f83478cf141f51f933f653ab9fbcc05a037cddbed06e309bf334942c4e58cdf1a46e237911ccd7fcf9787cbc7fd0
+    check $n b2sum || # https://blake2.net/, GNU Coreutils
+    check $n "openssl blake2b512 -r" ||
+    check $n "meta4ra-hash -hashers $n:builtin" ||
+    no $n
+fi
+
+n=blake2b-256
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=256c83b297114d201b30179f3f0ef0cace9783622da5974326b436178aeef610
+    check $n "b2sum -l 256" ||
+    check $n "meta4ra-hash -hashers $n:builtin" ||
+    no $n
+fi
+
+n=skein-512
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=8b4830244fc36daa11177311dc6bf7636376180dce2d29193335878142e7d6f5e9016beba729e0a353dd2fd421c8b2022ee8927f0bce6b88631bb01be2e0f5ba
+    check $n skein512 || # FreeBSD's out-of-box command
+    no $n
+fi
+
+n=shake128
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=3a9159f071e4dd1c8c4f968607c30942e120d8156b8b1e72e0d376e8871cb8b8
+    check $n goshake128 || # go.stargrave.org/gosha3
+    check $n "sha3sum -a 128000 | dd bs=1 count=64 2>/dev/null ; echo" || # p5-Digest-SHA3
+    check $n "meta4ra-hash -hashers $n:builtin" ||
+    no $n
+    # openssl shake128 -- useless, as it outputs only 128 bits
+fi
+
+n=shake256
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=369771bb2cb9d2b04c1d54cca487e372d9f187f73f7ba3f65b95c8ee7798c527f4f3c2d55c2d46a29f2e945d469c3df27853a8735271f5cc2d9e889544357116
+    check $n goshake256 ||
+    check $n "sha3sum -a 256000 | dd bs=1 count=128 2>/dev/null ; echo" ||
+    check $n "meta4ra-hash -hashers $n:builtin" ||
+    no $n
+fi
+
+n=sha-512
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f
+    check $n sha512 ||
+    check $n sha512sum ||
+    check $n "libressl dgst -sha512" ||
+    check $n "openssl sha512 -r" ||
+    check $n "meta4ra-hash -hashers $n:builtin" ||
+    no $n
+fi
+
+n=sha-256
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
+    check $n sha256 ||
+    check $n sha256sum ||
+    check $n "libressl dgst -sha256" ||
+    check $n "openssl sha256 -r" ||
+    check $n "meta4ra-hash -hashers $n:builtin" ||
+    no $n
+fi
+
+unxxd="xxd -c 0 -p"
+unhexdump="hexdump -v -e '/1 \"%02x\"' ; echo"
+n=streebog-512
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=84d883ede9fa6ce855d82d8c278ecd9f5fc88bf0602831ae0c38b9b506ea3cb02f3fa076b8f5664adf1ff862c0157da4cc9a83e141b738ff9268a9ba3ed6f563
+    check $n streebog512 || # go.cypherpunks.su/gogost
+    check $n "nettle-hash --algorithm=streebog512 --raw | $unxxd" ||
+    check $n "nettle-hash --algorithm=streebog512 --raw | $unhexdump" ||
+    check $n "libressl dgst -streebog512" ||
+    check $n "meta4ra-hash -hashers $n:builtin" ||
+    no $n
+fi
+
+n=streebog-256
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=c600fd9dd049cf8abd2f5b32e840d2cb0e41ea44de1c155dcd88dc84fe58a855
+    check $n streebog256 ||
+    check $n "nettle-hash --algorithm=streebog256 --raw | $unxxd" ||
+    check $n "nettle-hash --algorithm=streebog256 --raw | $unhexdump" ||
+    check $n "libressl dgst -streebog256" ||
+    check $n "meta4ra-hash -hashers $n:builtin" ||
+    no $n
+fi
+
+n=xxh3-128
+if [ -z "$desired" ] || [ $desired = "$n" ] ; then
+    HSH=df8d09e93f874900a99b8775cc15b6c7
+    check $n "xxhsum -H128" || # https://cyan4973.github.io/xxHash/
+    check $n "meta4ra-hash -hashers $n:builtin" ||
+    no $n
+fi
index 66d00d4a6d062cf378c3785a723fa66e46b6e8a8a9a5dd92af1fadcf4a280a0b..02e5b5c490479a75fa3947ac60e00a3d3149b6f19615e3a76f5fed9d6590f91d 100755 (executable)
@@ -3,8 +3,8 @@
 
 hashes="$1"
 [ -s "$hashes" ]
-hashers="$2"
-[ -n "$hashers" ] || hashers="$(meta4ra-hashers-detect 2>/dev/null)"
+[ -n "$BASS_HASHERS" ] ||
+    BASS_HASHERS="$("$BASS_ROOT"/build/bin/hashers-detect 2>/dev/null)"
 tmp=$(mktemp -d)
 trap "rm -fr $tmp" HUP PIPE INT QUIT TERM EXIT
 while read name cmd ; do
@@ -18,7 +18,7 @@ EOF
         break
     fi
 done <<EOF
-$hashers
+$BASS_HASHERS
 EOF
 [ -s $tmp/hasher ] || {
     echo no common hashes found >&2
index 1c991c2a07d45e98d4879e5a3cb9b4b0aaf37912ad58636479f345a0329fce86..40c0f9913643e4cd0e94118fd5debe602a0cb97a8211c082b09c512c75d14e32 100755 (executable)
@@ -1,10 +1,10 @@
 #!/bin/sh -e
 # Generates hashes with specified hasher
 
-hashers="$1"
-[ -n "$hashers" ] || hashers="$(meta4ra-hashers-detect 2>/dev/null)"
+[ -n "$BASS_HASHERS" ] ||
+    BASS_HASHERS="$("$BASS_ROOT"/build/bin/hashers-detect 2>/dev/null)"
 if command -v meta4ra-hash >/dev/null 2>/dev/null ; then
-    meta4ra-hash -all -hashers "$hashers"
+    meta4ra-hash -all -hashers "$BASS_HASHERS"
     exit
 fi
 tmp=$(mktemp -d)
@@ -19,7 +19,7 @@ EOF
     chmod +x $name.sh
     echo $name >>names
 done <<EOF
-$hashers
+$BASS_HASHERS
 EOF
 for name in $(cat names) ; do
     ./$name.sh <$name.in >$name.out &
index f1909725777e8f3d3fae0afa65c2f67fdf492f0bab3be596ea4c9caed83a5249..de9c62a8a40e66d6df8809e41f878e0eac662bef28c8ac4fdcb5f82db9cb31cc 100755 (executable)
@@ -8,4 +8,4 @@ sname=$0 . "$BASS_ROOT"/lib/rc
 dst=$(basename $1)
 mkdir -p $dst
 "$BASS_ROOT"/bin/filessize $1 >$dst/size
-"$BASS_ROOT"/build/bin/hashes-gen "$BASS_HASHERS" <$1 >$dst/hashes
+"$BASS_ROOT"/build/bin/hashes-gen <$1 >$dst/hashes
index 4b4b5517a527b8d02a0655983481e2bf2fc5a0df559d17f59927d83c7220c489..01e08dee28c716704b682007ff6d9566e286e50fa2c4673edb9cb531b5e4a307 100644 (file)
@@ -9,10 +9,9 @@ if [ -r cache/$dst ] ; then
     echo using cache/$dst... >&2
     if [ -s "$metadir"/hashes ] ; then
         $PV cache/$dst |
-        "$BASS_ROOT"/build/bin/hashes-check "$metadir"/hashes "$BASS_HASHERS" \
-            2>&1 >/dev/null || {
-                echo hash check failed >&2
-                exit 1
+        "$BASS_ROOT"/build/bin/hashes-check "$metadir"/hashes 2>&1 >/dev/null || {
+            echo hash check failed >&2
+            exit 1
         }
     else
         echo warning: no $metadir/hashes >&2
@@ -57,8 +56,7 @@ justdl)
         url="${url##*|}"
         if [ -s "$metadir"/hashes ] ; then
             $JUSTDL "$url" |
-            "$BASS_ROOT"/build/bin/hashes-check "$metadir"/hashes "$BASS_HASHERS" \
-            >$fn || {
+            "$BASS_ROOT"/build/bin/hashes-check "$metadir"/hashes >$fn || {
                 echo hash check failed >&2
                 rm $fn
                 continue
index f41f5a80cdca0a59ab75429b03cfba440b0e9b30c35bcd972686dddc7b3f57bf..79ca64c7df3c6d6b26327669111db6890b16a112f7303fe0abc5e8844478630b 100644 (file)
@@ -4,4 +4,4 @@
     v1.5.0 >/dev/null
 p=gnu/packages/patches/gcc-4-compile-with-gcc-5.patch
 ( cd ../repo/guix.git ; git archive @ $p | tar xfO - $p ) >$3
-../../bin/hashes-check $1.hashes "$BASS_HASHERS" <$3 >/dev/null
+../../bin/hashes-check $1.hashes <$3 >/dev/null
index 83156fd75501b7a79db49062fc896d5788bf67d5704f15b6ca3e5833a081d2f9..52a8f681b8751f3988f5256cd26ca795ce0cc4cd7665cd68d089d85ce3a063b5 100755 (executable)
@@ -38,11 +38,11 @@ tmp=$(mktemp -d $TMPDIR/$namenhash-mk-pkg.XXXXXX)
 trap "rm -fr $tmp" HUP PIPE INT QUIT TERM EXIT
 
 echo $namenhash | tee $tmp/name |
-    "$BASS_ROOT"/build/bin/hashes-gen "$BASS_HASHERS" >$tmp/name.hashes
+    "$BASS_ROOT"/build/bin/hashes-gen >$tmp/name.hashes
 cat >$tmp/buildinfo <<EOF
 $BASS_REV
 EOF
-"$BASS_ROOT"/build/bin/hashes-gen "$BASS_HASHERS" <$tmp/buildinfo >$tmp/buildinfo.hashes
+"$BASS_ROOT"/build/bin/hashes-gen <$tmp/buildinfo >$tmp/buildinfo.hashes
 
 chmod -R a-w $namenhash
 {
@@ -51,8 +51,7 @@ chmod -R a-w $namenhash
 } |
 { $COMPRESSOR || touch $tmp/tar-pipe-failed ; } |
 { tee $tmp/$namenhash || touch $tmp/tar-pipe-failed ; } |
-{ "$BASS_ROOT"/build/bin/hashes-gen "$BASS_HASHERS" || touch $tmp/tar-pipe-failed
-} >$tmp/$namenhash.hashes
+{ "$BASS_ROOT"/build/bin/hashes-gen || touch $tmp/tar-pipe-failed ; } >$tmp/$namenhash.hashes
 [ ! -e $tmp/tar-pipe-failed ]
 
 cd $tmp
index 285580978169c079ee136c8ee0e6efdc65a6a203644271f6a1faa4e7f7640c60..5879c41e4bf3535476447e9a6c5a54441e5f279acc63b8bc7cc2b3e54762c41b 100755 (executable)
@@ -44,8 +44,7 @@ else
     cd $tmp
     $TAR xf $skelpkg bin.hashes
     $TAR xfO $skelpkg bin | {
-        "$BASS_ROOT"/build/bin/hashes-check bin.hashes "$BASS_HASHERS" ||
-        touch untar-failed
+        "$BASS_ROOT"/build/bin/hashes-check bin.hashes || touch untar-failed
     } | $TAR xf - || touch untar-failed
     [ ! -e untar-failed ]
     rm -f $fn.hashes
index c4bf7c7f22c106580e1337d1c41680b7f3650cbb358f1d7147c05ee2992657bc..7f167ff7dd206bbe0a52b4ab04c18b85cc1f54f841fe023c64c64bcc5af8018d 100755 (executable)
@@ -24,8 +24,10 @@ find . -type f -and -not -name "*.do" -and -not -path "*/.redo/*" | while read p
         oursize=$("$BASS_ROOT"/bin/filessize $pkg)
         theirsize=$("$BASS_ROOT"/bin/filessize "$dst"/$arch/$base)
         if [ "$oursize" -eq "$theirsize" ] ; then
-            "$BASS_ROOT"/build/bin/hashes-gen "$hashers" <$pkg >$tmp/hshour &
-            "$BASS_ROOT"/build/bin/hashes-gen "$hashers" <"$dst"/$arch/$base >$tmp/hshtheir &
+            BASS_HASHERS="$hashers" "$BASS_ROOT"/build/bin/hashes-gen \
+                <$pkg >$tmp/hshour &
+            BASS_HASHERS="$hashers" "$BASS_ROOT"/build/bin/hashes-gen \
+                <"$dst"/$arch/$base >$tmp/hshtheir &
             wait
             read hshour <$tmp/hshour
             read hshtheir <$tmp/hshtheir
diff --git a/lib/rc b/lib/rc
index b95a7ed4c9c8a353187987a0b87ebb299c6d8ffa573c734fe3295b0e9554964c..b76bd30b96cde0d5ac1c1208209e1cac9a0a426a0cd620fcb0817c161f254dee 100644 (file)
--- a/lib/rc
+++ b/lib/rc
@@ -25,7 +25,7 @@ if [ -z "$SETLOCK" ] ; then
     }
 fi
 
-export BASS_HASHERS="${BASS_HASHERS:-$(meta4ra-hashers-detect 2>/dev/null)}"
+export BASS_HASHERS="${BASS_HASHERS:-$("$BASS_ROOT"/build/bin/hashers-detect 2>/dev/null)}"
 
 export FSYNC=${FSYNC:-$(command -v fsync 2>/dev/null || command -v sync)}
 export TAR=${TAR:-bsdtar}