aboutsummaryrefslogtreecommitdiffstats
path: root/package/libs/openssl/patches/240-eng_devcrypto-add-cipher-CTX-copy-function.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/libs/openssl/patches/240-eng_devcrypto-add-cipher-CTX-copy-function.patch')
-rw-r--r--package/libs/openssl/patches/240-eng_devcrypto-add-cipher-CTX-copy-function.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/package/libs/openssl/patches/240-eng_devcrypto-add-cipher-CTX-copy-function.patch b/package/libs/openssl/patches/240-eng_devcrypto-add-cipher-CTX-copy-function.patch
new file mode 100644
index 0000000000..948ff7c2bc
--- /dev/null
+++ b/package/libs/openssl/patches/240-eng_devcrypto-add-cipher-CTX-copy-function.patch
@@ -0,0 +1,54 @@
+From a19d1a1d370e2959555fccbafc4e970634840352 Mon Sep 17 00:00:00 2001
+From: Eneas U de Queiroz <cote2004-github@yahoo.com>
+Date: Tue, 13 Nov 2018 09:23:22 -0200
+Subject: [PATCH 5/7] eng_devcrypto: add cipher CTX copy function
+
+The engine needs a custom cipher context copy function to open a new
+/dev/crypto session.
+
+Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
+
+Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
+Reviewed-by: Richard Levitte <levitte@openssl.org>
+(Merged from https://github.com/openssl/openssl/pull/7585)
+
+(cherry picked from commit 6d99e238397859f2df58c60e28905193b2dd6762)
+
+--- a/crypto/engine/eng_devcrypto.c
++++ b/crypto/engine/eng_devcrypto.c
+@@ -207,6 +207,22 @@ static int cipher_do_cipher(EVP_CIPHER_C
+ return 1;
+ }
+
++static int cipher_ctrl(EVP_CIPHER_CTX *ctx, int type, int p1, void* p2)
++{
++ EVP_CIPHER_CTX *to_ctx = (EVP_CIPHER_CTX *)p2;
++ struct cipher_ctx *cipher_ctx;
++
++ if (type == EVP_CTRL_COPY) {
++ /* when copying the context, a new session needs to be initialized */
++ cipher_ctx = (struct cipher_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx);
++ return (cipher_ctx == NULL)
++ || cipher_init(to_ctx, cipher_ctx->sess.key, EVP_CIPHER_CTX_iv(ctx),
++ (cipher_ctx->op == COP_ENCRYPT));
++ }
++
++ return -1;
++}
++
+ static int cipher_cleanup(EVP_CIPHER_CTX *ctx)
+ {
+ struct cipher_ctx *cipher_ctx =
+@@ -258,10 +274,12 @@ static void prepare_cipher_methods(void)
+ cipher_data[i].ivlen)
+ || !EVP_CIPHER_meth_set_flags(known_cipher_methods[i],
+ cipher_data[i].flags
++ | EVP_CIPH_CUSTOM_COPY
+ | EVP_CIPH_FLAG_DEFAULT_ASN1)
+ || !EVP_CIPHER_meth_set_init(known_cipher_methods[i], cipher_init)
+ || !EVP_CIPHER_meth_set_do_cipher(known_cipher_methods[i],
+ cipher_do_cipher)
++ || !EVP_CIPHER_meth_set_ctrl(known_cipher_methods[i], cipher_ctrl)
+ || !EVP_CIPHER_meth_set_cleanup(known_cipher_methods[i],
+ cipher_cleanup)
+ || !EVP_CIPHER_meth_set_impl_ctx_size(known_cipher_methods[i],