@@ -65589,14 +65589,21 @@ static int myCryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
6558965589 {
6559065590 ecc_key* eccObj = (ecc_key*)info->setkey.obj;
6559165591 ecc_key* eccTmp = (ecc_key*)info->setkey.key;
65592- byte buf[ECC_BUFSIZE];
65593- word32 bufSz = sizeof(buf);
65592+ word32 bufSz = ECC_BUFSIZE;
6559465593 int curveId;
65594+ WC_DECLARE_VAR(buf, byte, ECC_BUFSIZE, NULL);
65595+ WC_ALLOC_VAR(buf, byte, ECC_BUFSIZE, NULL);
65596+ if (!WC_VAR_OK(buf)) {
65597+ ret = MEMORY_E;
65598+ break;
65599+ }
6559565600
6559665601 /* Export public key from temp to X9.63 format */
6559765602 ret = wc_ecc_export_x963(eccTmp, buf, &bufSz);
65598- if (ret != 0)
65603+ if (ret != 0) {
65604+ WC_FREE_VAR(buf, NULL);
6559965605 break;
65606+ }
6560065607
6560165608 curveId = wc_ecc_get_curve_id(eccTmp->idx);
6560265609
@@ -65605,31 +65612,47 @@ static int myCryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
6560565612 ret = wc_ecc_import_x963_ex2(buf, bufSz, eccObj,
6560665613 curveId, 0);
6560765614 eccObj->devId = devIdArg;
65615+
65616+ WC_FREE_VAR(buf, NULL);
6560865617 break;
6560965618 }
6561065619 case WC_SETKEY_ECC_PRIV:
6561165620 {
6561265621 ecc_key* eccObj = (ecc_key*)info->setkey.obj;
6561365622 ecc_key* eccTmp = (ecc_key*)info->setkey.key;
65614- byte pubBuf[ECC_BUFSIZE];
65615- byte privBuf[MAX_ECC_BYTES];
65616- word32 pubSz = sizeof(pubBuf);
65617- word32 privSz = sizeof(privBuf);
65623+ word32 pubSz = ECC_BUFSIZE;
65624+ word32 privSz = MAX_ECC_BYTES;
6561865625 byte* pubPtr = NULL;
6561965626 int curveId;
65627+ WC_DECLARE_VAR(pubBuf, byte, ECC_BUFSIZE, NULL);
65628+ WC_DECLARE_VAR(privBuf, byte, MAX_ECC_BYTES, NULL);
65629+ WC_ALLOC_VAR(pubBuf, byte, ECC_BUFSIZE, NULL);
65630+ WC_ALLOC_VAR(privBuf, byte, MAX_ECC_BYTES, NULL);
65631+ if (!WC_VAR_OK(pubBuf) || !WC_VAR_OK(privBuf)) {
65632+ WC_FREE_VAR(pubBuf, NULL);
65633+ WC_FREE_VAR(privBuf, NULL);
65634+ ret = MEMORY_E;
65635+ break;
65636+ }
6562065637
6562165638 /* Export public key from temp (if available) */
6562265639 if (eccTmp->type != ECC_PRIVATEKEY_ONLY) {
6562365640 ret = wc_ecc_export_x963(eccTmp, pubBuf, &pubSz);
65624- if (ret != 0)
65641+ if (ret != 0) {
65642+ WC_FREE_VAR(pubBuf, NULL);
65643+ WC_FREE_VAR(privBuf, NULL);
6562565644 break;
65645+ }
6562665646 pubPtr = pubBuf;
6562765647 }
6562865648
6562965649 ret = wc_ecc_export_private_only(eccTmp, privBuf,
6563065650 &privSz);
65631- if (ret != 0)
65651+ if (ret != 0) {
65652+ WC_FREE_VAR(pubBuf, NULL);
65653+ WC_FREE_VAR(privBuf, NULL);
6563265654 break;
65655+ }
6563365656
6563465657 curveId = wc_ecc_get_curve_id(eccTmp->idx);
6563565658
@@ -65639,6 +65662,9 @@ static int myCryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
6563965662 pubPtr, (pubPtr != NULL) ? pubSz : 0,
6564065663 eccObj, curveId);
6564165664 eccObj->devId = devIdArg;
65665+
65666+ WC_FREE_VAR(pubBuf, NULL);
65667+ WC_FREE_VAR(privBuf, NULL);
6564265668 break;
6564365669 }
6564465670#endif /* HAVE_ECC && HAVE_ECC_KEY_EXPORT && HAVE_ECC_KEY_IMPORT */
@@ -65713,26 +65739,40 @@ static int myCryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
6571365739 {
6571465740 ecc_key* src = (ecc_key*)info->export_key.obj;
6571565741 ecc_key* dst = (ecc_key*)info->export_key.out;
65716- byte pubBuf[ECC_BUFSIZE];
65717- byte privBuf[MAX_ECC_BYTES];
65718- word32 pubSz = sizeof(pubBuf);
65719- word32 privSz = sizeof(privBuf);
65742+ word32 pubSz = ECC_BUFSIZE;
65743+ word32 privSz = MAX_ECC_BYTES;
6572065744 byte* pubPtr = NULL;
6572165745 int curveId;
65746+ WC_DECLARE_VAR(pubBuf, byte, ECC_BUFSIZE, NULL);
65747+ WC_DECLARE_VAR(privBuf, byte, MAX_ECC_BYTES, NULL);
65748+ WC_ALLOC_VAR(pubBuf, byte, ECC_BUFSIZE, NULL);
65749+ WC_ALLOC_VAR(privBuf, byte, MAX_ECC_BYTES, NULL);
65750+ if (!WC_VAR_OK(pubBuf) || !WC_VAR_OK(privBuf)) {
65751+ WC_FREE_VAR(pubBuf, NULL);
65752+ WC_FREE_VAR(privBuf, NULL);
65753+ ret = MEMORY_E;
65754+ break;
65755+ }
6572265756
6572365757 /* Export public key if available */
6572465758 if (src->type != ECC_PRIVATEKEY_ONLY) {
6572565759 ret = wc_ecc_export_x963(src, pubBuf, &pubSz);
65726- if (ret != 0)
65760+ if (ret != 0) {
65761+ WC_FREE_VAR(pubBuf, NULL);
65762+ WC_FREE_VAR(privBuf, NULL);
6572765763 break;
65764+ }
6572865765 pubPtr = pubBuf;
6572965766 }
6573065767
6573165768 /* Export private key if available */
6573265769 if (src->type != ECC_PUBLICKEY) {
6573365770 ret = wc_ecc_export_private_only(src, privBuf, &privSz);
65734- if (ret != 0)
65771+ if (ret != 0) {
65772+ WC_FREE_VAR(pubBuf, NULL);
65773+ WC_FREE_VAR(privBuf, NULL);
6573565774 break;
65775+ }
6573665776
6573765777 curveId = wc_ecc_get_curve_id(src->idx);
6573865778 ret = wc_ecc_import_private_key_ex(privBuf, privSz,
@@ -65745,6 +65785,8 @@ static int myCryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
6574565785 ret = wc_ecc_import_x963_ex2(pubBuf, pubSz, dst,
6574665786 curveId, 0);
6574765787 }
65788+ WC_FREE_VAR(pubBuf, NULL);
65789+ WC_FREE_VAR(privBuf, NULL);
6574865790 break;
6574965791 }
6575065792#endif /* HAVE_ECC && HAVE_ECC_KEY_EXPORT && HAVE_ECC_KEY_IMPORT */
0 commit comments