#include "internal/cryptlib.h"
#include "crypto/asn1.h"
#include "crypto/evp.h"
+#include "crypto/dh.h"
+#include "internal/ffc.h"
#include "internal/numbers.h"
#include "internal/provider.h"
#include "evp_local.h"
*/
if (cmd == EVP_PKEY_CTRL_CIPHER)
return -2;
+
# ifndef OPENSSL_NO_DH
if (keytype == EVP_PKEY_DH) {
switch (cmd) {
case EVP_PKEY_CTRL_DH_PAD:
return EVP_PKEY_CTX_set_dh_pad(ctx, p1);
+ case EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN:
+ return EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, p1);
+ case EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN:
+ return EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, p1);
+ case EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR:
+ return EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, p1);
+ case EVP_PKEY_CTRL_DH_PARAMGEN_TYPE:
+ return EVP_PKEY_CTX_set_dh_paramgen_type(ctx, p1);
+ case EVP_PKEY_CTRL_DH_RFC5114:
+ return EVP_PKEY_CTX_set_dh_rfc5114(ctx, p1);
}
}
# endif
name = OSSL_PKEY_PARAM_FFC_DIGEST;
# endif
# ifndef OPENSSL_NO_DH
- else if (strcmp(name, "dh_pad") == 0)
+ else if (strcmp(name, "dh_paramgen_generator") == 0)
+ name = OSSL_PKEY_PARAM_FFC_GENERATOR;
+ else if (strcmp(name, "dh_paramgen_prime_len") == 0)
+ name = OSSL_PKEY_PARAM_FFC_PBITS;
+ else if (strcmp(name, "dh_paramgen_subprime_len") == 0)
+ name = OSSL_PKEY_PARAM_FFC_QBITS;
+ else if (strcmp(name, "dh_paramgen_type") == 0) {
+ name = OSSL_PKEY_PARAM_FFC_TYPE;
+ value = dh_gen_type_id2name(atoi(value));
+ } else if (strcmp(name, "dh_param") == 0)
+ name = OSSL_PKEY_PARAM_FFC_GROUP;
+ else if (strcmp(name, "dh_rfc5114") == 0) {
+ name = OSSL_PKEY_PARAM_FFC_GROUP;
+ value = ffc_named_group_from_uid(atoi(value));
+ } else if (strcmp(name, "dh_pad") == 0)
name = OSSL_EXCHANGE_PARAM_PAD;
# endif
# ifndef OPENSSL_NO_EC