[vlc-commits] contrib: libarchive: don't force bcrypt in Winstore builds

Steve Lhomme git at videolan.org
Fri Jun 19 14:53:33 CEST 2020


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Fri Jun 19 13:25:20 2020 +0200| [e4dc3daa9367a6759531aef9ca7f78abebd1cdfe] | committer: Steve Lhomme

contrib: libarchive: don't force bcrypt in Winstore builds

We use WINSTORECOMPAT and we shouldn't link with it

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e4dc3daa9367a6759531aef9ca7f78abebd1cdfe
---

 .../src/libarchive/libarchive-win32-bcrypt.patch   | 145 ---------------------
 contrib/src/libarchive/rules.mak                   |   1 -
 2 files changed, 146 deletions(-)

diff --git a/contrib/src/libarchive/libarchive-win32-bcrypt.patch b/contrib/src/libarchive/libarchive-win32-bcrypt.patch
deleted file mode 100644
index 4fb37a7073..0000000000
--- a/contrib/src/libarchive/libarchive-win32-bcrypt.patch
+++ /dev/null
@@ -1,145 +0,0 @@
-From adea9385d6e57cdc11e073bdcf214012c261f5f6 Mon Sep 17 00:00:00 2001
-From: Steve Lhomme <robux4 at ycbcr.xyz>
-Date: Fri, 27 Mar 2020 11:40:51 +0100
-Subject: [PATCH 3/4] use bcrypt rather than wincrypt
-
----
- configure.ac                |  4 ++--
- libarchive/archive_random.c | 26 ++++++++++----------------
- libarchive/archive_util.c   | 20 ++++++++++----------
- 3 files changed, 22 insertions(+), 28 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index c517b17c..7312c4d5 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -295,7 +295,7 @@ AC_CHECK_HEADERS([sys/time.h sys/utime.h sys/utsname.h sys/vfs.h sys/xattr.h])
- AC_CHECK_HEADERS([time.h unistd.h utime.h wchar.h wctype.h])
- AC_CHECK_HEADERS([windows.h])
- # check windows.h first; the other headers require it.
--AC_CHECK_HEADERS([wincrypt.h winioctl.h],[],[],
-+AC_CHECK_HEADERS([bcrypt.h winioctl.h],[],[],
- [[#ifdef HAVE_WINDOWS_H
- # include <windows.h>
- #endif
-@@ -1066,7 +1066,7 @@ AC_DEFUN([CRYPTO_CHECK_WIN], [
-     AC_LINK_IFELSE([AC_LANG_SOURCE([
- #define ARCHIVE_$1_COMPILE_TEST
- #include <windows.h>
--#include <wincrypt.h>
-+#include <bcrypt.h>
- 
- int
- main(int argc, char **argv)
-diff --git a/libarchive/archive_random.c b/libarchive/archive_random.c
-index 65ea6915..c39d9f54 100644
---- a/libarchive/archive_random.c
-+++ b/libarchive/archive_random.c
-@@ -58,8 +58,8 @@ static void arc4random_buf(void *, size_t);
- #include "archive.h"
- #include "archive_random_private.h"
- 
--#if defined(HAVE_WINCRYPT_H) && !defined(__CYGWIN__)
--#include <wincrypt.h>
-+#if defined(HAVE_BCRYPT_H) && !defined(__CYGWIN__)
-+#include <bcrypt.h>
- #endif
- 
- #ifndef O_CLOEXEC
-@@ -74,20 +74,14 @@ static void arc4random_buf(void *, size_t);
- int
- archive_random(void *buf, size_t nbytes)
- {
--#if defined(_WIN32) && !defined(__CYGWIN__)
--	HCRYPTPROV hProv;
--	BOOL success;
--
--	success = CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,
--	    CRYPT_VERIFYCONTEXT);
--	if (!success && GetLastError() == (DWORD)NTE_BAD_KEYSET) {
--		success = CryptAcquireContext(&hProv, NULL, NULL,
--		    PROV_RSA_FULL, CRYPT_NEWKEYSET);
--	}
--	if (success) {
--		success = CryptGenRandom(hProv, (DWORD)nbytes, (BYTE*)buf);
--		CryptReleaseContext(hProv, 0);
--		if (success)
-+#if defined(HAVE_BCRYPT_H) && !defined(__CYGWIN__)
-+	BCRYPT_ALG_HANDLE algo_handle;
-+	NTSTATUS ret = BCryptOpenAlgorithmProvider(&algo_handle, BCRYPT_RNG_ALGORITHM,
-+	                                           MS_PRIMITIVE_PROVIDER, 0);
-+	if (BCRYPT_SUCCESS(ret)) {
-+		ret = BCryptGenRandom(algo_handle, buf, nbytes, 0);
-+		BCryptCloseAlgorithmProvider(algo_handle, 0);
-+		if (BCRYPT_SUCCESS(ret))
- 			return ARCHIVE_OK;
- 	}
- 	/* TODO: Does this case really happen? */
-diff --git a/libarchive/archive_util.c b/libarchive/archive_util.c
-index 3399c0b5..38e4a839 100644
---- a/libarchive/archive_util.c
-+++ b/libarchive/archive_util.c
-@@ -42,8 +42,8 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_util.c 201098 2009-12-28 02:58:1
- #ifdef HAVE_STRING_H
- #include <string.h>
- #endif
--#if defined(HAVE_WINCRYPT_H) && !defined(__CYGWIN__)
--#include <wincrypt.h>
-+#if defined(HAVE_BCRYPT_H) && !defined(__CYGWIN__)
-+#include <bcrypt.h>
- #endif
- #ifdef HAVE_ZLIB_H
- #include <zlib.h>
-@@ -233,14 +233,14 @@ __archive_mktemp(const char *tmpdir)
- 		L'm', L'n', L'o', L'p', L'q', L'r', L's', L't',
- 		L'u', L'v', L'w', L'x', L'y', L'z'
- 	};
--	HCRYPTPROV hProv;
-+	BCRYPT_ALG_HANDLE algo_handle;
- 	struct archive_wstring temp_name;
- 	wchar_t *ws;
- 	DWORD attr;
- 	wchar_t *xp, *ep;
- 	int fd;
- 
--	hProv = (HCRYPTPROV)NULL;
-+	algo_handle = NULL;
- 	fd = -1;
- 	ws = NULL;
- 	archive_string_init(&temp_name);
-@@ -302,8 +302,8 @@ __archive_mktemp(const char *tmpdir)
- 	ep = temp_name.s + archive_strlen(&temp_name);
- 	xp = ep - wcslen(suffix);
- 
--	if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,
--		CRYPT_VERIFYCONTEXT)) {
-+	if (!BCRYPT_SUCCESS(BCryptOpenAlgorithmProvider(&algo_handle, BCRYPT_RNG_ALGORITHM,
-+	                                           MS_PRIMITIVE_PROVIDER, 0))) {
- 		la_dosmaperr(GetLastError());
- 		goto exit_tmpfile;
- 	}
-@@ -314,8 +314,8 @@ __archive_mktemp(const char *tmpdir)
- 
- 		/* Generate a random file name through CryptGenRandom(). */
- 		p = xp;
--		if (!CryptGenRandom(hProv, (DWORD)(ep - p)*sizeof(wchar_t),
--		    (BYTE*)p)) {
-+		if (!BCRYPT_SUCCESS(BCryptGenRandom(algo_handle, p,
-+		                                   (DWORD)(ep - p)*sizeof(wchar_t), 0))) {
- 			la_dosmaperr(GetLastError());
- 			goto exit_tmpfile;
- 		}
-@@ -355,8 +355,8 @@ __archive_mktemp(const char *tmpdir)
- 			break;/* success! */
- 	}
- exit_tmpfile:
--	if (hProv != (HCRYPTPROV)NULL)
--		CryptReleaseContext(hProv, 0);
-+	if (algo_handle != (HCRYPTPROV)NULL)
-+		BCryptCloseAlgorithmProvider(algo_handle, 0);
- 	free(ws);
- 	archive_wstring_free(&temp_name);
- 	return (fd);
--- 
-2.26.0.windows.1
-
diff --git a/contrib/src/libarchive/rules.mak b/contrib/src/libarchive/rules.mak
index 837040fa5b..adab9ea9c4 100644
--- a/contrib/src/libarchive/rules.mak
+++ b/contrib/src/libarchive/rules.mak
@@ -31,7 +31,6 @@ ifdef HAVE_ANDROID
 endif
 ifdef HAVE_WINSTORE
 	$(APPLY) $(SRC)/libarchive/no-windows-files.patch
-	$(APPLY) $(SRC)/libarchive/libarchive-win32-bcrypt.patch
 	$(APPLY) $(SRC)/libarchive/winrt.patch
 endif
 	$(APPLY) $(SRC)/libarchive/fix-types.patch



More information about the vlc-commits mailing list