Compare commits
9 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b5cc6dfa7 | ||
|
|
1f251538bf | ||
|
|
5cccaeedc8 | ||
|
|
8410ea7745 | ||
|
|
7075aade55 | ||
|
|
fa4b79c7e3 | ||
|
|
7458001e1a | ||
|
|
a07b4eb076 | ||
|
|
78bcf6341d |
7 changed files with 1592 additions and 33 deletions
10
.gitignore
vendored
10
.gitignore
vendored
|
|
@ -163,3 +163,13 @@ gnutls-2.10.1-nosrp.tar.bz2
|
|||
/gnutls-3.8.7.1.tar.xz.sig
|
||||
/gnutls-3.8.8.tar.xz
|
||||
/gnutls-3.8.8.tar.xz.sig
|
||||
/gnutls-3.8.9.tar.xz
|
||||
/gnutls-3.8.9.tar.xz.sig
|
||||
/leancrypto-1.2.0.tar.gz
|
||||
/leancrypto-1.3.0.tar.gz
|
||||
/gnutls-3.8.10.tar.xz
|
||||
/gnutls-3.8.10.tar.xz.sig
|
||||
/leancrypto-1.5.0.tar.gz
|
||||
/gnutls-3.8.11.tar.xz
|
||||
/gnutls-3.8.11.tar.xz.sig
|
||||
/leancrypto-1.6.0.tar.gz
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
This repository is maintained by packit.
|
||||
https://packit.dev/
|
||||
The file was generated using packit 0.102.2.
|
||||
The file was generated using packit 1.12.0.
|
||||
|
|
|
|||
114
gnutls-3.8.10-tests-ktls.patch
Normal file
114
gnutls-3.8.10-tests-ktls.patch
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
From e0eb2bbb212a5c9d72311c59e7235832a0075dcc Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 9 Jul 2025 18:54:48 +0900
|
||||
Subject: [PATCH] add tests/ktls_utils.h
|
||||
|
||||
Signed-off-by: rpm-build <rpm-build>
|
||||
---
|
||||
tests/ktls_utils.h | 94 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 94 insertions(+)
|
||||
create mode 100644 tests/ktls_utils.h
|
||||
|
||||
diff --git a/tests/ktls_utils.h b/tests/ktls_utils.h
|
||||
new file mode 100644
|
||||
index 0000000..231618d
|
||||
--- /dev/null
|
||||
+++ b/tests/ktls_utils.h
|
||||
@@ -0,0 +1,94 @@
|
||||
+#ifndef GNUTLS_TESTS_KTLS_UTILS_H
|
||||
+#define GNUTLS_TESTS_KTLS_UTILS_H
|
||||
+
|
||||
+#include <fcntl.h>
|
||||
+#include <signal.h>
|
||||
+
|
||||
+#include <netinet/in.h>
|
||||
+
|
||||
+#include <sys/socket.h>
|
||||
+#include <sys/wait.h>
|
||||
+
|
||||
+/* Sets the NONBLOCK flag on the socket(fd) */
|
||||
+inline static int set_nonblocking(int fd)
|
||||
+{
|
||||
+ int flags = fcntl(fd, F_GETFL, 0);
|
||||
+ if (flags == -1) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) {
|
||||
+ return 2;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* Creates a pair of TCP connected sockets */
|
||||
+static int create_socket_pair(int *client_fd, int *server_fd)
|
||||
+{
|
||||
+ int ret;
|
||||
+ struct sockaddr_in saddr;
|
||||
+ socklen_t addrlen;
|
||||
+ int listener;
|
||||
+
|
||||
+ listener = socket(AF_INET, SOCK_STREAM, 0);
|
||||
+ if (listener == -1) {
|
||||
+ fail("error in listener(): %s\n", strerror(errno));
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ int opt = 0;
|
||||
+ setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
|
||||
+
|
||||
+ memset(&saddr, 0, sizeof(saddr));
|
||||
+ saddr.sin_family = AF_INET;
|
||||
+ saddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
|
||||
+ saddr.sin_port = 0;
|
||||
+
|
||||
+ ret = bind(listener, (struct sockaddr *)&saddr, sizeof(saddr));
|
||||
+ if (ret == -1) {
|
||||
+ fail("error in bind(): %s\n", strerror(errno));
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ addrlen = sizeof(saddr);
|
||||
+ ret = getsockname(listener, (struct sockaddr *)&saddr, &addrlen);
|
||||
+ if (ret == -1) {
|
||||
+ fail("error in getsockname(): %s\n", strerror(errno));
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ ret = listen(listener, 1);
|
||||
+ if (ret == -1) {
|
||||
+ fail("error in listen(): %s\n", strerror(errno));
|
||||
+ close(listener);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ *client_fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
+ if (*client_fd < 0) {
|
||||
+ fail("error in socket(): %s\n", strerror(errno));
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ ret = connect(*client_fd, (struct sockaddr *)&saddr, addrlen);
|
||||
+ if (ret < 0) {
|
||||
+ fail("error in connect(): %s\n", strerror(errno));
|
||||
+ close(listener);
|
||||
+ close(*client_fd);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ *server_fd = accept(listener, NULL, NULL);
|
||||
+ if (*server_fd < 0) {
|
||||
+ fail("error in accept(): %s\n", strerror(errno));
|
||||
+ close(listener);
|
||||
+ close(*client_fd);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#endif //GNUTLS_TESTS_KTLS_UTILS_H
|
||||
--
|
||||
2.49.0
|
||||
|
||||
58
gnutls-3.8.10-tests-mldsa.patch
Normal file
58
gnutls-3.8.10-tests-mldsa.patch
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
From 15fb5ad536c375a74cc0d87859c9fc919d924c9d Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Thu, 10 Jul 2025 05:45:06 +0900
|
||||
Subject: [PATCH] support VPATH build for mldsa tests
|
||||
|
||||
Signed-off-by: rpm-build <rpm-build>
|
||||
---
|
||||
tests/cert-tests/mldsa.sh | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/tests/cert-tests/mldsa.sh b/tests/cert-tests/mldsa.sh
|
||||
index 7e31e11..55e31ce 100644
|
||||
--- a/tests/cert-tests/mldsa.sh
|
||||
+++ b/tests/cert-tests/mldsa.sh
|
||||
@@ -130,7 +130,7 @@ for variant in 44 65 87; do
|
||||
# Check default
|
||||
TMPKEYDEFAULT=$testdir/key-$algo-$format-default
|
||||
TMPKEY=$testdir/key-$algo-$format
|
||||
- ${VALGRIND} "${CERTTOOL}" -k --no-text --infile "data/key-$algo-$format.pem" >"$TMPKEYDEFAULT"
|
||||
+ ${VALGRIND} "${CERTTOOL}" -k --no-text --infile "$srcdir/data/key-$algo-$format.pem" >"$TMPKEYDEFAULT"
|
||||
if [ $? != 0 ]; then
|
||||
cat "$TMPKEYDEFAULT"
|
||||
exit 1
|
||||
@@ -138,19 +138,19 @@ for variant in 44 65 87; do
|
||||
|
||||
# The "expandedKey" format doesn't have public key part
|
||||
if [ "$format" = seed ] || [ "$format" = both ]; then
|
||||
- if ! "${DIFF}" "$TMPKEYDEFAULT" "data/key-$algo-both.pem"; then
|
||||
+ if ! "${DIFF}" "$TMPKEYDEFAULT" "$srcdir/data/key-$algo-both.pem"; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check roundtrip with --key-format
|
||||
- ${VALGRIND} "${CERTTOOL}" -k --no-text --key-format "$format" --infile "data/key-$algo-$format.pem" >"$TMPKEY"
|
||||
+ ${VALGRIND} "${CERTTOOL}" -k --no-text --key-format "$format" --infile "$srcdir/data/key-$algo-$format.pem" >"$TMPKEY"
|
||||
if [ $? != 0 ]; then
|
||||
cat "$TMPKEY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- if ! "${DIFF}" "$TMPKEY" "data/key-$algo-$format.pem"; then
|
||||
+ if ! "${DIFF}" "$TMPKEY" "$srcdir/data/key-$algo-$format.pem"; then
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
@@ -164,7 +164,7 @@ for n in 1; do
|
||||
fi
|
||||
|
||||
echo "Testing inconsistent ML-DSA key ($n)"
|
||||
- if "${CERTTOOL}" -k --infile "data/key-mldsa-inconsistent$n.pem"; then
|
||||
+ if "${CERTTOOL}" -k --infile "$srcdir/data/key-mldsa-inconsistent$n.pem"; then
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
--
|
||||
2.49.0
|
||||
|
||||
1310
gnutls-3.8.9-ktls-kernel-check.patch
Normal file
1310
gnutls-3.8.9-ktls-kernel-check.patch
Normal file
File diff suppressed because it is too large
Load diff
125
gnutls.spec
125
gnutls.spec
|
|
@ -12,7 +12,7 @@ sha256sum:close()
|
|||
print(string.sub(hash, 0, 16))
|
||||
}
|
||||
|
||||
Version: 3.8.8
|
||||
Version: 3.8.11
|
||||
Release: %{?autorelease}%{!?autorelease:1%{?dist}}
|
||||
Patch: gnutls-3.2.7-rpath.patch
|
||||
|
||||
|
|
@ -24,9 +24,14 @@ Patch: gnutls-3.8.8-tests-ktls-skip-tls12-chachapoly.patch
|
|||
%bcond_without fips
|
||||
%bcond_with tpm12
|
||||
%bcond_without tpm2
|
||||
%if 0%{?rhel} >= 9
|
||||
%bcond_with gost
|
||||
%else
|
||||
%bcond_without gost
|
||||
%endif
|
||||
%bcond_without certificate_compression
|
||||
%bcond_without liboqs
|
||||
%bcond_without leancrypto
|
||||
%bcond_with crypto_auditing
|
||||
%bcond_without tests
|
||||
|
||||
%if 0%{?fedora} && 0%{?fedora} < 38
|
||||
|
|
@ -64,13 +69,13 @@ BuildRequires: readline-devel, libtasn1-devel >= 4.3
|
|||
%if %{with certificate_compression}
|
||||
BuildRequires: zlib-devel, brotli-devel, libzstd-devel
|
||||
%endif
|
||||
%if %{with liboqs}
|
||||
BuildRequires: liboqs-devel
|
||||
%endif
|
||||
%if %{with bootstrap}
|
||||
BuildRequires: automake, autoconf, gperf, libtool, texinfo
|
||||
%endif
|
||||
BuildRequires: nettle-devel >= 3.10
|
||||
BuildRequires: nettle-devel >= 3.10.1
|
||||
%if %{with leancrypto}
|
||||
BuildRequires: meson
|
||||
%endif
|
||||
%if %{with tpm12}
|
||||
BuildRequires: trousers-devel >= 0.3.11.2
|
||||
%endif
|
||||
|
|
@ -82,6 +87,9 @@ BuildRequires: libunistring-devel
|
|||
BuildRequires: net-tools, softhsm, gcc, gcc-c++
|
||||
BuildRequires: gnupg2
|
||||
BuildRequires: git-core
|
||||
%if %{with crypto_auditing}
|
||||
BuildRequires: systemtap-sdt-devel
|
||||
%endif
|
||||
|
||||
# for a sanity check on cert loading
|
||||
BuildRequires: p11-kit-trust, ca-certificates
|
||||
|
|
@ -89,7 +97,7 @@ Requires: crypto-policies
|
|||
Requires: p11-kit-trust
|
||||
Requires: libtasn1 >= 4.3
|
||||
# always bump when a nettle release is packaged
|
||||
Requires: nettle >= 3.10
|
||||
Requires: nettle >= 3.10.1
|
||||
%if %{with tpm12}
|
||||
Recommends: trousers >= 0.3.11.2
|
||||
%endif
|
||||
|
|
@ -125,9 +133,20 @@ Source1: https://www.gnupg.org/ftp/gcrypt/gnutls/v%{short_version}/%{name}-%{ver
|
|||
Source2: https://gnutls.org/gnutls-release-keyring.gpg
|
||||
|
||||
%if %{with bundled_gmp}
|
||||
Provides: bundled(gmp) = 6.2.1
|
||||
Source100: gmp-6.2.1.tar.xz
|
||||
# Taken from the main gmp package
|
||||
Source101: gmp-6.2.1-intel-cet.patch
|
||||
Source102: gmp-6.2.1-c23.patch
|
||||
%endif
|
||||
|
||||
%if 0%{?rhel} >= 10
|
||||
Source201: gnutls-3.8.8-tests-rsa-default.patch
|
||||
%endif
|
||||
|
||||
%if %{with leancrypto}
|
||||
Provides: bundled(leancrypto) = 1.6.0
|
||||
Source300: leancrypto-1.6.0.tar.gz
|
||||
%endif
|
||||
|
||||
# Wildcard bundling exception https://fedorahosted.org/fpc/ticket/174
|
||||
|
|
@ -258,12 +277,24 @@ mkdir -p bundled_gmp
|
|||
pushd bundled_gmp
|
||||
tar --strip-components=1 -xf %{SOURCE100}
|
||||
patch -p1 < %{SOURCE101}
|
||||
patch -p1 < %{SOURCE102}
|
||||
popd
|
||||
%endif
|
||||
|
||||
%if 0%{?rhel} >= 10
|
||||
patch -p1 < %{SOURCE201}
|
||||
%endif
|
||||
|
||||
%build
|
||||
%define _lto_cflags %{nil}
|
||||
|
||||
%if %{with leancrypto}
|
||||
mkdir -p bundled_leancrypto
|
||||
pushd bundled_leancrypto
|
||||
tar --strip-components=1 -xf %{SOURCE300}
|
||||
popd
|
||||
%endif
|
||||
|
||||
%if %{with bundled_gmp}
|
||||
pushd bundled_gmp
|
||||
autoreconf -ifv
|
||||
|
|
@ -275,6 +306,43 @@ export GMP_CFLAGS="-I$PWD/bundled_gmp"
|
|||
export GMP_LIBS="$PWD/bundled_gmp/.libs/libgmp.a"
|
||||
%endif
|
||||
|
||||
%if %{with leancrypto}
|
||||
pushd bundled_leancrypto
|
||||
%set_build_flags
|
||||
meson setup -Dprefix="$PWD/install" -Dlibdir="$PWD/install/lib" \
|
||||
-Ddefault_library=static \
|
||||
-Dascon=disabled -Dascon_keccak=disabled \
|
||||
-Dbike_5=disabled -Dbike_3=disabled -Dbike_1=disabled \
|
||||
-Dkyber_x25519=disabled -Ddilithium_ed25519=disabled \
|
||||
-Dx509_parser=disabled -Dx509_generator=disabled \
|
||||
-Dpkcs7_parser=disabled -Dpkcs7_generator=disabled \
|
||||
-Dsha2-256=disabled \
|
||||
-Daes_gcm=disabled -Daes_cbc=disabled -Daes_ctr=disabled -Daes_xts=disabled \
|
||||
-Dchacha20=disabled -Dchacha20poly1305=disabled -Dchacha20_drng=disabled \
|
||||
-Ddrbg_hash=disabled -Ddrbg_hmac=disabled \
|
||||
-Dhash_crypt=disabled \
|
||||
-Dhmac=disabled -Dhkdf=disabled \
|
||||
-Dkdf_ctr=disabled -Dkdf_fb=disabled -Dkdf_dpi=disabled \
|
||||
-Dpbkdf2=disabled \
|
||||
-Dkmac_drng=disabled -Dcshake_drng=disabled \
|
||||
-Dhotp=disabled -Dtotp=disabled \
|
||||
-Daes_block=disabled -Daes_cbc=disabled -Daes_ctr=disabled \
|
||||
-Daes_kw=disabled -Dapps=disabled \
|
||||
-Ddisable-asm=true \
|
||||
_build
|
||||
# the reason for -Ddisable-asm=true being bz2416812
|
||||
# revert once the root cause is fixed
|
||||
meson compile -C _build
|
||||
meson install -C _build
|
||||
|
||||
popd
|
||||
|
||||
export LEANCRYPTO_DIR="$PWD/bundled_leancrypto/install"
|
||||
|
||||
export LEANCRYPTO_CFLAGS="-I$LEANCRYPTO_DIR/include"
|
||||
export LEANCRYPTO_LIBS="$LEANCRYPTO_DIR/lib/libleancrypto.a"
|
||||
%endif
|
||||
|
||||
%if %{with bootstrap}
|
||||
autoreconf -fi
|
||||
%endif
|
||||
|
|
@ -292,8 +360,14 @@ eval $(sed -n 's/^\(\(NAME\|VERSION_ID\)=.*\)/OS_\1/p' /etc/os-release)
|
|||
export FIPS_MODULE_NAME="$OS_NAME ${OS_VERSION_ID%%.*} %name"
|
||||
%endif
|
||||
|
||||
# F42 MinGW only has Nettle 3.7
|
||||
%if %{with mingw}
|
||||
sed -i 's/NETTLE_MINIMUM=3.10/NETTLE_MINIMUM=3.7/' configure
|
||||
%endif
|
||||
|
||||
mkdir native_build
|
||||
pushd native_build
|
||||
|
||||
%global _configure ../configure
|
||||
%configure \
|
||||
%if %{with fips}
|
||||
|
|
@ -341,15 +415,23 @@ pushd native_build
|
|||
%else
|
||||
--without-zlib --without-brotli --without-zstd \
|
||||
%endif
|
||||
%if %{with liboqs}
|
||||
--with-liboqs \
|
||||
%if %{with leancrypto}
|
||||
--with-leancrypto \
|
||||
%else
|
||||
--without-liboqs \
|
||||
--without-leancrypto \
|
||||
%endif
|
||||
%if %{with crypto_auditing}
|
||||
--enable-crypto-auditing \
|
||||
%else
|
||||
--disable-crypto-auditing \
|
||||
%endif
|
||||
--disable-rpath \
|
||||
--with-default-priority-string="@SYSTEM"
|
||||
|
||||
%make_build
|
||||
%if %{with leancrypto}
|
||||
sed -i '/^Requires.private:/s/leancrypto[ ,]*//g' lib/gnutls.pc
|
||||
%endif
|
||||
popd
|
||||
|
||||
%if %{with mingw}
|
||||
|
|
@ -440,22 +522,7 @@ rm -f $RPM_BUILD_ROOT%{mingw64_libdir}/ncrypt.dll*
|
|||
%check
|
||||
%if %{with tests}
|
||||
pushd native_build
|
||||
|
||||
# KeyUpdate is not yet supported in the kernel.
|
||||
xfail_tests=ktls_keyupdate.sh
|
||||
|
||||
# The ktls.sh test currently only supports kernel 5.11+. This needs to
|
||||
# be checked at run time, as the koji builder might be using a different
|
||||
# version of kernel on the host than the one indicated by the
|
||||
# kernel-devel package.
|
||||
|
||||
case "$(uname -r)" in
|
||||
4.* | 5.[0-9].* | 5.10.* )
|
||||
xfail_tests="$xfail_tests ktls.sh"
|
||||
;;
|
||||
esac
|
||||
|
||||
make check %{?_smp_mflags} GNUTLS_SYSTEM_PRIORITY_FILE=/dev/null XFAIL_TESTS="$xfail_tests"
|
||||
make check %{?_smp_mflags} GNUTLS_SYSTEM_PRIORITY_FILE=/dev/null || { cat tests/test-suite.log tests/cert-tests/test-suite.log tests/slow/test-suite.log src/gl/tests/test-suite.log; exit 1; }
|
||||
popd
|
||||
%endif
|
||||
|
||||
|
|
@ -465,7 +532,7 @@ popd
|
|||
%{_libdir}/.libgnutls.so.30*.hmac
|
||||
%endif
|
||||
%doc README.md AUTHORS NEWS THANKS
|
||||
%license LICENSE doc/COPYING doc/COPYING.LESSER
|
||||
%license COPYING COPYING.LESSERv2
|
||||
|
||||
%files c++
|
||||
%{_libdir}/libgnutlsxx.so.*
|
||||
|
|
@ -509,7 +576,7 @@ popd
|
|||
|
||||
%if %{with mingw}
|
||||
%files -n mingw32-%{name}
|
||||
%license LICENSE doc/COPYING doc/COPYING.LESSER
|
||||
%license COPYING COPYING.LESSERv2
|
||||
%{mingw32_bindir}/certtool.exe
|
||||
%{mingw32_bindir}/gnutls-cli-debug.exe
|
||||
%{mingw32_bindir}/gnutls-cli.exe
|
||||
|
|
@ -527,7 +594,7 @@ popd
|
|||
%{mingw32_includedir}/gnutls/
|
||||
|
||||
%files -n mingw64-%{name}
|
||||
%license LICENSE doc/COPYING doc/COPYING.LESSER
|
||||
%license COPYING COPYING.LESSERv2
|
||||
%{mingw64_bindir}/certtool.exe
|
||||
%{mingw64_bindir}/gnutls-cli-debug.exe
|
||||
%{mingw64_bindir}/gnutls-cli.exe
|
||||
|
|
|
|||
6
sources
6
sources
|
|
@ -1,4 +1,4 @@
|
|||
SHA512 (gnutls-3.8.8.tar.xz) = 4f617c63e8e8392e400d72c9e39989fcd782268b4a4c4e36bbfb0444a4b5bcb0f53054f04a6dce99ab89c0f38f57430c95aaaec6eb9209b8e9329140abf230c3
|
||||
SHA512 (gnutls-3.8.8.tar.xz.sig) = fdff792511e9e5de203a1dfd66bf521c12fb74a19de651ffa1f7359dafdd1dad59ae57d0f95fa363c4167f798e6b624b4ae1f84d4e0737ff690c2fb0e5a5bdce
|
||||
SHA512 (gnutls-3.8.11.tar.xz) = 68f9e5bec3aa6686fd3319cc9c88a5cc44e2a75144049fc9de5fb55fef2241b4e16996af4be5dd48308abbee8cfaed6c862903f6bb89aff5dfa5410075bd7386
|
||||
SHA512 (gnutls-3.8.11.tar.xz.sig) = 90883e5736299b103844ca42b85d371969ef66b50b60cb185e814ad9978598796e9ed07a590245ff28ac6ac084b1dee93fae0845576464583a5941835990957d
|
||||
SHA512 (gnutls-release-keyring.gpg) = 8c2b39239d1d8c5319757fcf669f28a11de7f8ec4a726f9904c57ba8105bea80240083c0de71b747115907bab46569f10cf58004137cc7884ac5c20f8319ae0a
|
||||
SHA512 (gmp-6.2.1.tar.xz) = c99be0950a1d05a0297d65641dd35b75b74466f7bf03c9e8a99895a3b2f9a0856cd17887738fa51cf7499781b65c049769271cbcb77d057d2e9f1ec52e07dd84
|
||||
SHA512 (leancrypto-1.6.0.tar.gz) = cb6ace4a1642208dd7656b62a48e99d6261f471aa7967b738057745a4534abfa11d380dd5de98a737c0c13b1e1cb37ce780e02297eefc1cf839581629d34e100
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue