在 OpenSSL3 之前,这很简单。
DH* dh = DH_new();
/* Parameters */
dh->p = BN_bin2bn(bin_p, bin_p_size, NULL);
dh->g = BN_bin2bn(bin_g, bin_g_size, NULL);
/* Private key generation */
BN_hex2bn(&dh->priv_key, hex_priv_key);
/* Public key generation */
DH_generate_key(dh);
/* Derive */
int shared_key_size = DH_compute_key(shared_key, peer_pub_key, dh);
Run Code Online (Sandbox Code Playgroud)
我正在尝试在新版本的 OpenSSL 中创建密钥,但它不起作用,因为 EVP_PKEY_generate 失败并出现错误:03000097:数字信封例程::操作未初始化
OSSL_PARAM_BLD* param_build = OSSL_PARAM_BLD_new();
OSSL_PARAM_BLD_push_BN(param_build, OSSL_PKEY_PARAM_FFC_P, p);
OSSL_PARAM_BLD_push_BN(param_build, OSSL_PKEY_PARAM_FFC_G, g);
OSSL_PARAM* params = OSSL_PARAM_BLD_to_param(param_build};
/* DH_new() */
EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new_from_name(nullptr, "DH", nullptr);
EVP_PKEY_keygen_init(ctx);
/* DH_generate_key */
EVP_PKEY* dh_key_pair = NULL;
EVP_PKEY_generate(ctx, &dh_key_pair, …Run Code Online (Sandbox Code Playgroud)