[vlc-devel] [PATCH v2 1/2] contrib: libssp: build libssp on Win32 so we can patch it to use bcrypt

Steve Lhomme robux4 at ycbcr.xyz
Thu Apr 9 10:27:19 CEST 2020


---
 ...r-wincrypt-for-the-random-generator-.patch | 93 +++++++++++++++++++
 ...low-building-outside-of-the-gcc-tree.patch | 57 ++++++++++++
 contrib/src/libssp/SHA512SUMS                 |  1 +
 contrib/src/libssp/rules.mak                  | 29 ++++++
 4 files changed, 180 insertions(+)
 create mode 100644 contrib/src/libssp/0001-favor-bcrypt-over-wincrypt-for-the-random-generator-.patch
 create mode 100644 contrib/src/libssp/0002-allow-building-outside-of-the-gcc-tree.patch
 create mode 100644 contrib/src/libssp/SHA512SUMS
 create mode 100644 contrib/src/libssp/rules.mak

diff --git a/contrib/src/libssp/0001-favor-bcrypt-over-wincrypt-for-the-random-generator-.patch b/contrib/src/libssp/0001-favor-bcrypt-over-wincrypt-for-the-random-generator-.patch
new file mode 100644
index 00000000000..182c013a5c1
--- /dev/null
+++ b/contrib/src/libssp/0001-favor-bcrypt-over-wincrypt-for-the-random-generator-.patch
@@ -0,0 +1,93 @@
+From 5013a7dd9e75c18346b56b2765afaf0658637203 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at ycbcr.xyz>
+Date: Tue, 7 Apr 2020 13:14:52 +0200
+Subject: [PATCH 1/2] favor bcrypt over wincrypt for the random generator on
+ Windows
+
+BCrypt is more modern and supported in Universal Apps, Wincrypt is not and
+CryptGenRandom is deprecated:
+https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom
+
+BCrypt is available since Vista
+https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptopenalgorithmprovider
+
+It requires linking with bcrypt rather than advapi32 for wincrypt.
+---
+ configure.ac | 14 ++++++++++++++
+ ssp.c        | 20 ++++++++++++++++++++
+ 2 files changed, 34 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index f30f81c54f6..c97cf61b0dc 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -158,6 +158,20 @@ else
+ fi
+ AC_SUBST(ssp_have_usable_vsnprintf)
+ 
++AC_ARG_ENABLE(bcrypt,
++AS_HELP_STRING([--disable-bcrypt],
++  [use bcrypt for random generator on Windows (otherwise wincrypt)]),
++  use_win_bcrypt=$enableval,
++  use_win_bcrypt=yes)
++if test "x$use_win_bcrypt" != xno; then
++  case "$target_os" in
++    win32 | pe | mingw32*)
++      AC_CHECK_TYPES([BCRYPT_ALG_HANDLE],[],[],[#include <windows.h>
++#include <bcrypt.h>])
++    ;;
++  esac
++fi
++
+ AM_PROG_LIBTOOL
+ ACX_LT_HOST_FLAGS
+ AC_SUBST(enable_shared)
+diff --git a/ssp.c b/ssp.c
+index 28f3e9cc64a..f07cc41fd4f 100644
+--- a/ssp.c
++++ b/ssp.c
+@@ -56,7 +56,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+    to the console using  "CONOUT$"   */
+ #if defined (_WIN32) && !defined (__CYGWIN__)
+ #include <windows.h>
++#ifdef HAVE_BCRYPT_ALG_HANDLE
++#include <bcrypt.h>
++#else
+ #include <wincrypt.h>
++#endif
+ # define _PATH_TTY "CONOUT$"
+ #else
+ # define _PATH_TTY "/dev/tty"
+@@ -77,6 +81,21 @@ __guard_setup (void)
+     return;
+ 
+ #if defined (_WIN32) && !defined (__CYGWIN__)
++#ifdef HAVE_BCRYPT_ALG_HANDLE
++  BCRYPT_ALG_HANDLE algo = 0;
++  NTSTATUS err = BCryptOpenAlgorithmProvider(&algo, BCRYPT_RNG_ALGORITHM, 
++                                             NULL, 0);
++  if (BCRYPT_SUCCESS(err))
++    {
++      if (BCryptGenRandom(algo, (BYTE *)&__stack_chk_guard,
++                          sizeof (__stack_chk_guard), 0) && __stack_chk_guard != 0)
++        {
++           BCryptCloseAlgorithmProvider(algo, 0);
++           return;
++        }
++      BCryptCloseAlgorithmProvider(algo, 0);
++    }
++#else /* !HAVE_BCRYPT_ALG_HANDLE */
+   HCRYPTPROV hprovider = 0;
+   if (CryptAcquireContext(&hprovider, NULL, NULL, PROV_RSA_FULL,
+                           CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+@@ -89,6 +108,7 @@ __guard_setup (void)
+         }
+       CryptReleaseContext(hprovider, 0);
+     }
++#endif /* !HAVE_BCRYPT_ALG_HANDLE */
+ #else
+   int fd = open ("/dev/urandom", O_RDONLY);
+   if (fd != -1)
+-- 
+2.26.0.windows.1
+
diff --git a/contrib/src/libssp/0002-allow-building-outside-of-the-gcc-tree.patch b/contrib/src/libssp/0002-allow-building-outside-of-the-gcc-tree.patch
new file mode 100644
index 00000000000..1c7e01a9beb
--- /dev/null
+++ b/contrib/src/libssp/0002-allow-building-outside-of-the-gcc-tree.patch
@@ -0,0 +1,57 @@
+From 5c27a95874d03ccc3ad297ae04b04734d83e20e9 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at ycbcr.xyz>
+Date: Tue, 7 Apr 2020 13:56:58 +0200
+Subject: [PATCH 2/2] allow building outside of the gcc tree
+
+DO NOT MERGE
+---
+ Makefile.am  | 4 ----
+ configure.ac | 6 ++----
+ 2 files changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 45fee02da4f..5384077f5b8 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -4,7 +4,6 @@
+ ##
+ 
+ AUTOMAKE_OPTIONS = foreign
+-ACLOCAL_AMFLAGS = -I .. -I ../config
+ MAINT_CHARSET = latin1
+ 
+ # May be used by various substitution variables.
+@@ -105,6 +104,3 @@ AM_MAKEFLAGS = \
+ 
+ MAKEOVERRIDES=
+ 
+-## ################################################################
+-
+-include $(top_srcdir)/../multilib.am
+diff --git a/configure.ac b/configure.ac
+index c97cf61b0dc..53c6402bac7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -24,8 +24,6 @@ AM_MAINTAINER_MODE
+ 
+ GCC_NO_EXECUTABLES
+ 
+-AM_ENABLE_MULTILIB(, ..)
+-
+ target_alias=${target_alias-$host_alias}
+ AC_SUBST(target_alias)
+ 
+@@ -62,8 +60,8 @@ void __attribute__((noinline)) bar (char *x)
+ CFLAGS="$save_CFLAGS"
+ 
+ # Add CET specific flags if CET is enabled
+-GCC_CET_FLAGS(CET_FLAGS)
+-XCFLAGS="$XCFLAGS $CET_FLAGS"
++# GCC_CET_FLAGS(CET_FLAGS)
++# XCFLAGS="$XCFLAGS $CET_FLAGS"
+ AC_SUBST(XCFLAGS)
+ 
+ AC_MSG_CHECKING([whether hidden visibility is supported])
+-- 
+2.26.0.windows.1
+
diff --git a/contrib/src/libssp/SHA512SUMS b/contrib/src/libssp/SHA512SUMS
new file mode 100644
index 00000000000..f750660d9cb
--- /dev/null
+++ b/contrib/src/libssp/SHA512SUMS
@@ -0,0 +1 @@
+40a2ee4fb42fc6474a0fbde208bfff310e160fcb1b015c09f50e7bb7f6039e5b0f81048fc09b239a1e2f03a67b7d8bfe37e64b1683105d2c1ff0af662a65262e  libssp-9_2_0.tar.gz
diff --git a/contrib/src/libssp/rules.mak b/contrib/src/libssp/rules.mak
new file mode 100644
index 00000000000..28c85a6cc22
--- /dev/null
+++ b/contrib/src/libssp/rules.mak
@@ -0,0 +1,29 @@
+# libssp
+LIBSSP_VERSION := 9_2_0
+LIBSSP_SVNURL := svn://gcc.gnu.org/svn/gcc/tags/gcc_$(LIBSSP_VERSION)_release/libssp
+
+ifdef HAVE_WINSTORE
+# the original libssp uses wincrypt which is forbidden in winstore apps
+PKGS += libssp
+endif
+
+$(TARBALLS)/libssp-$(LIBSSP_VERSION).tar.gz:
+	rm -rf libssp-$(LIBSSP_VERSION) libssp
+	$(SVN) checkout -q $(LIBSSP_SVNURL)
+	rm -rf libssp/.svn
+	mv libssp libssp-$(LIBSSP_VERSION)
+	tar czf $@ libssp-$(LIBSSP_VERSION)
+
+.sum-libssp: libssp-$(LIBSSP_VERSION).tar.gz
+
+libssp: libssp-$(LIBSSP_VERSION).tar.gz .sum-libssp
+	$(UNPACK)
+	$(APPLY) $(SRC)/libssp/0001-favor-bcrypt-over-wincrypt-for-the-random-generator-.patch
+	$(APPLY) $(SRC)/libssp/0002-allow-building-outside-of-the-gcc-tree.patch
+	$(MOVE)
+
+.libssp: libssp
+	$(RECONF)
+	cd $< && $(HOSTVARS) ./configure $(HOSTCONF)
+	cd $< && $(MAKE) install
+	touch $@
-- 
2.17.1



More information about the vlc-devel mailing list