# HG changeset patch # User Bram Moolenaar # Date 1670344204 -3600 # Node ID 540e85ac14c92021373692d5df19367d76239564 # Parent c6c4336ac00d2a92dce8bcb609efa9e4e09e782b patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work Commit: https://github.com/vim/vim/commit/a8cdb4eef83bce8614991f1191f8c8879fda4dc1 Author: K.Takata Date: Tue Dec 6 16:17:01 2022 +0000 patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work Problem: MS-Windows: dynamic loading of libsodium doesn't work. Solution: Add "randombytes_random". (Ken Takata, closes https://github.com/vim/vim/issues/11667) diff --git a/src/crypt.c b/src/crypt.c --- 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_ #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 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 { 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 --- 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 --- a/src/proto/crypt.pro +++ b/src/proto/crypt.pro @@ -26,4 +26,6 @@ char_u *crypt_get_key(int store, int twi 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 --- 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,