EVP_PKEY_free(pkey2);
ctx = EVP_PKEY_CTX_new(pkey, NULL);
- EVP_PKEY_param_check(ctx);
+ /*
+ * Param check will take too long time on large DH parameters.
+ * Skip it.
+ */
+ if (!EVP_PKEY_is_a(pkey, "DH") || EVP_PKEY_get_bits(pkey) <= 8192)
+ EVP_PKEY_param_check(ctx);
+
EVP_PKEY_public_check(ctx);
- EVP_PKEY_private_check(ctx);
- EVP_PKEY_pairwise_check(ctx);
+ /* Private and pairwise checks are unbounded, skip for large keys. */
+ if (EVP_PKEY_get_bits(pkey) <= 16384) {
+ EVP_PKEY_private_check(ctx);
+ EVP_PKEY_pairwise_check(ctx);
+ }
OPENSSL_assert(ctx != NULL);
EVP_PKEY_CTX_free(ctx);
EVP_PKEY_free(pkey);