public static void EVP_PKEY_paramgen_ECCurve(int curveNid, out EVP_PKEY curveParameters) { const EVP_PKEY_Ctrl_OP op = EVP_PKEY_Ctrl_OP.EVP_PKEY_OP_PARAMGEN | EVP_PKEY_Ctrl_OP.EVP_PKEY_OP_KEYGEN; const EVP_PKEY_Ctrl_Command cmd = EVP_PKEY_Ctrl_Command.EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID; var ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_type.EVP_PKEY_EC, IntPtr.Zero); try { var result = EVP_PKEY_paramgen_init(ctx); ThrowOnErrorReturnCode(result); result = EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_type.EVP_PKEY_EC, op, cmd, curveNid, IntPtr.Zero); ThrowOnErrorReturnCode(result); result = EVP_PKEY_paramgen(ctx, out curveParameters); } finally { ctx.Free(); } }
private static extern int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX ctx, EVP_PKEY_type keyType, EVP_PKEY_Ctrl_OP optype, EVP_PKEY_Ctrl_Command cmd, int p1, IntPtr p2);
internal static extern unsafe int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX ctx, EVP_PKEY_type keyType, EVP_PKEY_Ctrl_OP optype, EVP_PKEY_Ctrl_Command cmd, int p1, void *p2);