Make implementation of blocksize, iv_length and key_length mandatory
authorMatt Caswell <matt@openssl.org>
Wed, 10 Apr 2019 12:54:38 +0000 (13:54 +0100)
committerMatt Caswell <matt@openssl.org>
Fri, 19 Apr 2019 08:31:54 +0000 (09:31 +0100)
Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/8700)

crypto/evp/evp_enc.c

index 69cd577800b3cf6fb548d2fd2bf4200cf33bd3dc..4426a8162981a948b896fc6e2a957f1e8a6663f6 100644 (file)
@@ -1109,12 +1109,16 @@ static void *evp_cipher_from_dispatch(int nid, const OSSL_DISPATCH *fns,
     }
     if ((fnciphcnt != 0 && fnciphcnt != 3 && fnciphcnt != 4)
             || (fnciphcnt == 0 && cipher->ccipher == NULL)
-            || fnctxcnt != 2) {
+            || fnctxcnt != 2
+            || cipher->blocksize == NULL
+            || cipher->iv_length == NULL
+            || cipher->key_length == NULL) {
         /*
          * In order to be a consistent set of functions we must have at least
          * a complete set of "encrypt" functions, or a complete set of "decrypt"
          * functions, or a single "cipher" function. In all cases we need a
-         * complete set of context management functions
+         * complete set of context management functions, as well as the
+         * blocksize, iv_length and key_length functions.
          */
         EVP_CIPHER_meth_free(cipher);
         EVPerr(EVP_F_EVP_CIPHER_FROM_DISPATCH, EVP_R_INVALID_PROVIDER_FUNCTIONS);