I am doing the following, but the EVP_PKEY->pkey->rsa is null. Am I misusing the API or missing a step? (error checking removed) EVP_PKEY *rsa_pub_key = NULL; EVP_PKEY_CTX *ctx = NULL; OSSL_PARAM_BLD *param_bld = NULL; OSSL_PARAM *params = NULL; BIGNUM * n = NULL; BIGNUM * e = NULL; [these bignums are initialized using bin2bn] param_bld = OSSL_PARAM_BLD_new(); irc = OSSL_PARAM_BLD_push_BN(param_bld, "n", n); irc = OSSL_PARAM_BLD_push_BN(param_bld, "e", e); params = OSSL_PARAM_BLD_to_param(param_bld); (do I perhaps need an 'end'? ctx = EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL); irc = EVP_PKEY_fromdata_init(ctx); irc = EVP_PKEY_fromdata(ctx, (EVP_PKEY **)rsa_pub_key, /* freed by caller */ EVP_PKEY_PUBLIC_KEY, params); Probing rsa_pub_key here in the debugger. type = 6 references = 1 rsa = 0 (probably NULL)