]> granicus.if.org Git - vim/commitdiff
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work v9.0.1023
authorK.Takata <kentkt@csc.jp>
Tue, 6 Dec 2022 16:17:01 +0000 (16:17 +0000)
committerBram Moolenaar <Bram@vim.org>
Tue, 6 Dec 2022 16:17:01 +0000 (16:17 +0000)
Problem:    MS-Windows: dynamic loading of libsodium doesn't work.
Solution:   Add "randombytes_random". (Ken Takata, closes #11667)

src/crypt.c
src/evalfunc.c
src/proto/crypt.pro
src/version.c

index b2b50d46323ced19b09a8c836278687867c7e43d..a2740c98aa308dc32e796cce388954c5caf6bb3d 100644 (file)
@@ -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
index 428c4cb2b2c1fe267b901da603e46837a8e2646e..84df6a62aab365b49107294d9c230c8befbe959e 100644 (file)
@@ -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
        {
index 7913694912bde6036d3b946bc3b1bf071bc4344c..560e30b8dca72653838efdcec19b5cd1e0846232 100644 (file)
@@ -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 : */
index d4a3b1bf2078f6f48733de4a6146b9396a468dbc..5db72d20d5c315de65596ef442133d45eb4af74d 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1023,
 /**/
     1022,
 /**/