@@ -356,84 +356,76 @@ int wolfSPDM_ConnectPsk(WOLFSPDM_CTX* ctx)
356356 wolfSPDM_TranscriptReset (ctx );
357357
358358 /* Step 1: GET_VERSION */
359- SPDM_CONNECT_STEP (ctx , "PSK Step 1: GET_VERSION\n" ,
360- wolfSPDM_GetVersion (ctx ) );
359+ wolfSPDM_DebugPrint (ctx , "PSK Step 1: GET_VERSION\n" );
360+ rc = wolfSPDM_GetVersion (ctx );
361361
362362 /* Steps 2-3: GET_CAPABILITIES + NEGOTIATE_ALGORITHMS
363363 * Not mandatory for PSK mode per TCG PC Client PSK spec.
364364 * NS350 supports direct GET_VERSION -> PSK_EXCHANGE. */
365365
366366 /* Step 2: PSK_EXCHANGE / PSK_EXCHANGE_RSP */
367- txSz = sizeof (txBuf );
368- rxSz = sizeof (rxBuf );
367+ if (rc == WOLFSPDM_SUCCESS ) {
368+ txSz = sizeof (txBuf );
369+ rxSz = sizeof (rxBuf );
369370
370- wolfSPDM_DebugPrint (ctx , "PSK Step 4: PSK_EXCHANGE\n" );
371- rc = wolfSPDM_BuildPskExchange (ctx , txBuf , & txSz );
372- if (rc != WOLFSPDM_SUCCESS ) {
373- ctx -> state = WOLFSPDM_STATE_ERROR ;
374- return rc ;
371+ wolfSPDM_DebugPrint (ctx , "PSK Step 4: PSK_EXCHANGE\n" );
372+ rc = wolfSPDM_BuildPskExchange (ctx , txBuf , & txSz );
375373 }
376- rc = wolfSPDM_TranscriptAdd (ctx , txBuf , txSz );
377- if (rc != WOLFSPDM_SUCCESS ) {
378- ctx -> state = WOLFSPDM_STATE_ERROR ;
379- return rc ;
374+ if (rc == WOLFSPDM_SUCCESS ) {
375+ rc = wolfSPDM_TranscriptAdd (ctx , txBuf , txSz );
380376 }
381- rc = wolfSPDM_SendReceive (ctx , txBuf , txSz , rxBuf , & rxSz );
382- if (rc != WOLFSPDM_SUCCESS ) {
383- ctx -> state = WOLFSPDM_STATE_ERROR ;
384- return rc ;
377+ if (rc == WOLFSPDM_SUCCESS ) {
378+ rc = wolfSPDM_SendReceive (ctx , txBuf , txSz , rxBuf , & rxSz );
385379 }
386- rc = wolfSPDM_ParsePskExchangeRsp (ctx , rxBuf , rxSz );
387- if (rc != WOLFSPDM_SUCCESS ) {
388- ctx -> state = WOLFSPDM_STATE_ERROR ;
389- return rc ;
380+ if (rc == WOLFSPDM_SUCCESS ) {
381+ rc = wolfSPDM_ParsePskExchangeRsp (ctx , rxBuf , rxSz );
390382 }
391383
392384 /* Step 5: PSK_FINISH / PSK_FINISH_RSP (encrypted) */
393- finSz = sizeof (finBuf );
394- encSz = sizeof (encBuf );
395- rxSz = sizeof (rxBuf );
396- decSz = sizeof (decBuf );
385+ if (rc == WOLFSPDM_SUCCESS ) {
386+ finSz = sizeof (finBuf );
387+ encSz = sizeof (encBuf );
388+ rxSz = sizeof (rxBuf );
389+ decSz = sizeof (decBuf );
397390
398- wolfSPDM_DebugPrint (ctx , "PSK Step 5: PSK_FINISH\n" );
399- rc = wolfSPDM_BuildPskFinish (ctx , finBuf , & finSz );
400- if (rc != WOLFSPDM_SUCCESS ) {
401- ctx -> state = WOLFSPDM_STATE_ERROR ;
402- return rc ;
391+ wolfSPDM_DebugPrint (ctx , "PSK Step 5: PSK_FINISH\n" );
392+ rc = wolfSPDM_BuildPskFinish (ctx , finBuf , & finSz );
403393 }
404- rc = wolfSPDM_EncryptInternal (ctx , finBuf , finSz , encBuf , & encSz );
405- if (rc != WOLFSPDM_SUCCESS ) {
406- ctx -> state = WOLFSPDM_STATE_ERROR ;
407- return rc ;
394+ if (rc == WOLFSPDM_SUCCESS ) {
395+ rc = wolfSPDM_EncryptInternal (ctx , finBuf , finSz , encBuf , & encSz );
408396 }
409- rc = wolfSPDM_SendReceive (ctx , encBuf , encSz , rxBuf , & rxSz );
410- if (rc != WOLFSPDM_SUCCESS ) {
411- ctx -> state = WOLFSPDM_STATE_ERROR ;
412- return rc ;
397+ if (rc == WOLFSPDM_SUCCESS ) {
398+ rc = wolfSPDM_SendReceive (ctx , encBuf , encSz , rxBuf , & rxSz );
413399 }
414- rc = wolfSPDM_DecryptInternal (ctx , rxBuf , rxSz , decBuf , & decSz );
415- if (rc != WOLFSPDM_SUCCESS ) {
416- ctx -> state = WOLFSPDM_STATE_ERROR ;
417- return rc ;
400+ if (rc == WOLFSPDM_SUCCESS ) {
401+ rc = wolfSPDM_DecryptInternal (ctx , rxBuf , rxSz , decBuf , & decSz );
418402 }
419- rc = wolfSPDM_ParsePskFinishRsp (ctx , decBuf , decSz );
420- if (rc != WOLFSPDM_SUCCESS ) {
421- ctx -> state = WOLFSPDM_STATE_ERROR ;
422- return rc ;
403+ if (rc == WOLFSPDM_SUCCESS ) {
404+ rc = wolfSPDM_ParsePskFinishRsp (ctx , decBuf , decSz );
423405 }
424406
425407 /* Derive application data keys */
426- rc = wolfSPDM_DeriveAppDataKeys (ctx );
427- if (rc != WOLFSPDM_SUCCESS ) {
408+ if (rc == WOLFSPDM_SUCCESS ) {
409+ rc = wolfSPDM_DeriveAppDataKeys (ctx );
410+ }
411+
412+ if (rc == WOLFSPDM_SUCCESS ) {
413+ ctx -> state = WOLFSPDM_STATE_CONNECTED ;
414+ wolfSPDM_DebugPrint (ctx , "PSK: SPDM Session Established! "
415+ "SessionID=0x%08x\n" , ctx -> sessionId );
416+ }
417+ else {
428418 ctx -> state = WOLFSPDM_STATE_ERROR ;
429- return rc ;
430419 }
431420
432- ctx -> state = WOLFSPDM_STATE_CONNECTED ;
433- wolfSPDM_DebugPrint (ctx , "PSK: SPDM Session Established! "
434- "SessionID=0x%08x\n" , ctx -> sessionId );
421+ /* Always zero sensitive stack buffers */
422+ wc_ForceZero (txBuf , sizeof (txBuf ));
423+ wc_ForceZero (rxBuf , sizeof (rxBuf ));
424+ wc_ForceZero (finBuf , sizeof (finBuf ));
425+ wc_ForceZero (encBuf , sizeof (encBuf ));
426+ wc_ForceZero (decBuf , sizeof (decBuf ));
435427
436- return WOLFSPDM_SUCCESS ;
428+ return rc ;
437429}
438430
439431#endif /* WOLFTPM_SPDM_PSK */
0 commit comments