xref: /OK3568_Linux_fs/buildroot/package/vtun/0003-openssl11.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1Fix build with OpenSSL 1.1.x
2
3Extracted vtun-openssl.patch from
4http://dl.fedoraproject.org/pub/fedora/linux/releases/27/Everything/source/tree/Packages/v/vtun-3.0.4-4.fc27.src.rpm
5
6Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
7
8diff -NarU5 a/lfd_encrypt.c b/lfd_encrypt.c
9--- a/lfd_encrypt.c	2016-10-01 17:27:51.000000000 -0400
10+++ b/lfd_encrypt.c	2017-03-20 08:43:48.013308435 -0400
11@@ -93,15 +93,15 @@
12 static int dec_init_first_time;
13 static unsigned long sequence_num;
14 static char * pkey;
15 static char * iv_buf;
16
17-static EVP_CIPHER_CTX ctx_enc;	/* encrypt */
18-static EVP_CIPHER_CTX ctx_dec;	/* decrypt */
19+static EVP_CIPHER_CTX *ctx_enc;	/* encrypt */
20+static EVP_CIPHER_CTX *ctx_dec;	/* decrypt */
21
22-static EVP_CIPHER_CTX ctx_enc_ecb;	/* sideband ecb encrypt */
23-static EVP_CIPHER_CTX ctx_dec_ecb;	/* sideband ecb decrypt */
24+static EVP_CIPHER_CTX *ctx_enc_ecb;	/* sideband ecb encrypt */
25+static EVP_CIPHER_CTX *ctx_dec_ecb;	/* sideband ecb decrypt */
26
27 static int send_msg(int len, char *in, char **out);
28 static int recv_msg(int len, char *in, char **out);
29 static int send_ib_mesg(int *len, char **in);
30 static int recv_ib_mesg(int *len, char **in);
31@@ -180,37 +180,37 @@
32       case VTUN_ENC_AES256CBC:
33          blocksize = 16;
34          keysize = 32;
35          sb_init = 1;
36          cipher_type = EVP_aes_256_ecb();
37-         pctx_enc = &ctx_enc_ecb;
38-         pctx_dec = &ctx_dec_ecb;
39+         pctx_enc = ctx_enc_ecb;
40+         pctx_dec = ctx_dec_ecb;
41       break;
42
43       case VTUN_ENC_AES256ECB:
44          blocksize = 16;
45          keysize = 32;
46-         pctx_enc = &ctx_enc;
47-         pctx_dec = &ctx_dec;
48+         pctx_enc = ctx_enc;
49+         pctx_dec = ctx_dec;
50          cipher_type = EVP_aes_256_ecb();
51          strcpy(cipher_name,"AES-256-ECB");
52       break;
53       case VTUN_ENC_AES128OFB:
54       case VTUN_ENC_AES128CFB:
55       case VTUN_ENC_AES128CBC:
56          blocksize = 16;
57          keysize = 16;
58          sb_init=1;
59          cipher_type = EVP_aes_128_ecb();
60-         pctx_enc = &ctx_enc_ecb;
61-         pctx_dec = &ctx_dec_ecb;
62+         pctx_enc = ctx_enc_ecb;
63+         pctx_dec = ctx_dec_ecb;
64       break;
65       case VTUN_ENC_AES128ECB:
66          blocksize = 16;
67          keysize = 16;
68-         pctx_enc = &ctx_enc;
69-         pctx_dec = &ctx_dec;
70+         pctx_enc = ctx_enc;
71+         pctx_dec = ctx_dec;
72          cipher_type = EVP_aes_128_ecb();
73          strcpy(cipher_name,"AES-128-ECB");
74       break;
75
76       case VTUN_ENC_BF256OFB:
77@@ -219,20 +219,20 @@
78          blocksize = 8;
79          keysize = 32;
80          var_key = 1;
81          sb_init = 1;
82          cipher_type = EVP_bf_ecb();
83-         pctx_enc = &ctx_enc_ecb;
84-         pctx_dec = &ctx_dec_ecb;
85+         pctx_enc = ctx_enc_ecb;
86+         pctx_dec = ctx_dec_ecb;
87       break;
88
89       case VTUN_ENC_BF256ECB:
90          blocksize = 8;
91          keysize = 32;
92          var_key = 1;
93-         pctx_enc = &ctx_enc;
94-         pctx_dec = &ctx_dec;
95+         pctx_enc = ctx_enc;
96+         pctx_dec = ctx_dec;
97          cipher_type = EVP_bf_ecb();
98          strcpy(cipher_name,"Blowfish-256-ECB");
99       break;
100
101       case VTUN_ENC_BF128OFB:
102@@ -241,26 +241,28 @@
103          blocksize = 8;
104          keysize = 16;
105          var_key = 1;
106          sb_init = 1;
107          cipher_type = EVP_bf_ecb();
108-         pctx_enc = &ctx_enc_ecb;
109-         pctx_dec = &ctx_dec_ecb;
110+         pctx_enc = ctx_enc_ecb;
111+         pctx_dec = ctx_dec_ecb;
112       break;
113       case VTUN_ENC_BF128ECB: /* blowfish 128 ecb is the default */
114       default:
115          blocksize = 8;
116          keysize = 16;
117          var_key = 1;
118-         pctx_enc = &ctx_enc;
119-         pctx_dec = &ctx_dec;
120+         pctx_enc = ctx_enc;
121+         pctx_dec = ctx_dec;
122          cipher_type = EVP_bf_ecb();
123          strcpy(cipher_name,"Blowfish-128-ECB");
124       break;
125    } /* switch(host->cipher) */
126
127    if (prep_key(&pkey, keysize, host) != 0) return -1;
128+   pctx_enc = EVP_CIPHER_CTX_new();
129+   pctx_dec = EVP_CIPHER_CTX_new();
130    EVP_CIPHER_CTX_init(pctx_enc);
131    EVP_CIPHER_CTX_init(pctx_dec);
132    EVP_EncryptInit_ex(pctx_enc, cipher_type, NULL, NULL, NULL);
133    EVP_DecryptInit_ex(pctx_dec, cipher_type, NULL, NULL, NULL);
134    if (var_key)
135@@ -292,14 +294,14 @@
136    free_key(pkey); pkey = NULL;
137
138    lfd_free(enc_buf); enc_buf = NULL;
139    lfd_free(dec_buf); dec_buf = NULL;
140
141-   EVP_CIPHER_CTX_cleanup(&ctx_enc);
142-   EVP_CIPHER_CTX_cleanup(&ctx_dec);
143-   EVP_CIPHER_CTX_cleanup(&ctx_enc_ecb);
144-   EVP_CIPHER_CTX_cleanup(&ctx_dec_ecb);
145+   EVP_CIPHER_CTX_free(ctx_enc);
146+   EVP_CIPHER_CTX_free(ctx_dec);
147+   EVP_CIPHER_CTX_free(ctx_enc_ecb);
148+   EVP_CIPHER_CTX_free(ctx_dec_ecb);
149
150    return 0;
151 }
152
153 static int encrypt_buf(int len, char *in, char **out)
154@@ -321,11 +323,11 @@
155
156    memset(in_ptr+len, pad, pad);
157    outlen=len+pad;
158    if (pad == blocksize)
159       RAND_bytes(in_ptr+len, blocksize-1);
160-   EVP_EncryptUpdate(&ctx_enc, out_ptr, &outlen, in_ptr, len+pad);
161+   EVP_EncryptUpdate(ctx_enc, out_ptr, &outlen, in_ptr, len+pad);
162    *out = enc_buf;
163
164    sequence_num++;
165
166    return outlen+msg_len;
167@@ -341,11 +343,11 @@
168    in = *out;
169    in_ptr = in;
170
171    outlen=len;
172    if (!len) return 0;
173-   EVP_DecryptUpdate(&ctx_dec, out_ptr, &outlen, in_ptr, len);
174+   EVP_DecryptUpdate(ctx_dec, out_ptr, &outlen, in_ptr, len);
175    recv_ib_mesg(&outlen, &out_ptr);
176    if (!outlen) return 0;
177    tmp_ptr = out_ptr + outlen; tmp_ptr--;
178    pad = *tmp_ptr;
179    if (pad < 1 || pad > blocksize) {
180@@ -429,17 +431,18 @@
181       /* if we're here, something weird's going on */
182          return -1;
183       break;
184    } /* switch(cipher) */
185
186-   EVP_CIPHER_CTX_init(&ctx_enc);
187-   EVP_EncryptInit_ex(&ctx_enc, cipher_type, NULL, NULL, NULL);
188+   ctx_enc = EVP_CIPHER_CTX_new();
189+   EVP_CIPHER_CTX_init(ctx_enc);
190+   EVP_EncryptInit_ex(ctx_enc, cipher_type, NULL, NULL, NULL);
191    if (var_key)
192-      EVP_CIPHER_CTX_set_key_length(&ctx_enc, keysize);
193-   EVP_EncryptInit_ex(&ctx_enc, NULL, NULL, pkey, NULL);
194-   EVP_EncryptInit_ex(&ctx_enc, NULL, NULL, NULL, iv);
195-   EVP_CIPHER_CTX_set_padding(&ctx_enc, 0);
196+      EVP_CIPHER_CTX_set_key_length(ctx_enc, keysize);
197+   EVP_EncryptInit_ex(ctx_enc, NULL, NULL, pkey, NULL);
198+   EVP_EncryptInit_ex(ctx_enc, NULL, NULL, NULL, iv);
199+   EVP_CIPHER_CTX_set_padding(ctx_enc, 0);
200    if (enc_init_first_time)
201    {
202       sprintf(tmpstr,"%s encryption initialized", cipher_name);
203       vtun_syslog(LOG_INFO, tmpstr);
204       enc_init_first_time = 0;
205@@ -519,17 +522,18 @@
206       /* if we're here, something weird's going on */
207          return -1;
208       break;
209    } /* switch(cipher) */
210
211-   EVP_CIPHER_CTX_init(&ctx_dec);
212-   EVP_DecryptInit_ex(&ctx_dec, cipher_type, NULL, NULL, NULL);
213+   ctx_dec = EVP_CIPHER_CTX_new();
214+   EVP_CIPHER_CTX_init(ctx_dec);
215+   EVP_DecryptInit_ex(ctx_dec, cipher_type, NULL, NULL, NULL);
216    if (var_key)
217-      EVP_CIPHER_CTX_set_key_length(&ctx_dec, keysize);
218-   EVP_DecryptInit_ex(&ctx_dec, NULL, NULL, pkey, NULL);
219-   EVP_DecryptInit_ex(&ctx_dec, NULL, NULL, NULL, iv);
220-   EVP_CIPHER_CTX_set_padding(&ctx_dec, 0);
221+      EVP_CIPHER_CTX_set_key_length(ctx_dec, keysize);
222+   EVP_DecryptInit_ex(ctx_dec, NULL, NULL, pkey, NULL);
223+   EVP_DecryptInit_ex(ctx_dec, NULL, NULL, NULL, iv);
224+   EVP_CIPHER_CTX_set_padding(ctx_dec, 0);
225    if (dec_init_first_time)
226    {
227       sprintf(tmpstr,"%s decryption initialized", cipher_name);
228       vtun_syslog(LOG_INFO, tmpstr);
229       dec_init_first_time = 0;
230@@ -557,11 +561,11 @@
231          memset(iv,0,blocksize); free(iv); iv = NULL;
232          RAND_bytes(in_ptr, in - in_ptr);
233
234          in_ptr = in - blocksize*2;
235          outlen = blocksize*2;
236-         EVP_EncryptUpdate(&ctx_enc_ecb, in_ptr,
237+         EVP_EncryptUpdate(ctx_enc_ecb, in_ptr,
238             &outlen, in_ptr, blocksize*2);
239          *out = in_ptr;
240          len = outlen;
241          cipher_enc_state = CIPHER_SEQUENCE;
242       break;
243@@ -584,11 +588,11 @@
244    {
245       case CIPHER_INIT:
246          in_ptr = in;
247          iv = malloc(blocksize);
248          outlen = blocksize*2;
249-         EVP_DecryptUpdate(&ctx_dec_ecb, in_ptr, &outlen, in_ptr, blocksize*2);
250+         EVP_DecryptUpdate(ctx_dec_ecb, in_ptr, &outlen, in_ptr, blocksize*2);
251
252          if ( !strncmp(in_ptr, "ivec", 4) )
253          {
254             memcpy(iv, in_ptr+4, blocksize);
255             cipher_dec_init(iv);
256@@ -627,11 +631,11 @@
257                   "Max. gibberish threshold reached");
258 #endif
259                if (cipher_enc_state != CIPHER_INIT)
260                {
261                   cipher_enc_state = CIPHER_INIT;
262-                  EVP_CIPHER_CTX_cleanup(&ctx_enc);
263+                  EVP_CIPHER_CTX_free(ctx_enc);
264 #ifdef LFD_ENCRYPT_DEBUG
265                   vtun_syslog(LOG_INFO,
266                      "Forcing local encryptor re-init");
267 #endif
268                }
269@@ -708,11 +712,11 @@
270          *len -= blocksize;
271
272          if (cipher_enc_state != CIPHER_INIT)
273          {
274             cipher_enc_state = CIPHER_INIT;
275-            EVP_CIPHER_CTX_cleanup(&ctx_enc);
276+            EVP_CIPHER_CTX_free(ctx_enc);
277          }
278 #ifdef LFD_ENCRYPT_DEBUG
279          vtun_syslog(LOG_INFO, "Remote requests encryptor re-init");
280 #endif
281       }
282@@ -722,11 +726,11 @@
283
284          if (cipher_dec_state != CIPHER_INIT &&
285              cipher_enc_state != CIPHER_REQ_INIT &&
286              cipher_enc_state != CIPHER_INIT)
287          {
288-            EVP_CIPHER_CTX_cleanup (&ctx_dec);
289+            EVP_CIPHER_CTX_free (ctx_dec);
290             cipher_dec_state = CIPHER_INIT;
291             cipher_enc_state = CIPHER_REQ_INIT;
292          }
293 #ifdef LFD_ENCRYPT_DEBUG
294          vtun_syslog(LOG_INFO, "Local decryptor out of sync");
295