|
@@ -0,0 +1,82 @@
|
|
|
+From 567b1c8ea731fe42650d43ede50a105b772dc7aa Mon Sep 17 00:00:00 2001
|
|
|
+From: Alistair Francis <alistair.francis@wdc.com>
|
|
|
+Date: Fri, 11 Aug 2023 16:24:23 -0400
|
|
|
+Subject: [PATCH] cryptlib_openssl: ec: Remove internal OpenSSL crypto include
|
|
|
+
|
|
|
+The OpenSSL source code describes the crypto include as:
|
|
|
+"Internal EC functions for other submodules: not for application use"
|
|
|
+ - https://github.com/openssl/openssl/blob/master/include/crypto/ec.h
|
|
|
+
|
|
|
+Using the internal APIS makes it difficult to use libspdm as a library
|
|
|
+with other packages. So let's remove the uses of the internal API and
|
|
|
+instead use the public API.
|
|
|
+
|
|
|
+Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
|
|
|
+Upstream: https://github.com/DMTF/libspdm/commit/567b1c8ea731fe42650d43ede50a105b772dc7aa
|
|
|
+---
|
|
|
+ os_stub/cryptlib_openssl/pk/ec.c | 26 ++++++++++++++++++++++----
|
|
|
+ 1 file changed, 22 insertions(+), 4 deletions(-)
|
|
|
+
|
|
|
+diff --git a/os_stub/cryptlib_openssl/pk/ec.c b/os_stub/cryptlib_openssl/pk/ec.c
|
|
|
+index 7dd9a8b0f8..09df0b9a25 100644
|
|
|
+--- a/os_stub/cryptlib_openssl/pk/ec.c
|
|
|
++++ b/os_stub/cryptlib_openssl/pk/ec.c
|
|
|
+@@ -15,7 +15,6 @@
|
|
|
+ #include <openssl/bn.h>
|
|
|
+ #include <openssl/ec.h>
|
|
|
+ #include <openssl/objects.h>
|
|
|
+-#include <crypto/ec.h>
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Allocates and Initializes one Elliptic Curve context for subsequent use
|
|
|
+@@ -854,7 +853,7 @@ static int libspdm_ecdsa_sign_setup_random(EC_KEY *eckey, BIGNUM **kinvp, BIGNUM
|
|
|
+ uint8_t* random, size_t random_len)
|
|
|
+ {
|
|
|
+ BN_CTX *ctx = NULL;
|
|
|
+- BIGNUM *k = NULL, *r = NULL, *X = NULL;
|
|
|
++ BIGNUM *k = NULL, *r = NULL, *X = NULL, *e = NULL;
|
|
|
+ const BIGNUM *order;
|
|
|
+ EC_POINT *tmp_point = NULL;
|
|
|
+ const EC_GROUP *group;
|
|
|
+@@ -901,6 +900,11 @@ static int libspdm_ecdsa_sign_setup_random(EC_KEY *eckey, BIGNUM **kinvp, BIGNUM
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
+
|
|
|
++ e = BN_CTX_get(ctx);
|
|
|
++ if (e == NULL) {
|
|
|
++ return 0;
|
|
|
++ }
|
|
|
++
|
|
|
+ /*random number*/
|
|
|
+ k = BN_bin2bn(random, random_len, NULL);
|
|
|
+
|
|
|
+@@ -915,10 +919,24 @@ static int libspdm_ecdsa_sign_setup_random(EC_KEY *eckey, BIGNUM **kinvp, BIGNUM
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
+
|
|
|
+- /* compute the inverse of k */
|
|
|
+- if (!ossl_ec_group_do_inverse_ord(group, k, k, ctx)) {
|
|
|
++ /*
|
|
|
++ * compute the inverse of k
|
|
|
++ * Based on ossl_ec_group_do_inverse_ord() from OpenSSL
|
|
|
++ */
|
|
|
++ BN_CTX_start(ctx);
|
|
|
++ if (!BN_set_word(e, 2)) {
|
|
|
++ BN_CTX_end(ctx);
|
|
|
++ goto err;
|
|
|
++ }
|
|
|
++ if (!BN_sub(e, order, e)) {
|
|
|
++ BN_CTX_end(ctx);
|
|
|
++ goto err;
|
|
|
++ }
|
|
|
++ if (!BN_mod_exp_mont(k, k, e, order, ctx, EC_GROUP_get_mont_data(group))) {
|
|
|
++ BN_CTX_end(ctx);
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
++ BN_CTX_end(ctx);
|
|
|
+
|
|
|
+ /* clear old values if necessary */
|
|
|
+ BN_clear_free(*rp);
|
|
|
+--
|
|
|
+2.40.1
|
|
|
+
|