summaryrefslogtreecommitdiffstats
path: root/crypto/ec
diff options
context:
space:
mode:
authorOliver Mihatsch <oliver.mihatsch@virtual-solution.com>2023-02-02 12:15:14 +0100
committerTodd Short <todd.short@me.com>2023-02-08 10:27:07 -0500
commita8aad913ecc632405096b2b61942b2c782cc74f4 (patch)
tree50d837c6a5166070c7012e619c0eece502f92231 /crypto/ec
parentee17148792943f7f6455213a3b9a86a4cc082c9a (diff)
New function EC_GROUP_to_params to convert an EC_GROUP to an array of OSSL_PARAM.
Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Todd Short <todd.short@me.com> (Merged from https://github.com/openssl/openssl/pull/20205)
Diffstat (limited to 'crypto/ec')
-rw-r--r--crypto/ec/ec_lib.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/crypto/ec/ec_lib.c b/crypto/ec/ec_lib.c
index 2e7139cbdd..9e262b427d 100644
--- a/crypto/ec/ec_lib.c
+++ b/crypto/ec/ec_lib.c
@@ -19,6 +19,7 @@
#include <openssl/core_names.h>
#include <openssl/err.h>
#include <openssl/opensslv.h>
+#include <openssl/param_build.h>
#include "crypto/ec.h"
#include "internal/nelem.h"
#include "ec_local.h"
@@ -1748,3 +1749,38 @@ EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[],
return group;
#endif /* FIPS_MODULE */
}
+
+OSSL_PARAM *EC_GROUP_to_params(const EC_GROUP *group, OSSL_LIB_CTX *libctx,
+ const char *propq, BN_CTX *bnctx)
+{
+ OSSL_PARAM_BLD *tmpl = NULL;
+ BN_CTX *new_bnctx = NULL;
+ unsigned char *gen_buf = NULL;
+ OSSL_PARAM *params = NULL;
+
+ if (group == NULL)
+ goto err;
+
+ tmpl = OSSL_PARAM_BLD_new();
+ if (tmpl == NULL)
+ goto err;
+
+ if (bnctx == NULL)
+ bnctx = new_bnctx = BN_CTX_new_ex(libctx);
+ if (bnctx == NULL)
+ goto err;
+ BN_CTX_start(bnctx);
+
+ if (!ossl_ec_group_todata(
+ group, tmpl, NULL, libctx, propq, bnctx, &gen_buf))
+ goto err;
+
+ params = OSSL_PARAM_BLD_to_param(tmpl);
+
+ err:
+ OSSL_PARAM_BLD_free(tmpl);
+ OPENSSL_free(gen_buf);
+ BN_CTX_end(bnctx);
+ BN_CTX_free(new_bnctx);
+ return params;
+}