Signed-off-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
83 lines
2.7 KiB
Diff
83 lines
2.7 KiB
Diff
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
|
|
|