@@ -196,9 +196,12 @@ static stse_ReturnCode_t stsafea_session_frame_decrypt(stse_session_t *pSession,
196196 stse_frame_element_t * pElement ;
197197 PLAT_UI16 i = 0 ;
198198
199+ pElement = pFrame -> first_element -> next ;
200+ if (pElement == NULL ) {
201+ return STSE_OK ;
202+ }
199203 /*Fill encrypt buffer with encrypted payload content*/
200204 PLAT_UI8 decrypt_buffer [pFrame -> length - pFrame -> first_element -> length ];
201- pElement = pFrame -> first_element -> next ;
202205 while (pElement != NULL ) {
203206 if (pElement -> length != 0 ) {
204207 memcpy (decrypt_buffer + i , pElement -> pData , pElement -> length );
@@ -501,7 +504,7 @@ stse_ReturnCode_t stsafea_session_encrypted_transfer(stse_session_t *pSession,
501504 stse_ReturnCode_t ret ;
502505 PLAT_UI16 encrypted_cmd_payload_size = 0 ;
503506 PLAT_UI16 encrypted_rsp_payload_size = 0 ;
504- PLAT_UI8 padding = 0 ;
507+ PLAT_UI8 padding = 16 ;
505508
506509 if (pSession == NULL || pCmdFrame == NULL || pRspFrame == NULL ||
507510 pCmdFrame -> first_element == NULL || pCmdFrame -> first_element -> pData == NULL ||
@@ -510,12 +513,17 @@ stse_ReturnCode_t stsafea_session_encrypted_transfer(stse_session_t *pSession,
510513 }
511514
512515 if (cmd_encryption_flag == 1 ) {
513- PLAT_UI16 encrypted_payload_length = (pCmdFrame -> length - pCmdFrame -> first_element -> length ) + 1 ;
514-
515- if ((encrypted_payload_length % 16 ) != 0 ) {
516- padding = 16 - (encrypted_payload_length % 16 );
516+ #ifdef STSE_FRAME_DEBUG_LOG
517+ printf ("\n\r STSAFE Plaintext Frame > " );
518+ stse_frame_debug_print (pCmdFrame );
519+ printf ("\n\r" );
520+ #endif /* STSE_FRAME_DEBUG_LOG */
521+
522+ PLAT_UI16 plaintext_payload_size = pCmdFrame -> length - pCmdFrame -> first_element -> length ;
523+ if ((plaintext_payload_size % 16 ) != 0 ) {
524+ padding = 16 - (plaintext_payload_size % 16 );
517525 }
518- encrypted_cmd_payload_size = pCmdFrame -> length + padding ;
526+ encrypted_cmd_payload_size = plaintext_payload_size + padding ;
519527 }
520528
521529 PLAT_UI8 encrypted_cmd_payload [encrypted_cmd_payload_size ];
@@ -532,18 +540,19 @@ stse_ReturnCode_t stsafea_session_encrypted_transfer(stse_session_t *pSession,
532540 }
533541
534542 if (rsp_encryption_flag == 1 ) {
535-
536- if ((pRspFrame -> length % 16 ) != 0 ) {
537- padding = 16 - (pRspFrame -> length % 16 );
543+ padding = 16 ;
544+ PLAT_UI16 plaintext_payload_size = pRspFrame -> length - pRspFrame -> first_element -> length ;
545+ if ((plaintext_payload_size % 16 ) != 0 ) {
546+ padding = 16 - (plaintext_payload_size % 16 );
538547 }
539- encrypted_rsp_payload_size = pRspFrame -> length + padding ;
548+ encrypted_rsp_payload_size = plaintext_payload_size + padding ;
540549 }
541550
542551 PLAT_UI8 encrypted_rsp_payload [encrypted_rsp_payload_size ];
543552 stse_frame_element_allocate (eEncrypted_rsp_payload , encrypted_rsp_payload_size , encrypted_rsp_payload );
544553 stse_frame_strap_allocate (S2 );
545554
546- if (rsp_encryption_flag == 1 ) {
555+ if (rsp_encryption_flag == 1 && pRspFrame -> first_element -> next != NULL ) {
547556 stse_frame_insert_strap (& S2 , pRspFrame -> first_element , & eEncrypted_rsp_payload );
548557 stse_frame_update (pRspFrame );
549558 }
@@ -556,6 +565,12 @@ stse_ReturnCode_t stsafea_session_encrypted_transfer(stse_session_t *pSession,
556565
557566 if ((ret == STSE_OK ) && (rsp_encryption_flag == 1 )) {
558567 ret = stsafea_session_frame_decrypt (pSession , pRspFrame );
568+
569+ #ifdef STSE_FRAME_DEBUG_LOG
570+ printf ("\n\r STSAFE Plaintext Frame < " );
571+ stse_frame_debug_print (pRspFrame );
572+ printf ("\n\r" );
573+ #endif /* STSE_FRAME_DEBUG_LOG */
559574 }
560575
561576 return ret ;
0 commit comments