@@ -8396,17 +8396,24 @@ static int TLSX_KeyShare_GenPqcHybridKeyClient(WOLFSSL *ssl, KeyShareEntry* kse)
83968396 if (ret == 0) {
83978397 ecc_kse = (KeyShareEntry*)XMALLOC(sizeof(*ecc_kse), ssl->heap,
83988398 DYNAMIC_TYPE_TLSX);
8399- pqc_kse = (KeyShareEntry*)XMALLOC(sizeof(*pqc_kse), ssl->heap,
8400- DYNAMIC_TYPE_TLSX);
8401- if (ecc_kse == NULL || pqc_kse == NULL) {
8399+ if (ecc_kse == NULL) {
84028400 WOLFSSL_MSG("kse memory allocation failure");
84038401 ret = MEMORY_ERROR;
84048402 }
8403+ else {
8404+ XMEMSET(ecc_kse, 0, sizeof(*ecc_kse));
8405+ }
84058406 }
8406-
84078407 if (ret == 0) {
8408- XMEMSET(ecc_kse, 0, sizeof(*ecc_kse));
8409- XMEMSET(pqc_kse, 0, sizeof(*pqc_kse));
8408+ pqc_kse = (KeyShareEntry*)XMALLOC(sizeof(*pqc_kse), ssl->heap,
8409+ DYNAMIC_TYPE_TLSX);
8410+ if (pqc_kse == NULL) {
8411+ WOLFSSL_MSG("kse memory allocation failure");
8412+ ret = MEMORY_ERROR;
8413+ }
8414+ else {
8415+ XMEMSET(pqc_kse, 0, sizeof(*pqc_kse));
8416+ }
84108417 }
84118418
84128419 /* Generate ECC key share part */
@@ -8555,9 +8562,8 @@ static void TLSX_KeyShare_FreeAll(KeyShareEntry* list, void* heap)
85558562 }
85568563#ifdef WOLFSSL_HAVE_KYBER
85578564 else if (WOLFSSL_NAMED_GROUP_IS_PQC(current->group)) {
8558- #ifdef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ
85598565 wc_KyberKey_Free((KyberKey*)current->key);
8560- #else
8566+ #ifndef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ
85618567 if (current->privKey != NULL) {
85628568 ForceZero(current->privKey, current->privKeyLen);
85638569 }
@@ -9355,12 +9361,24 @@ static int TLSX_KeyShare_ProcessPqcHybridClient(WOLFSSL* ssl,
93559361 if (ret == 0) {
93569362 ecc_kse = (KeyShareEntry*)XMALLOC(sizeof(*ecc_kse), ssl->heap,
93579363 DYNAMIC_TYPE_TLSX);
9364+ if (ecc_kse == NULL) {
9365+ WOLFSSL_MSG("kse memory allocation failure");
9366+ ret = MEMORY_ERROR;
9367+ }
9368+ else {
9369+ XMEMSET(ecc_kse, 0, sizeof(*ecc_kse));
9370+ }
9371+ }
9372+ if (ret == 0) {
93589373 pqc_kse = (KeyShareEntry*)XMALLOC(sizeof(*pqc_kse), ssl->heap,
93599374 DYNAMIC_TYPE_TLSX);
9360- if (ecc_kse == NULL || pqc_kse == NULL) {
9375+ if (pqc_kse == NULL) {
93619376 WOLFSSL_MSG("kse memory allocation failure");
93629377 ret = MEMORY_ERROR;
93639378 }
9379+ else {
9380+ XMEMSET(pqc_kse, 0, sizeof(*pqc_kse));
9381+ }
93649382 }
93659383
93669384 /* The ciphertext and shared secret sizes of a KEM are fixed. Hence, we
@@ -9369,42 +9387,36 @@ static int TLSX_KeyShare_ProcessPqcHybridClient(WOLFSSL* ssl,
93699387 if (ret == 0) {
93709388 #ifndef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ
93719389 int type;
9372- KyberKey* kem;
9373- #endif
93749390
9375- XMEMSET(pqc_kse, 0, sizeof(*pqc_kse));
9376- pqc_kse->group = pqc_group;
9377- pqc_kse->privKeyLen = keyShareEntry->privKeyLen;
9378- #ifdef WOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ
9379- pqc_kse->key = keyShareEntry->privKey;
9380- #else
93819391 pqc_kse->privKey = keyShareEntry->privKey;
93829392
9383- /* Allocate a Kyber key to hold private key. */
9384- kem = (KyberKey*) XMALLOC(sizeof(KyberKey), ssl->heap,
9385- DYNAMIC_TYPE_PRIVATE_KEY);
9386- if (kem == NULL) {
9387- WOLFSSL_MSG("GenPqcKey memory error");
9388- ret = MEMORY_E;
9389- }
9390- if (ret == 0) {
9391- ret = kyber_id2type(pqc_group, &type);
9392- }
9393+ ret = kyber_id2type(pqc_group, &type);
93939394 if (ret != 0) {
93949395 WOLFSSL_MSG("Invalid Kyber algorithm specified.");
93959396 ret = BAD_FUNC_ARG;
93969397 }
93979398 if (ret == 0) {
9398- ret = wc_KyberKey_Init(type, kem, ssl->heap, ssl->devId);
9399- if (ret != 0) {
9400- WOLFSSL_MSG("Error creating Kyber KEM");
9399+ pqc_kse->key = XMALLOC(sizeof(KyberKey), ssl->heap,
9400+ DYNAMIC_TYPE_PRIVATE_KEY);
9401+ if (pqc_kse->key == NULL) {
9402+ WOLFSSL_MSG("GenPqcKey memory error");
9403+ ret = MEMORY_E;
94019404 }
94029405 }
94039406 if (ret == 0) {
9404- pqc_kse->key = kem;
9407+ ret = wc_KyberKey_Init(type, (KyberKey*)pqc_kse->key,
9408+ ssl->heap, ssl->devId);
9409+ if (ret != 0) {
9410+ WOLFSSL_MSG("Error creating Kyber KEM");
9411+ }
94059412 }
9413+ #else
9414+ pqc_kse->key = keyShareEntry->privKey;
94069415 #endif
94079416
9417+ pqc_kse->group = pqc_group;
9418+ pqc_kse->privKeyLen = keyShareEntry->privKeyLen;
9419+
94089420 if (ret == 0) {
94099421 ret = wc_KyberKey_SharedSecretSize((KyberKey*)pqc_kse->key,
94109422 &ssSzPqc);
@@ -9439,7 +9451,6 @@ static int TLSX_KeyShare_ProcessPqcHybridClient(WOLFSSL* ssl,
94399451 }
94409452
94419453 if (ret == 0) {
9442- XMEMSET(ecc_kse, 0, sizeof(*ecc_kse));
94439454 ecc_kse->group = ecc_group;
94449455 ecc_kse->keLen = keyShareEntry->keLen - ctSz;
94459456 ecc_kse->key = keyShareEntry->key;
0 commit comments