Skip to content

Commit e0be977

Browse files
committed
Leverage wc constructors for ED*
1 parent 86c56de commit e0be977

3 files changed

Lines changed: 69 additions & 6 deletions

File tree

src/pk.c

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5516,6 +5516,9 @@ ed25519_key* wolfSSL_ED25519_new(void* heap, int devId)
55165516

55175517
WOLFSSL_ENTER("wolfSSL_ED25519_new");
55185518

5519+
#ifndef WC_NO_CONSTRUCTORS
5520+
key = wc_ed25519_new(heap, devId, NULL);
5521+
#else
55195522
key = (ed25519_key*)XMALLOC(sizeof(ed25519_key), heap,
55205523
DYNAMIC_TYPE_ED25519);
55215524
if (key == NULL) {
@@ -5526,6 +5529,7 @@ ed25519_key* wolfSSL_ED25519_new(void* heap, int devId)
55265529
XFREE(key, heap, DYNAMIC_TYPE_ED25519);
55275530
key = NULL;
55285531
}
5532+
#endif
55295533

55305534
return key;
55315535
}
@@ -5537,10 +5541,16 @@ ed25519_key* wolfSSL_ED25519_new(void* heap, int devId)
55375541
void wolfSSL_ED25519_free(ed25519_key* key)
55385542
{
55395543
if (key != NULL) {
5540-
void* heap = key->heap;
55415544
WOLFSSL_ENTER("wolfSSL_ED25519_free");
5542-
wc_ed25519_free(key);
5543-
XFREE(key, heap, DYNAMIC_TYPE_ED25519);
5545+
#ifndef WC_NO_CONSTRUCTORS
5546+
wc_ed25519_delete(key, NULL);
5547+
#else
5548+
{
5549+
void* heap = key->heap;
5550+
wc_ed25519_free(key);
5551+
XFREE(key, heap, DYNAMIC_TYPE_ED25519);
5552+
}
5553+
#endif
55445554
}
55455555
}
55465556
#endif /* (OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL) && HAVE_ED25519 */
@@ -6013,6 +6023,10 @@ ed448_key* wolfSSL_ED448_new(void* heap, int devId)
60136023

60146024
WOLFSSL_ENTER("wolfSSL_ED448_new");
60156025

6026+
#if !defined(WC_NO_CONSTRUCTORS) && \
6027+
(!defined(HAVE_FIPS) || FIPS_VERSION_GE(7, 0))
6028+
key = wc_ed448_new(heap, devId, NULL);
6029+
#else
60166030
key = (ed448_key*)XMALLOC(sizeof(ed448_key), heap, DYNAMIC_TYPE_ED448);
60176031
if (key == NULL) {
60186032
WOLFSSL_ERROR_MSG("wolfSSL_ED448_new malloc failure");
@@ -6022,6 +6036,7 @@ ed448_key* wolfSSL_ED448_new(void* heap, int devId)
60226036
XFREE(key, heap, DYNAMIC_TYPE_ED448);
60236037
key = NULL;
60246038
}
6039+
#endif
60256040

60266041
return key;
60276042
}
@@ -6033,10 +6048,17 @@ ed448_key* wolfSSL_ED448_new(void* heap, int devId)
60336048
void wolfSSL_ED448_free(ed448_key* key)
60346049
{
60356050
if (key != NULL) {
6036-
void* heap = key->heap;
60376051
WOLFSSL_ENTER("wolfSSL_ED448_free");
6038-
wc_ed448_free(key);
6039-
XFREE(key, heap, DYNAMIC_TYPE_ED448);
6052+
#if !defined(WC_NO_CONSTRUCTORS) && \
6053+
(!defined(HAVE_FIPS) || FIPS_VERSION_GE(7, 0))
6054+
wc_ed448_delete(key, NULL);
6055+
#else
6056+
{
6057+
void* heap = key->heap;
6058+
wc_ed448_free(key);
6059+
XFREE(key, heap, DYNAMIC_TYPE_ED448);
6060+
}
6061+
#endif
60406062
}
60416063
}
60426064
#endif /* (OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL) && HAVE_ED448 */

wolfcrypt/src/ed448.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -959,6 +959,41 @@ void wc_ed448_free(ed448_key* key)
959959
}
960960
}
961961

962+
#ifndef WC_NO_CONSTRUCTORS
963+
ed448_key* wc_ed448_new(void* heap, int devId, int *result_code)
964+
{
965+
int ret;
966+
ed448_key* key = (ed448_key*)XMALLOC(sizeof(ed448_key), heap,
967+
DYNAMIC_TYPE_ED448);
968+
if (key == NULL) {
969+
ret = MEMORY_E;
970+
}
971+
else {
972+
ret = wc_ed448_init_ex(key, heap, devId);
973+
if (ret != 0) {
974+
XFREE(key, heap, DYNAMIC_TYPE_ED448);
975+
key = NULL;
976+
}
977+
}
978+
979+
if (result_code != NULL)
980+
*result_code = ret;
981+
982+
return key;
983+
}
984+
985+
int wc_ed448_delete(ed448_key* key, ed448_key** key_p) {
986+
void* heap;
987+
if (key == NULL)
988+
return BAD_FUNC_ARG;
989+
heap = key->heap;
990+
wc_ed448_free(key);
991+
XFREE(key, heap, DYNAMIC_TYPE_ED448);
992+
if (key_p != NULL)
993+
*key_p = NULL;
994+
return 0;
995+
}
996+
#endif /* !WC_NO_CONSTRUCTORS */
962997

963998
#ifdef HAVE_ED448_KEY_EXPORT
964999

wolfssl/wolfcrypt/ed448.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,12 @@ WOLFSSL_API
163163
int wc_ed448_init(ed448_key* key);
164164
WOLFSSL_API
165165
void wc_ed448_free(ed448_key* key);
166+
#ifndef WC_NO_CONSTRUCTORS
167+
WOLFSSL_API
168+
ed448_key* wc_ed448_new(void* heap, int devId, int *result_code);
169+
WOLFSSL_API
170+
int wc_ed448_delete(ed448_key* key, ed448_key** key_p);
171+
#endif
166172

167173
#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)
168174
WOLFSSL_API

0 commit comments

Comments
 (0)