summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorK.Takata <kentkt@csc.jp>2022-12-06 16:17:01 +0000
committerBram Moolenaar <Bram@vim.org>2022-12-06 16:17:01 +0000
commita8cdb4eef83bce8614991f1191f8c8879fda4dc1 (patch)
treee469f8e62f1ac0b40e0d712e1173c1491ced79da
parentaf34543b926a8704c3346d41e57a219baa5ca61c (diff)
downloadvim-git-9.0.1023.tar.gz
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't workv9.0.1023
Problem: MS-Windows: dynamic loading of libsodium doesn't work. Solution: Add "randombytes_random". (Ken Takata, closes #11667)
-rw-r--r--src/crypt.c21
-rw-r--r--src/evalfunc.c4
-rw-r--r--src/proto/crypt.pro2
-rw-r--r--src/version.c2
4 files changed, 24 insertions, 5 deletions
diff --git a/src/crypt.c b/src/crypt.c
index b2b50d463..a2740c98a 100644
--- a/src/crypt.c
+++ b/src/crypt.c
@@ -73,7 +73,7 @@ typedef struct {
char_u *p2, int last);
} cryptmethod_T;
-static int crypt_sodium_init(cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len);
+static int crypt_sodium_init_(cryptstate_T *state, char_u *key, char_u *salt, int salt_len, char_u *seed, int seed_len);
static long crypt_sodium_buffer_decode(cryptstate_T *state, char_u *from, size_t len, char_u **buf_out, int last);
static long crypt_sodium_buffer_encode(cryptstate_T *state, char_u *from, size_t len, char_u **buf_out, int last);
@@ -145,7 +145,7 @@ static cryptmethod_T cryptmethods[CRYPT_M_COUNT] = {
#endif
FALSE,
NULL,
- crypt_sodium_init,
+ crypt_sodium_init_,
NULL, NULL,
crypt_sodium_buffer_encode, crypt_sodium_buffer_decode,
NULL, NULL,
@@ -198,6 +198,7 @@ typedef struct {
dll_crypto_secretstream_xchacha20poly1305_pull
# define crypto_pwhash dll_crypto_pwhash
# define randombytes_buf dll_randombytes_buf
+# define randombytes_random dll_randombytes_random
static int (*dll_sodium_init)(void) = NULL;
static void (*dll_sodium_free)(void *) = NULL;
@@ -231,6 +232,7 @@ static int (*dll_crypto_pwhash)(unsigned char * const out,
unsigned long long opslimit, size_t memlimit, int alg)
= NULL;
static void (*dll_randombytes_buf)(void * const buf, const size_t size);
+static uint32_t (*dll_randombytes_random)(void);
static struct {
const char *name;
@@ -248,6 +250,7 @@ static struct {
{"crypto_secretstream_xchacha20poly1305_pull", (SODIUM_PROC*)&dll_crypto_secretstream_xchacha20poly1305_pull},
{"crypto_pwhash", (SODIUM_PROC*)&dll_crypto_pwhash},
{"randombytes_buf", (SODIUM_PROC*)&dll_randombytes_buf},
+ {"randombytes_random", (SODIUM_PROC*)&dll_randombytes_random},
{NULL, NULL}
};
@@ -855,7 +858,7 @@ crypt_append_msg(
}
static int
-crypt_sodium_init(
+crypt_sodium_init_(
cryptstate_T *state UNUSED,
char_u *key UNUSED,
char_u *salt UNUSED,
@@ -1143,6 +1146,18 @@ crypt_sodium_randombytes_buf(void *const buf, const size_t size)
{
randombytes_buf(buf, size);
}
+
+ int
+crypt_sodium_init(void)
+{
+ return sodium_init();
+}
+
+ uint32_t
+crypt_sodium_randombytes_random(void)
+{
+ return randombytes_random();
+}
# endif
#endif // FEAT_CRYPT
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 428c4cb2b..84df6a62a 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -8166,8 +8166,8 @@ init_srand(UINT32_T *x)
// - reltime() or time()
// - XOR with process ID
#if defined(FEAT_SODIUM)
- if (sodium_init() >= 0)
- *x = randombytes_random();
+ if (crypt_sodium_init() >= 0)
+ *x = crypt_sodium_randombytes_random();
else
#endif
{
diff --git a/src/proto/crypt.pro b/src/proto/crypt.pro
index 791369491..560e30b8d 100644
--- a/src/proto/crypt.pro
+++ b/src/proto/crypt.pro
@@ -26,4 +26,6 @@ char_u *crypt_get_key(int store, int twice);
void crypt_append_msg(buf_T *buf);
int crypt_sodium_munlock(void *const addr, const size_t len);
void crypt_sodium_randombytes_buf(void *const buf, const size_t size);
+int crypt_sodium_init(void);
+uint32_t crypt_sodium_randombytes_random(void);
/* vim: set ft=c : */
diff --git a/src/version.c b/src/version.c
index d4a3b1bf2..5db72d20d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1023,
+/**/
1022,
/**/
1021,