[PATCH 19/21] dpp: Move debug print of EC key to crypto.h

Cedric Izoard cedric.izoard at ceva-dsp.com
Mon Jun 28 09:25:36 PDT 2021


Move the crypto lib specific print of a EC key in dpp_debug_print_key
to crypto.h.

Signed-off-by: Cedric Izoard <cedric.izoard at ceva-dsp.com>
---
 src/common/dpp.h            |  2 --
 src/common/dpp_crypto.c     | 67 +------------------------------------
 src/common/dpp_i.h          |  2 --
 src/crypto/crypto.h         |  9 +++++
 src/crypto/crypto_openssl.c | 27 +++++++++++++++
 5 files changed, 37 insertions(+), 70 deletions(-)

diff --git a/src/common/dpp.h b/src/common/dpp.h
index 40e950a96..f353e5c3e 100644
--- a/src/common/dpp.h
+++ b/src/common/dpp.h
@@ -11,8 +11,6 @@
 #define DPP_H
 
 #ifdef CONFIG_DPP
-#include <openssl/x509.h>
-
 #include "utils/list.h"
 #include "common/wpa_common.h"
 #include "crypto/sha256.h"
diff --git a/src/common/dpp_crypto.c b/src/common/dpp_crypto.c
index e1510e72f..4b387f6b0 100644
--- a/src/common/dpp_crypto.c
+++ b/src/common/dpp_crypto.c
@@ -78,75 +78,11 @@ const struct dpp_curve_params * dpp_get_curve_ike_group(u16 group)
 }
 
 
-void dpp_debug_print_point(const char *title, const EC_GROUP *group,
-			   const EC_POINT *point)
-{
-	BIGNUM *x, *y;
-	BN_CTX *ctx;
-	char *x_str = NULL, *y_str = NULL;
-
-	if (!wpa_debug_show_keys)
-		return;
-
-	ctx = BN_CTX_new();
-	x = BN_new();
-	y = BN_new();
-	if (!ctx || !x || !y ||
-	    EC_POINT_get_affine_coordinates_GFp(group, point, x, y, ctx) != 1)
-		goto fail;
-
-	x_str = BN_bn2hex(x);
-	y_str = BN_bn2hex(y);
-	if (!x_str || !y_str)
-		goto fail;
-
-	wpa_printf(MSG_DEBUG, "%s (%s,%s)", title, x_str, y_str);
-
-fail:
-	OPENSSL_free(x_str);
-	OPENSSL_free(y_str);
-	BN_free(x);
-	BN_free(y);
-	BN_CTX_free(ctx);
-}
-
-
 void dpp_debug_print_key(const char *title, struct crypto_ec_key *key)
 {
-	EC_KEY *eckey;
-	BIO *out;
-	size_t rlen;
-	char *txt;
-	int res;
 	struct wpabuf *der = NULL;
-	const EC_GROUP *group;
-	const EC_POINT *point;
-
-	out = BIO_new(BIO_s_mem());
-	if (!out)
-		return;
-
-	EVP_PKEY_print_private(out, (EVP_PKEY *)key, 0, NULL);
-	rlen = BIO_ctrl_pending(out);
-	txt = os_malloc(rlen + 1);
-	if (txt) {
-		res = BIO_read(out, txt, rlen);
-		if (res > 0) {
-			txt[res] = '\0';
-			wpa_printf(MSG_DEBUG, "%s: %s", title, txt);
-		}
-		os_free(txt);
-	}
-	BIO_free(out);
-
-	eckey = EVP_PKEY_get1_EC_KEY((EVP_PKEY *)key);
-	if (!eckey)
-		return;
 
-	group = EC_KEY_get0_group(eckey);
-	point = EC_KEY_get0_public_key(eckey);
-	if (group && point)
-		dpp_debug_print_point(title, group, point);
+	crypto_ec_key_debug_print(key, title);
 
 	der = crypto_ec_key_get_ecprivate_key(key, true);
 	if (der) {
@@ -158,7 +94,6 @@ void dpp_debug_print_key(const char *title, struct crypto_ec_key *key)
 		}
 	}
 
-	EC_KEY_free(eckey);
 	wpabuf_clear_free(der);
 }
 
diff --git a/src/common/dpp_i.h b/src/common/dpp_i.h
index 26bcad0b9..1b71efc2e 100644
--- a/src/common/dpp_i.h
+++ b/src/common/dpp_i.h
@@ -83,8 +83,6 @@ int dpp_hmac_vector(size_t hash_len, const u8 *key, size_t key_len,
 		    size_t num_elem, const u8 *addr[], const size_t *len,
 		    u8 *mac);
 int dpp_ecdh(struct crypto_ec_key *own, struct crypto_ec_key *peer, u8 *secret, size_t *secret_len);
-void dpp_debug_print_point(const char *title, const EC_GROUP *group,
-			   const EC_POINT *point);
 void dpp_debug_print_key(const char *title, struct crypto_ec_key *key);
 int dpp_pbkdf2(size_t hash_len, const u8 *password, size_t password_len,
 	       const u8 *salt, size_t salt_len, unsigned int iterations,
diff --git a/src/crypto/crypto.h b/src/crypto/crypto.h
index d76ca9cd4..78e7045ca 100644
--- a/src/crypto/crypto.h
+++ b/src/crypto/crypto.h
@@ -1160,4 +1160,13 @@ int crypto_ec_key_group(struct crypto_ec_key *key);
  */
 int crypto_ec_key_cmp(struct crypto_ec_key *key1, struct crypto_ec_key *key2);
 
+/**
+ * crypto_ec_key_debug_print - Dump EC Key
+ * @key:  EC key from crypto_ec_key_parse/set_pub/priv() or crypto_ec_key_gen()
+ * @title: Name of the EC point in the trace
+ */
+void crypto_ec_key_debug_print(const struct crypto_ec_key *key,
+			       const char *title);
+
+
 #endif /* CRYPTO_H */
diff --git a/src/crypto/crypto_openssl.c b/src/crypto/crypto_openssl.c
index 282df1089..26705ff50 100644
--- a/src/crypto/crypto_openssl.c
+++ b/src/crypto/crypto_openssl.c
@@ -2802,4 +2802,31 @@ int crypto_ec_key_cmp(struct crypto_ec_key *key1, struct crypto_ec_key *key2)
 		return -1;
 	return 0;
 }
+
+
+void crypto_ec_key_debug_print(const struct crypto_ec_key *key,
+			       const char *title)
+{
+	BIO *out;
+	size_t rlen;
+	char *txt;
+
+	out = BIO_new(BIO_s_mem());
+	if (!out)
+		return;
+
+	EVP_PKEY_print_private(out, (EVP_PKEY *)key, 0, NULL);
+	rlen = BIO_ctrl_pending(out);
+	txt = os_malloc(rlen + 1);
+	if (txt) {
+		int res = BIO_read(out, txt, rlen);
+		if (res > 0) {
+			txt[res] = '\0';
+			wpa_printf(MSG_DEBUG, "%s: %s", title, txt);
+		}
+		os_free(txt);
+	}
+	BIO_free(out);
+}
+
 #endif /* CONFIG_ECC */
-- 
2.17.0




More information about the Hostap mailing list