openssl: update to version 1.1.1a
[openwrt/staging/jogo.git] / package / libs / openssl / patches / 240-eng_devcrypto-add-cipher-CTX-copy-function.patch
1 From a19d1a1d370e2959555fccbafc4e970634840352 Mon Sep 17 00:00:00 2001
2 From: Eneas U de Queiroz <cote2004-github@yahoo.com>
3 Date: Tue, 13 Nov 2018 09:23:22 -0200
4 Subject: [PATCH 5/7] eng_devcrypto: add cipher CTX copy function
5
6 The engine needs a custom cipher context copy function to open a new
7 /dev/crypto session.
8
9 Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
10
11 Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
12 Reviewed-by: Richard Levitte <levitte@openssl.org>
13 (Merged from https://github.com/openssl/openssl/pull/7585)
14
15 (cherry picked from commit 6d99e238397859f2df58c60e28905193b2dd6762)
16
17 --- a/crypto/engine/eng_devcrypto.c
18 +++ b/crypto/engine/eng_devcrypto.c
19 @@ -207,6 +207,22 @@ static int cipher_do_cipher(EVP_CIPHER_C
20 return 1;
21 }
22
23 +static int cipher_ctrl(EVP_CIPHER_CTX *ctx, int type, int p1, void* p2)
24 +{
25 + EVP_CIPHER_CTX *to_ctx = (EVP_CIPHER_CTX *)p2;
26 + struct cipher_ctx *cipher_ctx;
27 +
28 + if (type == EVP_CTRL_COPY) {
29 + /* when copying the context, a new session needs to be initialized */
30 + cipher_ctx = (struct cipher_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx);
31 + return (cipher_ctx == NULL)
32 + || cipher_init(to_ctx, cipher_ctx->sess.key, EVP_CIPHER_CTX_iv(ctx),
33 + (cipher_ctx->op == COP_ENCRYPT));
34 + }
35 +
36 + return -1;
37 +}
38 +
39 static int cipher_cleanup(EVP_CIPHER_CTX *ctx)
40 {
41 struct cipher_ctx *cipher_ctx =
42 @@ -258,10 +274,12 @@ static void prepare_cipher_methods(void)
43 cipher_data[i].ivlen)
44 || !EVP_CIPHER_meth_set_flags(known_cipher_methods[i],
45 cipher_data[i].flags
46 + | EVP_CIPH_CUSTOM_COPY
47 | EVP_CIPH_FLAG_DEFAULT_ASN1)
48 || !EVP_CIPHER_meth_set_init(known_cipher_methods[i], cipher_init)
49 || !EVP_CIPHER_meth_set_do_cipher(known_cipher_methods[i],
50 cipher_do_cipher)
51 + || !EVP_CIPHER_meth_set_ctrl(known_cipher_methods[i], cipher_ctrl)
52 || !EVP_CIPHER_meth_set_cleanup(known_cipher_methods[i],
53 cipher_cleanup)
54 || !EVP_CIPHER_meth_set_impl_ctx_size(known_cipher_methods[i],