@@ -18602,55 +18602,75 @@ static int SetStaticEphemeralKey(WOLFSSL_CTX* ctx,
1860218602 #ifdef HAVE_ECC
1860318603 if (keyAlgo == WC_PK_TYPE_NONE) {
1860418604 word32 idx = 0;
18605- ecc_key eccKey;
18606- ret = wc_ecc_init_ex(&eccKey, heap, INVALID_DEVID);
18605+ WC_DECLARE_VAR(eccKey, ecc_key, 1, heap);
18606+ WC_ALLOC_VAR_EX(eccKey, ecc_key, 1, heap, DYNAMIC_TYPE_ECC,
18607+ ret = MEMORY_E);
18608+ if (ret == 0)
18609+ ret = wc_ecc_init_ex(eccKey, heap, INVALID_DEVID);
1860718610 if (ret == 0) {
18608- ret = wc_EccPrivateKeyDecode(keyBuf, &idx, & eccKey, keySz);
18611+ ret = wc_EccPrivateKeyDecode(keyBuf, &idx, eccKey, keySz);
1860918612 if (ret == 0)
1861018613 keyAlgo = WC_PK_TYPE_ECDH;
18611- wc_ecc_free(&eccKey);
18614+ wc_ecc_free(eccKey);
18615+ ret = 0; /* clear error to enable key-type detect cascade */
1861218616 }
18617+ WC_FREE_VAR_EX(eccKey, heap, DYNAMIC_TYPE_ECC);
1861318618 }
1861418619 #endif
1861518620 #if !defined(NO_DH) && defined(WOLFSSL_DH_EXTRA)
1861618621 if (keyAlgo == WC_PK_TYPE_NONE) {
1861718622 word32 idx = 0;
18618- DhKey dhKey;
18619- ret = wc_InitDhKey_ex(&dhKey, heap, INVALID_DEVID);
18623+ WC_DECLARE_VAR(dhKey, DhKey, 1, heap);
18624+ WC_ALLOC_VAR_EX(dhKey, DhKey, 1, heap, DYNAMIC_TYPE_DH,
18625+ ret = MEMORY_E);
18626+ if (ret == 0)
18627+ ret = wc_InitDhKey_ex(dhKey, heap, INVALID_DEVID);
1862018628 if (ret == 0) {
18621- ret = wc_DhKeyDecode(keyBuf, &idx, & dhKey, keySz);
18629+ ret = wc_DhKeyDecode(keyBuf, &idx, dhKey, keySz);
1862218630 if (ret == 0)
1862318631 keyAlgo = WC_PK_TYPE_DH;
18624- wc_FreeDhKey(&dhKey);
18632+ wc_FreeDhKey(dhKey);
18633+ ret = 0; /* clear error to enable key-type detect cascade */
1862518634 }
18635+ WC_FREE_VAR_EX(dhKey, heap, DYNAMIC_TYPE_DH);
1862618636 }
1862718637 #endif
1862818638 #ifdef HAVE_CURVE25519
1862918639 if (keyAlgo == WC_PK_TYPE_NONE) {
1863018640 word32 idx = 0;
18631- curve25519_key x25519Key;
18632- ret = wc_curve25519_init_ex(&x25519Key, heap, INVALID_DEVID);
18641+ WC_DECLARE_VAR(x25519Key, curve25519_key, 1, heap);
18642+ WC_ALLOC_VAR_EX(x25519Key, curve25519_key, 1, heap,
18643+ DYNAMIC_TYPE_CURVE25519, ret = MEMORY_E);
18644+ if (ret == 0)
18645+ ret = wc_curve25519_init_ex(x25519Key, heap, INVALID_DEVID);
1863318646 if (ret == 0) {
1863418647 ret = wc_Curve25519PrivateKeyDecode(keyBuf, &idx,
18635- & x25519Key, keySz);
18648+ x25519Key, keySz);
1863618649 if (ret == 0)
1863718650 keyAlgo = WC_PK_TYPE_CURVE25519;
18638- wc_curve25519_free(&x25519Key);
18651+ wc_curve25519_free(x25519Key);
18652+ ret = 0; /* clear error to enable key-type detect cascade */
1863918653 }
18654+ WC_FREE_VAR_EX(x25519Key, heap, DYNAMIC_TYPE_CURVE25519);
1864018655 }
1864118656 #endif
1864218657 #ifdef HAVE_CURVE448
1864318658 if (keyAlgo == WC_PK_TYPE_NONE) {
1864418659 word32 idx = 0;
18645- curve448_key x448Key;
18646- ret = wc_curve448_init(&x448Key);
18660+ WC_DECLARE_VAR(x448Key, curve448_key, 1, heap);
18661+ WC_ALLOC_VAR_EX(x448Key, curve448_key, 1, heap,
18662+ DYNAMIC_TYPE_CURVE448, ret = MEMORY_E);
18663+ if (ret == 0)
18664+ ret = wc_curve448_init(x448Key);
1864718665 if (ret == 0) {
18648- ret = wc_Curve448PrivateKeyDecode(keyBuf, &idx, & x448Key,
18666+ ret = wc_Curve448PrivateKeyDecode(keyBuf, &idx, x448Key,
1864918667 keySz);
1865018668 if (ret == 0)
1865118669 keyAlgo = WC_PK_TYPE_CURVE448;
18652- wc_curve448_free(&x448Key);
18670+ wc_curve448_free(x448Key);
18671+ ret = 0; /* clear error to enable key-type detect cascade */
1865318672 }
18673+ WC_FREE_VAR_EX(x448Key, heap, DYNAMIC_TYPE_CURVE448);
1865418674 }
1865518675 #endif
1865618676
0 commit comments