@@ -2951,11 +2951,15 @@ int wolfTPM2_DecodeRsaDer(const byte* der, word32 derSz,
29512951 rc = wc_RsaPublicKeyDecode (der , & idx , key , derSz );
29522952 }
29532953 if (rc == 0 ) {
2954- if (isPrivateKey )
2954+ if (isPrivateKey ) {
2955+ PRIVATE_KEY_UNLOCK ();
29552956 rc = wc_RsaExportKey (key , (byte * )& e , & eSz , n , & nSz , d , & dSz ,
29562957 p , & pSz , q , & qSz );
2957- else
2958+ PRIVATE_KEY_LOCK ();
2959+ }
2960+ else {
29582961 rc = wc_RsaFlattenPublicKey (key , (byte * )& e , & eSz , n , & nSz );
2962+ }
29592963 }
29602964 if (rc == 0 && nSz > sizeof (pub -> publicArea .unique .rsa .buffer ))
29612965 rc = BUFFER_E ;
@@ -3046,11 +3050,15 @@ int wolfTPM2_DecodeEccDer(const byte* der, word32 derSz, TPM2B_PUBLIC* pub,
30463050 if (rc == 0 ) {
30473051 curveId = TPM2_GetTpmCurve (key -> dp -> id );
30483052
3049- if (isPrivateKey )
3053+ if (isPrivateKey ) {
3054+ PRIVATE_KEY_UNLOCK ();
30503055 rc = wc_ecc_export_private_raw (key , qx , & qxSz , qy , & qySz ,
30513056 d , & dSz );
3052- else
3057+ PRIVATE_KEY_LOCK ();
3058+ }
3059+ else {
30533060 rc = wc_ecc_export_public_raw (key , qx , & qxSz , qy , & qySz );
3061+ }
30543062 }
30553063 if (rc == 0 && qxSz > sizeof (pub -> publicArea .unique .ecc .x .buffer ))
30563064 rc = BUFFER_E ;
@@ -3416,8 +3424,10 @@ int wolfTPM2_RsaPrivateKeyImportDer(WOLFTPM2_DEV* dev,
34163424 rc = wc_RsaPrivateKeyDecode (input , & idx , key , inSz );
34173425
34183426 if (rc == 0 ) {
3427+ PRIVATE_KEY_UNLOCK ();
34193428 rc = wc_RsaExportKey (key , (byte * )& e , & eSz , n , & nSz , d , & dSz , p , & pSz , q ,
34203429 & qSz );
3430+ PRIVATE_KEY_LOCK ();
34213431 }
34223432
34233433 if (rc == 0 ) {
@@ -3746,17 +3756,22 @@ int wolfTPM2_CreateEccKeyBlob(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* parentKey,
37463756 if (rc == 0 )
37473757 rc = wc_export_int (point -> y , qy , & qySz , keySz ,
37483758 WC_TYPE_UNSIGNED_BIN );
3749- if (rc == 0 )
3759+ if (rc == 0 ) {
3760+ PRIVATE_KEY_UNLOCK ();
37503761 rc = wc_ecc_export_private_only (wolfKey , d , & dSz );
3762+ PRIVATE_KEY_LOCK ();
3763+ }
37513764 wc_ecc_del_point (point );
37523765 }
37533766 }
37543767 else {
37553768 /* export the raw private/public ECC portions */
3769+ PRIVATE_KEY_UNLOCK ();
37563770 rc = wc_ecc_export_private_raw (wolfKey ,
37573771 qx , & qxSz ,
37583772 qy , & qySz ,
37593773 d , & dSz );
3774+ PRIVATE_KEY_LOCK ();
37603775 }
37613776
37623777 if (rc == 0 ) {
@@ -3817,17 +3832,22 @@ int wolfTPM2_EccKey_WolfToTpm_ex(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* parentKey,
38173832 if (rc == 0 )
38183833 rc = wc_export_int (point -> y , qy , & qySz , keySz ,
38193834 WC_TYPE_UNSIGNED_BIN );
3820- if (rc == 0 )
3835+ if (rc == 0 ) {
3836+ PRIVATE_KEY_UNLOCK ();
38213837 rc = wc_ecc_export_private_only (wolfKey , d , & dSz );
3838+ PRIVATE_KEY_LOCK ();
3839+ }
38223840 wc_ecc_del_point (point );
38233841 }
38243842 }
38253843 else {
38263844 /* export the raw private/public ECC portions */
3845+ PRIVATE_KEY_UNLOCK ();
38273846 rc = wc_ecc_export_private_raw (wolfKey ,
38283847 qx , & qxSz ,
38293848 qy , & qySz ,
38303849 d , & dSz );
3850+ PRIVATE_KEY_LOCK ();
38313851 }
38323852
38333853 if (rc == 0 ) {
0 commit comments