[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 1d5f46b 2/2: Merge branch 'master' of git.sv.gnu.or
From: |
Michael Albinus |
Subject: |
[Emacs-diffs] master 1d5f46b 2/2: Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs |
Date: |
Wed, 20 Jan 2016 10:04:02 +0000 |
branch: master
commit 1d5f46b20e98a2fb9b67cb4708a7508b501e4057
Merge: 282030f 64a568d
Author: Michael Albinus <address@hidden>
Commit: Michael Albinus <address@hidden>
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
---
src/w32.c | 32 ++++++++++++++++++++++++++++++++
src/w32.h | 3 +++
2 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/src/w32.c b/src/w32.c
index 183a4e7..6f1d5fd 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -224,6 +224,8 @@ typedef struct _REPARSE_DATA_BUFFER {
#include <iphlpapi.h> /* should be after winsock2.h */
+#include <wincrypt.h>
+
#include <c-strcase.h>
#include "w32.h"
@@ -2094,6 +2096,34 @@ init_user_info (void)
CloseHandle (token);
}
+static HCRYPTPROV w32_crypto_hprov;
+static int
+w32_init_crypt_random (void)
+{
+ if (!CryptAcquireContext (&w32_crypto_hprov, NULL, NULL, PROV_RSA_FULL,
+ CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+ {
+ DebPrint (("CryptAcquireContext failed with error %x\n",
+ GetLastError ()));
+ w32_crypto_hprov = 0;
+ return -1;
+ }
+ return 0;
+}
+
+int
+w32_init_random (void *buf, ptrdiff_t buflen)
+{
+ if (!w32_crypto_hprov)
+ w32_init_crypt_random ();
+ if (w32_crypto_hprov)
+ {
+ if (CryptGenRandom (w32_crypto_hprov, buflen, (BYTE *)buf))
+ return 0;
+ }
+ return -1;
+}
+
int
random (void)
{
@@ -9417,6 +9447,8 @@ globals_of_w32 (void)
extern void dynlib_reset_last_error (void);
dynlib_reset_last_error ();
#endif
+
+ w32_crypto_hprov = (HCRYPTPROV)0;
}
/* For make-serial-process */
diff --git a/src/w32.h b/src/w32.h
index 097241b..fde3803 100644
--- a/src/w32.h
+++ b/src/w32.h
@@ -223,6 +223,9 @@ extern int w32_memory_info (unsigned long long *, unsigned
long long *,
/* Compare 2 UTF-8 strings in locale-dependent fashion. */
extern int w32_compare_strings (const char *, const char *, char *, int);
+/* Return a cryptographically secure seed for PRNG. */
+extern int w32_init_random (void *, ptrdiff_t);
+
#ifdef HAVE_GNUTLS
#include <gnutls/gnutls.h>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 1d5f46b 2/2: Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs,
Michael Albinus <=