Mercurial > vim
annotate src/crypt.c @ 32403:1b0ade08ec91 v9.0.1533
patch 9.0.1533: test for 'smoothscroll' is ineffective
Commit: https://github.com/vim/vim/commit/6f37e530d3e2d58ff055723047bf91d91af2632c
Author: Luuk van Baal <luukvbaal@gmail.com>
Date: Tue May 9 21:23:54 2023 +0100
patch 9.0.1533: test for 'smoothscroll' is ineffective
Problem: Test for 'smoothscroll' is ineffective.
Solution: Change the order of testing "zb" and "zt". (Luuk van Baal,
closes #12366)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 09 May 2023 22:30:05 +0200 |
parents | 6761c71f4b25 |
children | a1e1527d1cb8 |
rev | line source |
---|---|
10042
4aead6a9b7a9
commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents:
7817
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
6122 | 2 * |
3 * VIM - Vi IMproved by Bram Moolenaar | |
4 * | |
5 * Do ":help uganda" in Vim to read copying and usage conditions. | |
6 * Do ":help credits" in Vim to see a list of people who contributed. | |
7 * See README.txt for an overview of the Vim source code. | |
8 */ | |
9 | |
10 /* | |
11 * crypt.c: Generic encryption support. | |
12 */ | |
13 #include "vim.h" | |
14 | |
15 #if defined(FEAT_CRYPT) || defined(PROTO) | |
16 /* | |
17 * Optional encryption support. | |
18 * Mohsin Ahmed, mosh@sasi.com, 1998-09-24 | |
19 * Based on zip/crypt sources. | |
20 * Refactored by David Leadbeater, 2014. | |
21 * | |
22 * NOTE FOR USA: Since 2000 exporting this code from the USA is allowed to | |
23 * most countries. There are a few exceptions, but that still should not be a | |
24 * problem since this code was originally created in Europe and India. | |
25 * | |
26 * Blowfish addition originally made by Mohsin Ahmed, | |
27 * http://www.cs.albany.edu/~mosh 2010-03-14 | |
28 * Based on blowfish by Bruce Schneier (http://www.schneier.com/blowfish.html) | |
29 * and sha256 by Christophe Devine. | |
30 */ | |
31 | |
32 typedef struct { | |
32313
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
33 char *name; // encryption name as used in 'cryptmethod' |
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
34 char *magic; // magic bytes stored in file header |
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
35 int salt_len; // length of salt, or 0 when not using salt |
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
36 int seed_len; // length of seed, or 0 when not using seed |
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
37 int add_len; // additional length in the header needed for storing |
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
38 // custom data |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
39 #ifdef CRYPT_NOT_INPLACE |
32313
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
40 int works_inplace; // encryption/decryption can be done in-place |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
41 #endif |
32313
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
42 int whole_undofile; // whole undo file is encrypted |
6122 | 43 |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
44 // Optional function pointer for a self-test. |
32313
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
45 int (*self_test_fn)(void); |
6122 | 46 |
16378
3d6b282e2d6e
patch 8.1.1194: typos and small problems in source files
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
47 // Function pointer for initializing encryption/decryption. |
32313
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
48 int (* init_fn)(cryptstate_T *state, char_u *key, crypt_arg_T *arg); |
6122 | 49 |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
50 // Function pointers for encoding/decoding from one buffer into another. |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
51 // Optional, however, these or the _buffer ones should be configured. |
6122 | 52 void (*encode_fn)(cryptstate_T *state, char_u *from, size_t len, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
53 char_u *to, int last); |
6122 | 54 void (*decode_fn)(cryptstate_T *state, char_u *from, size_t len, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
55 char_u *to, int last); |
6122 | 56 |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
57 // Function pointers for encoding and decoding, can buffer data if needed. |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
58 // Optional (however, these or the above should be configured). |
6122 | 59 long (*encode_buffer_fn)(cryptstate_T *state, char_u *from, size_t len, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
60 char_u **newptr, int last); |
6122 | 61 long (*decode_buffer_fn)(cryptstate_T *state, char_u *from, size_t len, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
62 char_u **newptr, int last); |
6122 | 63 |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
64 // Function pointers for in-place encoding and decoding, used for |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
65 // crypt_*_inplace(). "from" and "to" arguments will be equal. |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
66 // These may be the same as decode_fn and encode_fn above, however an |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
67 // algorithm may implement them in a way that is not interchangeable with |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
68 // the crypt_(en|de)code() interface (for example because it wishes to add |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
69 // padding to files). |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
70 // This method is used for swap and undo files which have a rigid format. |
6122 | 71 void (*encode_inplace_fn)(cryptstate_T *state, char_u *p1, size_t len, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
72 char_u *p2, int last); |
6122 | 73 void (*decode_inplace_fn)(cryptstate_T *state, char_u *p1, size_t len, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
74 char_u *p2, int last); |
6122 | 75 } cryptmethod_T; |
76 | |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
77 static int crypt_sodium_init_(cryptstate_T *state, char_u *key, crypt_arg_T *arg); |
29320
a74398c432a4
patch 9.0.0003: functions are global while they could be local
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
78 static long crypt_sodium_buffer_decode(cryptstate_T *state, char_u *from, size_t len, char_u **buf_out, int last); |
a74398c432a4
patch 9.0.0003: functions are global while they could be local
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
79 static long crypt_sodium_buffer_encode(cryptstate_T *state, char_u *from, size_t len, char_u **buf_out, int last); |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
80 #if defined(FEAT_EVAL) && defined(FEAT_SODIUM) |
32313
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
81 static void crypt_sodium_report_hash_params(unsigned long long opslimit, unsigned long long ops_def, size_t memlimit, size_t mem_def, int alg, int alg_def); |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
82 #endif |
29320
a74398c432a4
patch 9.0.0003: functions are global while they could be local
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
83 |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
84 // index is method_nr of cryptstate_T, CRYPT_M_* |
6122 | 85 static cryptmethod_T cryptmethods[CRYPT_M_COUNT] = { |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
86 // PK_Zip; very weak |
6122 | 87 { |
88 "zip", | |
89 "VimCrypt~01!", | |
90 0, | |
91 0, | |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
92 0, |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
93 #ifdef CRYPT_NOT_INPLACE |
6122 | 94 TRUE, |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
95 #endif |
6122 | 96 FALSE, |
97 NULL, | |
98 crypt_zip_init, | |
99 crypt_zip_encode, crypt_zip_decode, | |
100 NULL, NULL, | |
101 crypt_zip_encode, crypt_zip_decode, | |
102 }, | |
103 | |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
104 // Blowfish/CFB + SHA-256 custom key derivation; implementation issues. |
6122 | 105 { |
106 "blowfish", | |
107 "VimCrypt~02!", | |
108 8, | |
109 8, | |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
110 0, |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
111 #ifdef CRYPT_NOT_INPLACE |
6122 | 112 TRUE, |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
113 #endif |
6122 | 114 FALSE, |
115 blowfish_self_test, | |
116 crypt_blowfish_init, | |
117 crypt_blowfish_encode, crypt_blowfish_decode, | |
118 NULL, NULL, | |
119 crypt_blowfish_encode, crypt_blowfish_decode, | |
120 }, | |
121 | |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
122 // Blowfish/CFB + SHA-256 custom key derivation; fixed. |
6122 | 123 { |
124 "blowfish2", | |
125 "VimCrypt~03!", | |
126 8, | |
127 8, | |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
128 0, |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
129 #ifdef CRYPT_NOT_INPLACE |
6122 | 130 TRUE, |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
131 #endif |
6122 | 132 TRUE, |
133 blowfish_self_test, | |
134 crypt_blowfish_init, | |
135 crypt_blowfish_encode, crypt_blowfish_decode, | |
136 NULL, NULL, | |
137 crypt_blowfish_encode, crypt_blowfish_decode, | |
138 }, | |
13244
ac42c4b11dbc
patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
139 |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
140 // XChaCha20 using libsodium; implementation issues |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
141 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
142 "xchacha20", |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
143 "VimCrypt~04!", |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
144 #ifdef FEAT_SODIUM |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
145 crypto_pwhash_argon2id_SALTBYTES, // 16 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
146 #else |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
147 16, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
148 #endif |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
149 8, |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
150 0, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
151 #ifdef CRYPT_NOT_INPLACE |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
152 FALSE, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
153 #endif |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
154 FALSE, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
155 NULL, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
156 crypt_sodium_init_, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
157 NULL, NULL, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
158 crypt_sodium_buffer_encode, crypt_sodium_buffer_decode, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
159 NULL, NULL, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
160 }, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
161 // XChaCha20 using libsodium; stores parameters in header |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
162 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
163 "xchacha20v2", |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
164 "VimCrypt~05!", |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
165 #ifdef FEAT_SODIUM |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
166 crypto_pwhash_argon2id_SALTBYTES, // 16 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
167 #else |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
168 16, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
169 #endif |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
170 8, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
171 // sizeof(crypto_pwhash_OPSLIMIT_INTERACTIVE + crypto_pwhash_MEMLIMIT_INTERACTIVE + crypto_pwhash_ALG_DEFAULT) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
172 20, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
173 #ifdef CRYPT_NOT_INPLACE |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
174 FALSE, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
175 #endif |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
176 FALSE, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
177 NULL, |
31379
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
178 crypt_sodium_init_, |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
179 NULL, NULL, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
180 crypt_sodium_buffer_encode, crypt_sodium_buffer_decode, |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
181 NULL, NULL, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
182 }, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
183 |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
184 // NOTE: when adding a new method, use some random bytes for the magic key, |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
185 // to avoid that a text file is recognized as encrypted. |
6122 | 186 }; |
187 | |
32009
4545f58c8490
patch 9.0.1336: functions without arguments are not always declared properly
Bram Moolenaar <Bram@vim.org>
parents:
31379
diff
changeset
|
188 #if defined(FEAT_SODIUM) || defined(PROTO) |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
189 typedef struct { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
190 size_t count; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
191 unsigned char key[crypto_box_SEEDBYTES]; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
192 // 32, same as crypto_secretstream_xchacha20poly1305_KEYBYTES |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
193 crypto_secretstream_xchacha20poly1305_state |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
194 state; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
195 } sodium_state_T; |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
196 |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
197 |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
198 # ifdef DYNAMIC_SODIUM |
27657
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
199 # ifdef MSWIN |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
200 # define SODIUM_PROC FARPROC |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
201 # define load_dll vimLoadLib |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
202 # define symbol_from_dll GetProcAddress |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
203 # define close_dll FreeLibrary |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
204 # define load_dll_error GetWin32Error |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
205 # else |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
206 # error Dynamic loading of libsodium is not supported for now. |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
207 //# define HINSTANCE void* |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
208 //# define SODIUM_PROC void* |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
209 //# define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL) |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
210 //# define symbol_from_dll dlsym |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
211 //# define close_dll dlclose |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
212 //# define load_dll_error dlerror |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
213 # endif |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
214 |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
215 # define sodium_init load_sodium |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
216 # define sodium_free dll_sodium_free |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
217 # define sodium_malloc dll_sodium_malloc |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
218 # define sodium_memzero dll_sodium_memzero |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
219 # define sodium_mlock dll_sodium_mlock |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
220 # define sodium_munlock dll_sodium_munlock |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
221 # define crypto_secretstream_xchacha20poly1305_init_push \ |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
222 dll_crypto_secretstream_xchacha20poly1305_init_push |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
223 # define crypto_secretstream_xchacha20poly1305_push \ |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
224 dll_crypto_secretstream_xchacha20poly1305_push |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
225 # define crypto_secretstream_xchacha20poly1305_init_pull \ |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
226 dll_crypto_secretstream_xchacha20poly1305_init_pull |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
227 # define crypto_secretstream_xchacha20poly1305_pull \ |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
228 dll_crypto_secretstream_xchacha20poly1305_pull |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
229 # define crypto_pwhash dll_crypto_pwhash |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
230 # define randombytes_buf dll_randombytes_buf |
31379
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
231 # define randombytes_random dll_randombytes_random |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
232 |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
233 static int (*dll_sodium_init)(void) = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
234 static void (*dll_sodium_free)(void *) = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
235 static void *(*dll_sodium_malloc)(const size_t) = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
236 static void (*dll_sodium_memzero)(void * const, const size_t) = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
237 static int (*dll_sodium_mlock)(void * const, const size_t) = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
238 static int (*dll_sodium_munlock)(void * const, const size_t) = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
239 static int (*dll_crypto_secretstream_xchacha20poly1305_init_push) |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
240 (crypto_secretstream_xchacha20poly1305_state *state, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
241 unsigned char [], |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
242 const unsigned char []) = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
243 static int (*dll_crypto_secretstream_xchacha20poly1305_push) |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
244 (crypto_secretstream_xchacha20poly1305_state *state, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
245 unsigned char *c, unsigned long long *clen_p, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
246 const unsigned char *m, unsigned long long mlen, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
247 const unsigned char *ad, unsigned long long adlen, unsigned char tag) |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
248 = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
249 static int (*dll_crypto_secretstream_xchacha20poly1305_init_pull) |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
250 (crypto_secretstream_xchacha20poly1305_state *state, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
251 const unsigned char [], |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
252 const unsigned char []) = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
253 static int (*dll_crypto_secretstream_xchacha20poly1305_pull) |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
254 (crypto_secretstream_xchacha20poly1305_state *state, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
255 unsigned char *m, unsigned long long *mlen_p, unsigned char *tag_p, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
256 const unsigned char *c, unsigned long long clen, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
257 const unsigned char *ad, unsigned long long adlen) = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
258 static int (*dll_crypto_pwhash)(unsigned char * const out, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
259 unsigned long long outlen, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
260 const char * const passwd, unsigned long long passwdlen, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
261 const unsigned char * const salt, |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
262 unsigned long long opslimit, size_t memlimit, int alg) |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
263 = NULL; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
264 static void (*dll_randombytes_buf)(void * const buf, const size_t size); |
31379
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
265 static uint32_t (*dll_randombytes_random)(void); |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
266 |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
267 static struct { |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
268 const char *name; |
27657
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
269 SODIUM_PROC *ptr; |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
270 } sodium_funcname_table[] = { |
27657
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
271 {"sodium_init", (SODIUM_PROC*)&dll_sodium_init}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
272 {"sodium_free", (SODIUM_PROC*)&dll_sodium_free}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
273 {"sodium_malloc", (SODIUM_PROC*)&dll_sodium_malloc}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
274 {"sodium_memzero", (SODIUM_PROC*)&dll_sodium_memzero}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
275 {"sodium_mlock", (SODIUM_PROC*)&dll_sodium_mlock}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
276 {"sodium_munlock", (SODIUM_PROC*)&dll_sodium_munlock}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
277 {"crypto_secretstream_xchacha20poly1305_init_push", (SODIUM_PROC*)&dll_crypto_secretstream_xchacha20poly1305_init_push}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
278 {"crypto_secretstream_xchacha20poly1305_push", (SODIUM_PROC*)&dll_crypto_secretstream_xchacha20poly1305_push}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
279 {"crypto_secretstream_xchacha20poly1305_init_pull", (SODIUM_PROC*)&dll_crypto_secretstream_xchacha20poly1305_init_pull}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
280 {"crypto_secretstream_xchacha20poly1305_pull", (SODIUM_PROC*)&dll_crypto_secretstream_xchacha20poly1305_pull}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
281 {"crypto_pwhash", (SODIUM_PROC*)&dll_crypto_pwhash}, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
282 {"randombytes_buf", (SODIUM_PROC*)&dll_randombytes_buf}, |
31379
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
283 {"randombytes_random", (SODIUM_PROC*)&dll_randombytes_random}, |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
284 {NULL, NULL} |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
285 }; |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
286 |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
287 static int |
27657
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
288 sodium_runtime_link_init(int verbose) |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
289 { |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
290 static HINSTANCE hsodium = NULL; |
27998
ef7d9789919d
patch 8.2.4524: MS-Windows: cannot build with some sodium libraries
Bram Moolenaar <Bram@vim.org>
parents:
27657
diff
changeset
|
291 const char *libname = DYNAMIC_SODIUM_DLL; |
27657
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
292 int i; |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
293 |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
294 if (hsodium != NULL) |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
295 return OK; |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
296 |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
297 hsodium = load_dll(libname); |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
298 if (hsodium == NULL) |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
299 { |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
300 if (verbose) |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
301 semsg(_(e_could_not_load_library_str_str), libname, load_dll_error()); |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
302 return FAIL; |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
303 } |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
304 |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
305 for (i = 0; sodium_funcname_table[i].ptr; ++i) |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
306 { |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
307 if ((*sodium_funcname_table[i].ptr = symbol_from_dll(hsodium, |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
308 sodium_funcname_table[i].name)) == NULL) |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
309 { |
27998
ef7d9789919d
patch 8.2.4524: MS-Windows: cannot build with some sodium libraries
Bram Moolenaar <Bram@vim.org>
parents:
27657
diff
changeset
|
310 close_dll(hsodium); |
27657
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
311 hsodium = NULL; |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
312 if (verbose) |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
313 semsg(_(e_could_not_load_library_function_str), sodium_funcname_table[i].name); |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
314 return FAIL; |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
315 } |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
316 } |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
317 return OK; |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
318 } |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
319 |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
320 static int |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
321 load_sodium(void) |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
322 { |
27657
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
323 if (sodium_runtime_link_init(TRUE) == FAIL) |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
324 return -1; |
27657
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
325 return dll_sodium_init(); |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
326 } |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
327 # endif |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
328 |
27657
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
329 # if defined(DYNAMIC_SODIUM) || defined(PROTO) |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
330 int |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
331 sodium_enabled(int verbose) |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
332 { |
a077948be0f4
patch 8.2.4354: dynamic loading of libsodium not handled properly
Bram Moolenaar <Bram@vim.org>
parents:
27231
diff
changeset
|
333 return sodium_runtime_link_init(verbose) == OK; |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
334 } |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
335 # endif |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
336 #endif |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
337 |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
338 #define CRYPT_MAGIC_LEN 12 // cannot change |
6122 | 339 static char crypt_magic_head[] = "VimCrypt~"; |
340 | |
341 /* | |
342 * Return int value for crypt method name. | |
343 * 0 for "zip", the old method. Also for any non-valid value. | |
344 * 1 for "blowfish". | |
345 * 2 for "blowfish2". | |
346 */ | |
347 int | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
348 crypt_method_nr_from_name(char_u *name) |
6122 | 349 { |
350 int i; | |
351 | |
352 for (i = 0; i < CRYPT_M_COUNT; ++i) | |
353 if (STRCMP(name, cryptmethods[i].name) == 0) | |
354 return i; | |
355 return 0; | |
356 } | |
357 | |
358 /* | |
359 * Get the crypt method used for a file from "ptr[len]", the magic text at the | |
360 * start of the file. | |
361 * Returns -1 when no encryption used. | |
362 */ | |
363 int | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
364 crypt_method_nr_from_magic(char *ptr, int len) |
6122 | 365 { |
366 int i; | |
367 | |
368 if (len < CRYPT_MAGIC_LEN) | |
369 return -1; | |
370 | |
371 for (i = 0; i < CRYPT_M_COUNT; i++) | |
372 if (memcmp(ptr, cryptmethods[i].magic, CRYPT_MAGIC_LEN) == 0) | |
373 return i; | |
374 | |
375 i = (int)STRLEN(crypt_magic_head); | |
376 if (len >= i && memcmp(ptr, crypt_magic_head, i) == 0) | |
26962
85866e069c24
patch 8.2.4010: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
25417
diff
changeset
|
377 emsg(_(e_file_is_encrypted_with_unknown_method)); |
6122 | 378 |
379 return -1; | |
380 } | |
381 | |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
382 #ifdef CRYPT_NOT_INPLACE |
6122 | 383 /* |
384 * Return TRUE if the crypt method for "method_nr" can be done in-place. | |
385 */ | |
386 int | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
387 crypt_works_inplace(cryptstate_T *state) |
6122 | 388 { |
389 return cryptmethods[state->method_nr].works_inplace; | |
390 } | |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
391 #endif |
6122 | 392 |
393 /* | |
394 * Get the crypt method for buffer "buf" as a number. | |
395 */ | |
396 int | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
397 crypt_get_method_nr(buf_T *buf) |
6122 | 398 { |
399 return crypt_method_nr_from_name(*buf->b_p_cm == NUL ? p_cm : buf->b_p_cm); | |
400 } | |
401 | |
402 /* | |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
403 * Returns True for Sodium Encryption. |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
404 */ |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
405 int |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
406 crypt_method_is_sodium(int method) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
407 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
408 return method == CRYPT_M_SOD || method == CRYPT_M_SOD2; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
409 } |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
410 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
411 /* |
6122 | 412 * Return TRUE when the buffer uses an encryption method that encrypts the |
413 * whole undo file, not only the text. | |
414 */ | |
415 int | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
416 crypt_whole_undofile(int method_nr) |
6122 | 417 { |
418 return cryptmethods[method_nr].whole_undofile; | |
419 } | |
420 | |
421 /* | |
18498
9e6d5a4abb1c
patch 8.1.2243: typos in comments
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
422 * Get crypt method specific length of the file header in bytes. |
6122 | 423 */ |
424 int | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
425 crypt_get_header_len(int method_nr) |
6122 | 426 { |
427 return CRYPT_MAGIC_LEN | |
428 + cryptmethods[method_nr].salt_len | |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
429 + cryptmethods[method_nr].seed_len |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
430 + cryptmethods[method_nr].add_len; |
6122 | 431 } |
432 | |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
433 |
27018
268f6a3511df
patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
434 #if defined(FEAT_SODIUM) || defined(PROTO) |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
435 /* |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
436 * Get maximum crypt method specific length of the file header in bytes. |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
437 */ |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
438 int |
32009
4545f58c8490
patch 9.0.1336: functions without arguments are not always declared properly
Bram Moolenaar <Bram@vim.org>
parents:
31379
diff
changeset
|
439 crypt_get_max_header_len(void) |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
440 { |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
441 int i; |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
442 int max = 0; |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
443 int temp = 0; |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
444 |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
445 for (i = 0; i < CRYPT_M_COUNT; ++i) |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
446 { |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
447 temp = crypt_get_header_len(i); |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
448 if (temp > max) |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
449 max = temp; |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
450 } |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
451 return max; |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
452 } |
27018
268f6a3511df
patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents:
26962
diff
changeset
|
453 #endif |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
454 |
6122 | 455 /* |
456 * Set the crypt method for buffer "buf" to "method_nr" using the int value as | |
457 * returned by crypt_method_nr_from_name(). | |
458 */ | |
459 void | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
460 crypt_set_cm_option(buf_T *buf, int method_nr) |
6122 | 461 { |
462 free_string_option(buf->b_p_cm); | |
463 buf->b_p_cm = vim_strsave((char_u *)cryptmethods[method_nr].name); | |
464 } | |
465 | |
466 /* | |
467 * If the crypt method for the current buffer has a self-test, run it and | |
468 * return OK/FAIL. | |
469 */ | |
470 int | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
471 crypt_self_test(void) |
6122 | 472 { |
473 int method_nr = crypt_get_method_nr(curbuf); | |
474 | |
475 if (cryptmethods[method_nr].self_test_fn == NULL) | |
476 return OK; | |
477 return cryptmethods[method_nr].self_test_fn(); | |
478 } | |
479 | |
480 /* | |
481 * Allocate a crypt state and initialize it. | |
16429
a1229400434a
patch 8.1.1219: not checking for NULL return from alloc()
Bram Moolenaar <Bram@vim.org>
parents:
16378
diff
changeset
|
482 * Return NULL for failure. |
6122 | 483 */ |
484 cryptstate_T * | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
485 crypt_create( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
486 int method_nr, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
487 char_u *key, |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
488 crypt_arg_T *crypt_arg) |
6122 | 489 { |
16825
ce04ebdf26b8
patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents:
16782
diff
changeset
|
490 cryptstate_T *state = ALLOC_ONE(cryptstate_T); |
6122 | 491 |
16429
a1229400434a
patch 8.1.1219: not checking for NULL return from alloc()
Bram Moolenaar <Bram@vim.org>
parents:
16378
diff
changeset
|
492 if (state == NULL) |
a1229400434a
patch 8.1.1219: not checking for NULL return from alloc()
Bram Moolenaar <Bram@vim.org>
parents:
16378
diff
changeset
|
493 return state; |
a1229400434a
patch 8.1.1219: not checking for NULL return from alloc()
Bram Moolenaar <Bram@vim.org>
parents:
16378
diff
changeset
|
494 |
6122 | 495 state->method_nr = method_nr; |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
496 if (cryptmethods[method_nr].init_fn(state, key, crypt_arg) == FAIL) |
16429
a1229400434a
patch 8.1.1219: not checking for NULL return from alloc()
Bram Moolenaar <Bram@vim.org>
parents:
16378
diff
changeset
|
497 { |
28809
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28457
diff
changeset
|
498 vim_free(state); |
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28457
diff
changeset
|
499 return NULL; |
16429
a1229400434a
patch 8.1.1219: not checking for NULL return from alloc()
Bram Moolenaar <Bram@vim.org>
parents:
16378
diff
changeset
|
500 } |
6122 | 501 return state; |
502 } | |
503 | |
504 /* | |
505 * Allocate a crypt state from a file header and initialize it. | |
506 * Assumes that header contains at least the number of bytes that | |
507 * crypt_get_header_len() returns for "method_nr". | |
508 */ | |
509 cryptstate_T * | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
510 crypt_create_from_header( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
511 int method_nr, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
512 char_u *key, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
513 char_u *header) |
6122 | 514 { |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
515 crypt_arg_T arg; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
516 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
517 CLEAR_FIELD(arg); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
518 arg.cat_init_from_file = TRUE; |
6122 | 519 |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
520 arg.cat_salt_len = cryptmethods[method_nr].salt_len; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
521 arg.cat_seed_len = cryptmethods[method_nr].seed_len; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
522 arg.cat_add_len = cryptmethods[method_nr].add_len; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
523 if (arg.cat_salt_len > 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
524 arg.cat_salt = header + CRYPT_MAGIC_LEN; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
525 if (arg.cat_seed_len > 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
526 arg.cat_seed = header + CRYPT_MAGIC_LEN + arg.cat_salt_len; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
527 if (arg.cat_add_len > 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
528 arg.cat_add = header + CRYPT_MAGIC_LEN + arg.cat_salt_len + arg.cat_seed_len; |
6122 | 529 |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
530 return crypt_create(method_nr, key, &arg); |
6122 | 531 } |
532 | |
533 /* | |
534 * Read the crypt method specific header data from "fp". | |
535 * Return an allocated cryptstate_T or NULL on error. | |
536 */ | |
537 cryptstate_T * | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
538 crypt_create_from_file(FILE *fp, char_u *key) |
6122 | 539 { |
540 int method_nr; | |
541 int header_len; | |
542 char magic_buffer[CRYPT_MAGIC_LEN]; | |
543 char_u *buffer; | |
544 cryptstate_T *state; | |
545 | |
546 if (fread(magic_buffer, CRYPT_MAGIC_LEN, 1, fp) != 1) | |
547 return NULL; | |
548 method_nr = crypt_method_nr_from_magic(magic_buffer, CRYPT_MAGIC_LEN); | |
549 if (method_nr < 0) | |
550 return NULL; | |
551 | |
552 header_len = crypt_get_header_len(method_nr); | |
553 if ((buffer = alloc(header_len)) == NULL) | |
554 return NULL; | |
555 mch_memmove(buffer, magic_buffer, CRYPT_MAGIC_LEN); | |
556 if (header_len > CRYPT_MAGIC_LEN | |
557 && fread(buffer + CRYPT_MAGIC_LEN, | |
558 header_len - CRYPT_MAGIC_LEN, 1, fp) != 1) | |
559 { | |
560 vim_free(buffer); | |
561 return NULL; | |
562 } | |
563 | |
564 state = crypt_create_from_header(method_nr, key, buffer); | |
565 vim_free(buffer); | |
566 return state; | |
567 } | |
568 | |
569 /* | |
570 * Allocate a cryptstate_T for writing and initialize it with "key". | |
571 * Allocates and fills in the header and stores it in "header", setting | |
572 * "header_len". The header may include salt and seed, depending on | |
573 * cryptmethod. Caller must free header. | |
574 * Returns the state or NULL on failure. | |
575 */ | |
576 cryptstate_T * | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
577 crypt_create_for_writing( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
578 int method_nr, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
579 char_u *key, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
580 char_u **header, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
581 int *header_len) |
6122 | 582 { |
583 int len = crypt_get_header_len(method_nr); | |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
584 crypt_arg_T arg; |
6122 | 585 cryptstate_T *state; |
586 | |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
587 CLEAR_FIELD(arg); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
588 arg.cat_salt_len = cryptmethods[method_nr].salt_len; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
589 arg.cat_seed_len = cryptmethods[method_nr].seed_len; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
590 arg.cat_add_len = cryptmethods[method_nr].add_len; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
591 arg.cat_init_from_file = FALSE; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
592 |
6122 | 593 *header_len = len; |
594 *header = alloc(len); | |
595 if (*header == NULL) | |
596 return NULL; | |
597 | |
598 mch_memmove(*header, cryptmethods[method_nr].magic, CRYPT_MAGIC_LEN); | |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
599 if (arg.cat_salt_len > 0 || arg.cat_seed_len > 0 || arg.cat_add_len > 0) |
6122 | 600 { |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
601 if (arg.cat_salt_len > 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
602 arg.cat_salt = *header + CRYPT_MAGIC_LEN; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
603 if (arg.cat_seed_len > 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
604 arg.cat_seed = *header + CRYPT_MAGIC_LEN + arg.cat_salt_len; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
605 if (arg.cat_add_len > 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
606 arg.cat_add = *header + CRYPT_MAGIC_LEN + arg.cat_salt_len + arg.cat_seed_len; |
6122 | 607 |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
608 // TODO: Should this be crypt method specific? (Probably not worth |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
609 // it). sha2_seed is pretty bad for large amounts of entropy, so make |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
610 // that into something which is suitable for anything. |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
611 #ifdef FEAT_SODIUM |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
612 if (sodium_init() >= 0) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
613 { |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
614 if (arg.cat_salt_len > 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
615 randombytes_buf(arg.cat_salt, arg.cat_salt_len); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
616 if (arg.cat_seed_len > 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
617 randombytes_buf(arg.cat_seed, arg.cat_seed_len); |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
618 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
619 else |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
620 #endif |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
621 sha2_seed(arg.cat_salt, arg.cat_salt_len, arg.cat_seed, arg.cat_seed_len); |
6122 | 622 } |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
623 state = crypt_create(method_nr, key, &arg); |
6122 | 624 if (state == NULL) |
13244
ac42c4b11dbc
patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
625 VIM_CLEAR(*header); |
6122 | 626 return state; |
627 } | |
628 | |
629 /* | |
630 * Free the crypt state. | |
631 */ | |
632 void | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
633 crypt_free_state(cryptstate_T *state) |
6122 | 634 { |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
635 #ifdef FEAT_SODIUM |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
636 if (crypt_method_is_sodium(state->method_nr)) |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
637 { |
25417
1919361a53da
patch 8.2.3245: the crypt key may appear in a swap partition
Bram Moolenaar <Bram@vim.org>
parents:
25362
diff
changeset
|
638 sodium_munlock(((sodium_state_T *)state->method_state)->key, |
1919361a53da
patch 8.2.3245: the crypt key may appear in a swap partition
Bram Moolenaar <Bram@vim.org>
parents:
25362
diff
changeset
|
639 crypto_box_SEEDBYTES); |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
640 sodium_memzero(state->method_state, sizeof(sodium_state_T)); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
641 sodium_free(state->method_state); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
642 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
643 else |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
644 #endif |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
645 vim_free(state->method_state); |
6122 | 646 vim_free(state); |
647 } | |
648 | |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
649 #ifdef CRYPT_NOT_INPLACE |
6122 | 650 /* |
651 * Encode "from[len]" and store the result in a newly allocated buffer, which | |
652 * is stored in "newptr". | |
653 * Return number of bytes in "newptr", 0 for need more or -1 on error. | |
654 */ | |
655 long | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
656 crypt_encode_alloc( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
657 cryptstate_T *state, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
658 char_u *from, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
659 size_t len, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
660 char_u **newptr, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
661 int last) |
6122 | 662 { |
663 cryptmethod_T *method = &cryptmethods[state->method_nr]; | |
664 | |
665 if (method->encode_buffer_fn != NULL) | |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
666 // Has buffer function, pass through. |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
667 return method->encode_buffer_fn(state, from, len, newptr, last); |
6122 | 668 if (len == 0) |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
669 // Not buffering, just return EOF. |
6132 | 670 return (long)len; |
6122 | 671 |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
672 *newptr = alloc(len + 50); |
6122 | 673 if (*newptr == NULL) |
674 return -1; | |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
675 method->encode_fn(state, from, len, *newptr, last); |
6132 | 676 return (long)len; |
6122 | 677 } |
678 | |
679 /* | |
680 * Decrypt "ptr[len]" and store the result in a newly allocated buffer, which | |
681 * is stored in "newptr". | |
682 * Return number of bytes in "newptr", 0 for need more or -1 on error. | |
683 */ | |
684 long | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
685 crypt_decode_alloc( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
686 cryptstate_T *state, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
687 char_u *ptr, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
688 long len, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
689 char_u **newptr, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
690 int last) |
6122 | 691 { |
692 cryptmethod_T *method = &cryptmethods[state->method_nr]; | |
693 | |
694 if (method->decode_buffer_fn != NULL) | |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
695 // Has buffer function, pass through. |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
696 return method->decode_buffer_fn(state, ptr, len, newptr, last); |
6122 | 697 |
698 if (len == 0) | |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
699 // Not buffering, just return EOF. |
6122 | 700 return len; |
701 | |
702 *newptr = alloc(len); | |
703 if (*newptr == NULL) | |
704 return -1; | |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
705 method->decode_fn(state, ptr, len, *newptr, last); |
6122 | 706 return len; |
707 } | |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
708 #endif |
6122 | 709 |
710 /* | |
711 * Encrypting "from[len]" into "to[len]". | |
712 */ | |
713 void | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
714 crypt_encode( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
715 cryptstate_T *state, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
716 char_u *from, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
717 size_t len, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
718 char_u *to, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
719 int last) |
6122 | 720 { |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
721 cryptmethods[state->method_nr].encode_fn(state, from, len, to, last); |
6122 | 722 } |
723 | |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
724 #if 0 // unused |
6122 | 725 /* |
726 * decrypting "from[len]" into "to[len]". | |
727 */ | |
728 void | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
729 crypt_decode( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
730 cryptstate_T *state, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
731 char_u *from, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
732 size_t len, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
733 char_u *to, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
734 int last) |
6122 | 735 { |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
736 cryptmethods[state->method_nr].decode_fn(state, from, len, to, last); |
6122 | 737 } |
15531
959cf4c63b18
patch 8.1.0773: not all crypt code is tested
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
738 #endif |
6122 | 739 |
740 /* | |
741 * Simple inplace encryption, modifies "buf[len]" in place. | |
742 */ | |
743 void | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
744 crypt_encode_inplace( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
745 cryptstate_T *state, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
746 char_u *buf, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
747 size_t len, |
28809
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28457
diff
changeset
|
748 int last) |
6122 | 749 { |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
750 cryptmethods[state->method_nr].encode_inplace_fn(state, buf, len, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
751 buf, last); |
6122 | 752 } |
753 | |
754 /* | |
755 * Simple inplace decryption, modifies "buf[len]" in place. | |
756 */ | |
757 void | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
758 crypt_decode_inplace( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
759 cryptstate_T *state, |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
760 char_u *buf, |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
761 size_t len, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
762 int last) |
6122 | 763 { |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
764 cryptmethods[state->method_nr].decode_inplace_fn(state, buf, len, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
765 buf, last); |
6122 | 766 } |
767 | |
768 /* | |
769 * Free an allocated crypt key. Clear the text to make sure it doesn't stay | |
770 * in memory anywhere. | |
771 */ | |
772 void | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
773 crypt_free_key(char_u *key) |
6122 | 774 { |
775 char_u *p; | |
776 | |
777 if (key != NULL) | |
778 { | |
779 for (p = key; *p != NUL; ++p) | |
780 *p = 0; | |
781 vim_free(key); | |
782 } | |
783 } | |
784 | |
785 /* | |
6353 | 786 * Check the crypt method and give a warning if it's outdated. |
787 */ | |
788 void | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
789 crypt_check_method(int method) |
6353 | 790 { |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
791 if (method < CRYPT_M_BF2 || method == CRYPT_M_SOD) |
6353 | 792 { |
793 msg_scroll = TRUE; | |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15531
diff
changeset
|
794 msg(_("Warning: Using a weak encryption method; see :help 'cm'")); |
6353 | 795 } |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
796 } |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
797 |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
798 #ifdef FEAT_SODIUM |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
799 static void |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
800 crypt_check_swapfile_curbuf(void) |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
801 { |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
802 int method = crypt_get_method_nr(curbuf); |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
803 if (crypt_method_is_sodium(method)) |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
804 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
805 // encryption uses padding and MAC, that does not work very well with |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
806 // swap and undo files, so disable them |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
807 mf_close_file(curbuf, TRUE); // remove the swap file |
28457
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
27998
diff
changeset
|
808 set_option_value_give_err((char_u *)"swf", 0, NULL, OPT_LOCAL); |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
809 msg_scroll = TRUE; |
25362
68a7e6d70a5e
patch 8.2.3218: when using xchaha20 crypt undo file is not removed
Bram Moolenaar <Bram@vim.org>
parents:
24990
diff
changeset
|
810 msg(_("Note: Encryption of swapfile not supported, disabling swap file")); |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
811 } |
6353 | 812 } |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
813 #endif |
6353 | 814 |
815 void | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
816 crypt_check_current_method(void) |
6353 | 817 { |
818 crypt_check_method(crypt_get_method_nr(curbuf)); | |
819 } | |
820 | |
821 /* | |
6122 | 822 * Ask the user for a crypt key. |
823 * When "store" is TRUE, the new key is stored in the 'key' option, and the | |
824 * 'key' option value is returned: Don't free it. | |
825 * When "store" is FALSE, the typed key is returned in allocated memory. | |
826 * Returns NULL on failure. | |
827 */ | |
828 char_u * | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
829 crypt_get_key( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
830 int store, |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
831 int twice) // Ask for the key twice. |
6122 | 832 { |
833 char_u *p1, *p2 = NULL; | |
834 int round; | |
835 | |
836 for (round = 0; ; ++round) | |
837 { | |
838 cmdline_star = TRUE; | |
839 cmdline_row = msg_row; | |
840 p1 = getcmdline_prompt(NUL, round == 0 | |
841 ? (char_u *)_("Enter encryption key: ") | |
842 : (char_u *)_("Enter same key again: "), 0, EXPAND_NOTHING, | |
843 NULL); | |
844 cmdline_star = FALSE; | |
845 | |
846 if (p1 == NULL) | |
847 break; | |
848 | |
849 if (round == twice) | |
850 { | |
851 if (p2 != NULL && STRCMP(p1, p2) != 0) | |
852 { | |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15531
diff
changeset
|
853 msg(_("Keys don't match!")); |
6122 | 854 crypt_free_key(p1); |
855 crypt_free_key(p2); | |
856 p2 = NULL; | |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
857 round = -1; // do it again |
6122 | 858 continue; |
859 } | |
860 | |
861 if (store) | |
862 { | |
28457
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
27998
diff
changeset
|
863 set_option_value_give_err((char_u *)"key", 0L, p1, OPT_LOCAL); |
6122 | 864 crypt_free_key(p1); |
865 p1 = curbuf->b_p_key; | |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
866 #ifdef FEAT_SODIUM |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
867 crypt_check_swapfile_curbuf(); |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
868 #endif |
6122 | 869 } |
870 break; | |
871 } | |
872 p2 = p1; | |
873 } | |
874 | |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
875 // since the user typed this, no need to wait for return |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
876 if (!crypt_method_is_sodium(crypt_get_method_nr(curbuf))) |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
877 { |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
878 if (msg_didout) |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
879 msg_putchar('\n'); |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
880 need_wait_return = FALSE; |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
881 msg_didout = FALSE; |
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
882 } |
6122 | 883 |
884 crypt_free_key(p2); | |
885 return p1; | |
886 } | |
887 | |
888 | |
889 /* | |
890 * Append a message to IObuff for the encryption/decryption method being used. | |
891 */ | |
892 void | |
7817
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
893 crypt_append_msg( |
83861277e6a3
commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents:
6353
diff
changeset
|
894 buf_T *buf) |
6122 | 895 { |
896 if (crypt_get_method_nr(buf) == 0) | |
897 STRCAT(IObuff, _("[crypted]")); | |
898 else | |
899 { | |
900 STRCAT(IObuff, "["); | |
901 STRCAT(IObuff, *buf->b_p_cm == NUL ? p_cm : buf->b_p_cm); | |
902 STRCAT(IObuff, "]"); | |
903 } | |
904 } | |
905 | |
29320
a74398c432a4
patch 9.0.0003: functions are global while they could be local
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
906 static int |
31379
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
907 crypt_sodium_init_( |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
908 cryptstate_T *state UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
909 char_u *key UNUSED, |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
910 crypt_arg_T *arg UNUSED) |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
911 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
912 # ifdef FEAT_SODIUM |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
913 // crypto_box_SEEDBYTES == crypto_secretstream_xchacha20poly1305_KEYBYTES |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
914 unsigned char dkey[crypto_box_SEEDBYTES]; // 32 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
915 sodium_state_T *sd_state; |
25417
1919361a53da
patch 8.2.3245: the crypt key may appear in a swap partition
Bram Moolenaar <Bram@vim.org>
parents:
25362
diff
changeset
|
916 int retval = 0; |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
917 unsigned long long opslimit; |
32313
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
918 unsigned long long memlimit; |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
919 int alg; |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
920 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
921 if (sodium_init() < 0) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
922 return FAIL; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
923 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
924 sd_state = (sodium_state_T *)sodium_malloc(sizeof(sodium_state_T)); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
925 sodium_memzero(sd_state, sizeof(sodium_state_T)); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
926 |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
927 if ((state->method_nr == CRYPT_M_SOD2 && !arg->cat_init_from_file) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
928 || state->method_nr == CRYPT_M_SOD) |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
929 { |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
930 opslimit = crypto_pwhash_OPSLIMIT_INTERACTIVE; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
931 memlimit = crypto_pwhash_MEMLIMIT_INTERACTIVE; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
932 alg = crypto_pwhash_ALG_DEFAULT; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
933 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
934 #if 0 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
935 // For testing |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
936 if (state->method_nr == CRYPT_M_SOD2) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
937 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
938 opslimit = crypto_pwhash_OPSLIMIT_MODERATE; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
939 memlimit = crypto_pwhash_MEMLIMIT_MODERATE; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
940 } |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
941 #endif |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
942 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
943 // derive a key from the password |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
944 if (crypto_pwhash(dkey, sizeof(dkey), (const char *)key, STRLEN(key), |
32313
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
945 arg->cat_salt, opslimit, (size_t)memlimit, alg) != 0) |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
946 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
947 // out of memory |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
948 sodium_free(sd_state); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
949 return FAIL; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
950 } |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
951 memcpy(sd_state->key, dkey, crypto_box_SEEDBYTES); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
952 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
953 retval += sodium_mlock(sd_state->key, crypto_box_SEEDBYTES); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
954 retval += sodium_mlock(key, STRLEN(key)); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
955 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
956 if (retval < 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
957 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
958 emsg(_(e_encryption_sodium_mlock_failed)); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
959 sodium_free(sd_state); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
960 return FAIL; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
961 } |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
962 if (state->method_nr == CRYPT_M_SOD2) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
963 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
964 memcpy(arg->cat_add, &opslimit, sizeof(opslimit)); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
965 arg->cat_add += sizeof(opslimit); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
966 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
967 memcpy(arg->cat_add, &memlimit, sizeof(memlimit)); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
968 arg->cat_add += sizeof(memlimit); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
969 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
970 memcpy(arg->cat_add, &alg, sizeof(alg)); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
971 arg->cat_add += sizeof(alg); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
972 } |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
973 } |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
974 else |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
975 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
976 // Reading parameters from file |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
977 if (arg->cat_add_len |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
978 < (int)(sizeof(opslimit) + sizeof(memlimit) + sizeof(alg))) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
979 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
980 sodium_free(sd_state); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
981 return FAIL; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
982 } |
25417
1919361a53da
patch 8.2.3245: the crypt key may appear in a swap partition
Bram Moolenaar <Bram@vim.org>
parents:
25362
diff
changeset
|
983 |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
984 // derive the key from the file header |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
985 memcpy(&opslimit, arg->cat_add, sizeof(opslimit)); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
986 arg->cat_add += sizeof(opslimit); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
987 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
988 memcpy(&memlimit, arg->cat_add, sizeof(memlimit)); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
989 arg->cat_add += sizeof(memlimit); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
990 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
991 memcpy(&alg, arg->cat_add, sizeof(alg)); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
992 arg->cat_add += sizeof(alg); |
25417
1919361a53da
patch 8.2.3245: the crypt key may appear in a swap partition
Bram Moolenaar <Bram@vim.org>
parents:
25362
diff
changeset
|
993 |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
994 #ifdef FEAT_EVAL |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
995 crypt_sodium_report_hash_params(opslimit, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
996 crypto_pwhash_OPSLIMIT_INTERACTIVE, |
32313
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
997 (size_t)memlimit, crypto_pwhash_MEMLIMIT_INTERACTIVE, |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
998 alg, crypto_pwhash_ALG_DEFAULT); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
999 #endif |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1000 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1001 if (crypto_pwhash(dkey, sizeof(dkey), (const char *)key, STRLEN(key), |
32313
6761c71f4b25
patch 9.0.1488: xchacha20v2 crypt header is platform dependent
Bram Moolenaar <Bram@vim.org>
parents:
32299
diff
changeset
|
1002 arg->cat_salt, opslimit, (size_t)memlimit, alg) != 0) |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1003 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1004 // out of memory |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1005 sodium_free(sd_state); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1006 return FAIL; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1007 } |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1008 memcpy(sd_state->key, dkey, crypto_box_SEEDBYTES); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1009 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1010 retval += sodium_mlock(sd_state->key, crypto_box_SEEDBYTES); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1011 retval += sodium_mlock(key, STRLEN(key)); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1012 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1013 if (retval < 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1014 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1015 emsg(_(e_encryption_sodium_mlock_failed)); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1016 sodium_free(sd_state); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1017 return FAIL; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1018 } |
25417
1919361a53da
patch 8.2.3245: the crypt key may appear in a swap partition
Bram Moolenaar <Bram@vim.org>
parents:
25362
diff
changeset
|
1019 } |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1020 sd_state->count = 0; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1021 state->method_state = sd_state; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1022 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1023 return OK; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1024 # else |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1025 emsg(e_libsodium_not_built_in); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1026 return FAIL; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1027 # endif |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1028 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1029 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1030 /* |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1031 * Encrypt "from[len]" into "to[len]". |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1032 * "from" and "to" can be equal to encrypt in place. |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1033 * Call needs to ensure that there is enough space in to (for the header) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1034 */ |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
1035 #if 0 // Currently unused |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1036 void |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1037 crypt_sodium_encode( |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1038 cryptstate_T *state UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1039 char_u *from UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1040 size_t len UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1041 char_u *to UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1042 int last UNUSED) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1043 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1044 # ifdef FEAT_SODIUM |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1045 // crypto_box_SEEDBYTES == crypto_secretstream_xchacha20poly1305_KEYBYTES |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1046 sodium_state_T *sod_st = state->method_state; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1047 unsigned char tag = last |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1048 ? crypto_secretstream_xchacha20poly1305_TAG_FINAL : 0; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1049 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1050 if (sod_st->count == 0) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1051 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1052 if (len <= crypto_secretstream_xchacha20poly1305_HEADERBYTES) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1053 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1054 emsg(e_libsodium_cannot_encrypt_header); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1055 return; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1056 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1057 crypto_secretstream_xchacha20poly1305_init_push(&sod_st->state, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1058 to, sod_st->key); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1059 to += crypto_secretstream_xchacha20poly1305_HEADERBYTES; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1060 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1061 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1062 if (sod_st->count && len <= crypto_secretstream_xchacha20poly1305_ABYTES) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1063 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1064 emsg(e_libsodium_cannot_encrypt_buffer); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1065 return; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1066 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1067 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1068 crypto_secretstream_xchacha20poly1305_push(&sod_st->state, to, NULL, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1069 from, len, NULL, 0, tag); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1070 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1071 sod_st->count++; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1072 # endif |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1073 } |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
1074 #endif |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1075 |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
1076 /* |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1077 * Decrypt "from[len]" into "to[len]". |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1078 * "from" and "to" can be equal to encrypt in place. |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1079 */ |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
1080 #if 0 // Currently unused |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1081 void |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1082 crypt_sodium_decode( |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1083 cryptstate_T *state UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1084 char_u *from UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1085 size_t len UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1086 char_u *to UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1087 int last UNUSED) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1088 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1089 # ifdef FEAT_SODIUM |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1090 // crypto_box_SEEDBYTES == crypto_secretstream_xchacha20poly1305_KEYBYTES |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1091 sodium_state_T *sod_st = state->method_state; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1092 unsigned char tag; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1093 unsigned long long buf_len; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1094 char_u *p1 = from; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1095 char_u *p2 = to; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1096 char_u *buf_out; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1097 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1098 if (sod_st->count == 0 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1099 && len <= crypto_secretstream_xchacha20poly1305_HEADERBYTES) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1100 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1101 emsg(e_libsodium_cannot_decrypt_header); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1102 return; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1103 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1104 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1105 buf_out = (char_u *)alloc(len); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1106 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1107 if (buf_out == NULL) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1108 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1109 emsg(e_libsodium_cannot_allocate_buffer); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1110 return; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1111 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1112 if (sod_st->count == 0) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1113 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1114 if (crypto_secretstream_xchacha20poly1305_init_pull( |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1115 &sod_st->state, from, sod_st->key) != 0) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1116 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1117 emsg(e_libsodium_decryption_failed_header_incomplete); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1118 goto fail; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1119 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1120 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1121 from += crypto_secretstream_xchacha20poly1305_HEADERBYTES; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1122 len -= crypto_secretstream_xchacha20poly1305_HEADERBYTES; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1123 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1124 if (p1 == p2) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1125 to += crypto_secretstream_xchacha20poly1305_HEADERBYTES; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1126 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1127 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1128 if (sod_st->count && len <= crypto_secretstream_xchacha20poly1305_ABYTES) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1129 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1130 emsg(e_libsodium_cannot_decrypt_buffer); |
24986
fa31a0ea09e1
patch 8.2.3030: Coverity reports a memory leak
Bram Moolenaar <Bram@vim.org>
parents:
24970
diff
changeset
|
1131 goto fail; |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1132 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1133 if (crypto_secretstream_xchacha20poly1305_pull(&sod_st->state, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1134 buf_out, &buf_len, &tag, from, len, NULL, 0) != 0) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1135 { |
24986
fa31a0ea09e1
patch 8.2.3030: Coverity reports a memory leak
Bram Moolenaar <Bram@vim.org>
parents:
24970
diff
changeset
|
1136 emsg(e_libsodium_decryption_failed); |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1137 goto fail; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1138 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1139 sod_st->count++; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1140 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1141 if (tag == crypto_secretstream_xchacha20poly1305_TAG_FINAL && !last) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1142 { |
24986
fa31a0ea09e1
patch 8.2.3030: Coverity reports a memory leak
Bram Moolenaar <Bram@vim.org>
parents:
24970
diff
changeset
|
1143 emsg(e_libsodium_decryption_failed_premature); |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1144 goto fail; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1145 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1146 if (p1 == p2) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1147 mch_memmove(p2, buf_out, buf_len); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1148 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1149 fail: |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1150 vim_free(buf_out); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1151 # endif |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1152 } |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
1153 #endif |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1154 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1155 /* |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1156 * Encrypt "from[len]" into "to[len]". |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1157 * "from" and "to" can be equal to encrypt in place. |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1158 */ |
29320
a74398c432a4
patch 9.0.0003: functions are global while they could be local
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
1159 static long |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1160 crypt_sodium_buffer_encode( |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1161 cryptstate_T *state UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1162 char_u *from UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1163 size_t len UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1164 char_u **buf_out UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1165 int last UNUSED) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1166 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1167 # ifdef FEAT_SODIUM |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1168 // crypto_box_SEEDBYTES == crypto_secretstream_xchacha20poly1305_KEYBYTES |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1169 unsigned long long out_len; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1170 char_u *ptr; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1171 unsigned char tag = last |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1172 ? crypto_secretstream_xchacha20poly1305_TAG_FINAL : 0; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1173 int length; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1174 sodium_state_T *sod_st = state->method_state; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1175 int first = (sod_st->count == 0); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1176 |
24990
85d1e82ed134
patch 8.2.3032: build problems with MSVC, other crypt issues with libsodium
Bram Moolenaar <Bram@vim.org>
parents:
24986
diff
changeset
|
1177 length = (int)len + crypto_secretstream_xchacha20poly1305_ABYTES |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1178 + (first ? crypto_secretstream_xchacha20poly1305_HEADERBYTES : 0); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1179 *buf_out = alloc_clear(length); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1180 if (*buf_out == NULL) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1181 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1182 emsg(e_libsodium_cannot_allocate_buffer); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1183 return -1; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1184 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1185 ptr = *buf_out; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1186 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1187 if (first) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1188 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1189 crypto_secretstream_xchacha20poly1305_init_push(&sod_st->state, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1190 ptr, sod_st->key); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1191 ptr += crypto_secretstream_xchacha20poly1305_HEADERBYTES; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1192 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1193 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1194 crypto_secretstream_xchacha20poly1305_push(&sod_st->state, ptr, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1195 &out_len, from, len, NULL, 0, tag); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1196 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1197 sod_st->count++; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1198 return out_len + (first |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1199 ? crypto_secretstream_xchacha20poly1305_HEADERBYTES : 0); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1200 # else |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1201 return -1; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1202 # endif |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1203 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1204 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1205 /* |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1206 * Decrypt "from[len]" into "to[len]". |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1207 * "from" and "to" can be equal to encrypt in place. |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1208 */ |
29320
a74398c432a4
patch 9.0.0003: functions are global while they could be local
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
1209 static long |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1210 crypt_sodium_buffer_decode( |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1211 cryptstate_T *state UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1212 char_u *from UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1213 size_t len UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1214 char_u **buf_out UNUSED, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1215 int last UNUSED) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1216 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1217 # ifdef FEAT_SODIUM |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1218 // crypto_box_SEEDBYTES == crypto_secretstream_xchacha20poly1305_KEYBYTES |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1219 sodium_state_T *sod_st = state->method_state; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1220 unsigned char tag; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1221 unsigned long long out_len; |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1222 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1223 if (sod_st->count == 0 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1224 && state->method_nr == CRYPT_M_SOD |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1225 && len > WRITEBUFSIZE |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1226 + crypto_secretstream_xchacha20poly1305_HEADERBYTES |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1227 + crypto_secretstream_xchacha20poly1305_ABYTES) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1228 len -= cryptmethods[CRYPT_M_SOD2].add_len; |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1229 |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1230 *buf_out = alloc_clear(len); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1231 if (*buf_out == NULL) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1232 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1233 emsg(e_libsodium_cannot_allocate_buffer); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1234 return -1; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1235 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1236 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1237 if (sod_st->count == 0) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1238 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1239 if (crypto_secretstream_xchacha20poly1305_init_pull(&sod_st->state, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1240 from, sod_st->key) != 0) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1241 { |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1242 emsg(e_libsodium_decryption_failed_header_incomplete); |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1243 return -1; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1244 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1245 from += crypto_secretstream_xchacha20poly1305_HEADERBYTES; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1246 len -= crypto_secretstream_xchacha20poly1305_HEADERBYTES; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1247 sod_st->count++; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1248 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1249 if (crypto_secretstream_xchacha20poly1305_pull(&sod_st->state, |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1250 *buf_out, &out_len, &tag, from, len, NULL, 0) != 0) |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1251 { |
24986
fa31a0ea09e1
patch 8.2.3030: Coverity reports a memory leak
Bram Moolenaar <Bram@vim.org>
parents:
24970
diff
changeset
|
1252 emsg(e_libsodium_decryption_failed); |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1253 return -1; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1254 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1255 |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1256 if (tag == crypto_secretstream_xchacha20poly1305_TAG_FINAL && !last) |
24986
fa31a0ea09e1
patch 8.2.3030: Coverity reports a memory leak
Bram Moolenaar <Bram@vim.org>
parents:
24970
diff
changeset
|
1257 emsg(e_libsodium_decryption_failed_premature); |
24970
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1258 return (long) out_len; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1259 # else |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1260 return -1; |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1261 # endif |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1262 } |
7e9e53a0368f
patch 8.2.3022: available encryption methods are not strong enough
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1263 |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1264 # if defined(FEAT_SODIUM) || defined(PROTO) |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1265 int |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1266 crypt_sodium_munlock(void *const addr, const size_t len) |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1267 { |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1268 return sodium_munlock(addr, len); |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1269 } |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1270 |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1271 void |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1272 crypt_sodium_randombytes_buf(void *const buf, const size_t size) |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1273 { |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1274 randombytes_buf(buf, size); |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1275 } |
31379
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1276 |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1277 int |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1278 crypt_sodium_init(void) |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1279 { |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1280 return sodium_init(); |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1281 } |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1282 |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1283 uint32_t |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1284 crypt_sodium_randombytes_random(void) |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1285 { |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1286 return randombytes_random(); |
540e85ac14c9
patch 9.0.1023: MS-Windows: dynamic loading of libsodium doesn't work
Bram Moolenaar <Bram@vim.org>
parents:
29320
diff
changeset
|
1287 } |
32299
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1288 |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1289 #if defined(FEAT_EVAL) || defined(PROTO) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1290 static void |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1291 crypt_sodium_report_hash_params( |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1292 unsigned long long opslimit, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1293 unsigned long long ops_def, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1294 size_t memlimit, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1295 size_t mem_def, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1296 int alg, |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1297 int alg_def) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1298 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1299 if (p_verbose > 0) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1300 { |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1301 verbose_enter(); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1302 if (opslimit != ops_def) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1303 smsg(_("xchacha20v2: using custom opslimit \"%llu\" for Key derivation."), opslimit); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1304 else |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1305 smsg(_("xchacha20v2: using default opslimit \"%llu\" for Key derivation."), opslimit); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1306 if (memlimit != mem_def) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1307 smsg(_("xchacha20v2: using custom memlimit \"%lu\" for Key derivation."), (unsigned long)memlimit); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1308 else |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1309 smsg(_("xchacha20v2: using default memlimit \"%lu\" for Key derivation."), (unsigned long)memlimit); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1310 if (alg != alg_def) |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1311 smsg(_("xchacha20v2: using custom algorithm \"%d\" for Key derivation."), alg); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1312 else |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1313 smsg(_("xchacha20v2: using default algorithm \"%d\" for Key derivation."), alg); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1314 verbose_leave(); |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1315 } |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1316 } |
3d4e28569a6d
patch 9.0.1481: decrypting with libsodium may fail if the library changes
Bram Moolenaar <Bram@vim.org>
parents:
32280
diff
changeset
|
1317 #endif |
27231
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1318 # endif |
e1cedf009920
patch 8.2.4144: cannot load libsodium dynamically
Bram Moolenaar <Bram@vim.org>
parents:
27018
diff
changeset
|
1319 |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
1320 #endif // FEAT_CRYPT |