Fix EVP_CIPHER_CTX_set_padding for legacy path
authorShane Lontis <shane.lontis@oracle.com>
Wed, 18 Nov 2020 09:49:19 +0000 (19:49 +1000)
committerShane Lontis <shane.lontis@oracle.com>
Thu, 26 Nov 2020 21:58:01 +0000 (07:58 +1000)
Fixes #13057

When using an engine, there is no cipher->prov so a call to
EVP_CIPHER_CTX_set_padding() returns an error when
evp_do_ciph_ctx_setparams() is called. For the legacy path it needs to
avoid doing the call and just return 1.

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Ben Kaduk <kaduk@mit.edu>
(Merged from https://github.com/openssl/openssl/pull/13437)

crypto/evp/evp_enc.c

index f439e8d61d97a12fa7d720f15a0fdc34d639b705..7818ab25ea22661e61d54e813d8432a4f33b85db 100644 (file)
@@ -948,6 +948,8 @@ int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *ctx, int pad)
     else
         ctx->flags |= EVP_CIPH_NO_PADDING;
 
+    if (ctx->cipher != NULL && ctx->cipher->prov == NULL)
+        return 1;
     params[0] = OSSL_PARAM_construct_uint(OSSL_CIPHER_PARAM_PADDING, &pd);
     ok = evp_do_ciph_ctx_setparams(ctx->cipher, ctx->provctx, params);