@@ -196,9 +196,12 @@ static stse_ReturnCode_t stsafea_session_frame_decrypt(stse_session_t *pSession,
196
196
stse_frame_element_t * pElement ;
197
197
PLAT_UI16 i = 0 ;
198
198
199
+ pElement = pFrame -> first_element -> next ;
200
+ if (pElement == NULL ) {
201
+ return STSE_OK ;
202
+ }
199
203
/*Fill encrypt buffer with encrypted payload content*/
200
204
PLAT_UI8 decrypt_buffer [pFrame -> length - pFrame -> first_element -> length ];
201
- pElement = pFrame -> first_element -> next ;
202
205
while (pElement != NULL ) {
203
206
if (pElement -> length != 0 ) {
204
207
memcpy (decrypt_buffer + i , pElement -> pData , pElement -> length );
@@ -501,7 +504,7 @@ stse_ReturnCode_t stsafea_session_encrypted_transfer(stse_session_t *pSession,
501
504
stse_ReturnCode_t ret ;
502
505
PLAT_UI16 encrypted_cmd_payload_size = 0 ;
503
506
PLAT_UI16 encrypted_rsp_payload_size = 0 ;
504
- PLAT_UI8 padding = 0 ;
507
+ PLAT_UI8 padding = 16 ;
505
508
506
509
if (pSession == NULL || pCmdFrame == NULL || pRspFrame == NULL ||
507
510
pCmdFrame -> first_element == NULL || pCmdFrame -> first_element -> pData == NULL ||
@@ -510,12 +513,17 @@ stse_ReturnCode_t stsafea_session_encrypted_transfer(stse_session_t *pSession,
510
513
}
511
514
512
515
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 );
517
525
}
518
- encrypted_cmd_payload_size = pCmdFrame -> length + padding ;
526
+ encrypted_cmd_payload_size = plaintext_payload_size + padding ;
519
527
}
520
528
521
529
PLAT_UI8 encrypted_cmd_payload [encrypted_cmd_payload_size ];
@@ -532,18 +540,19 @@ stse_ReturnCode_t stsafea_session_encrypted_transfer(stse_session_t *pSession,
532
540
}
533
541
534
542
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 );
538
547
}
539
- encrypted_rsp_payload_size = pRspFrame -> length + padding ;
548
+ encrypted_rsp_payload_size = plaintext_payload_size + padding ;
540
549
}
541
550
542
551
PLAT_UI8 encrypted_rsp_payload [encrypted_rsp_payload_size ];
543
552
stse_frame_element_allocate (eEncrypted_rsp_payload , encrypted_rsp_payload_size , encrypted_rsp_payload );
544
553
stse_frame_strap_allocate (S2 );
545
554
546
- if (rsp_encryption_flag == 1 ) {
555
+ if (rsp_encryption_flag == 1 && pRspFrame -> first_element -> next != NULL ) {
547
556
stse_frame_insert_strap (& S2 , pRspFrame -> first_element , & eEncrypted_rsp_payload );
548
557
stse_frame_update (pRspFrame );
549
558
}
@@ -556,6 +565,12 @@ stse_ReturnCode_t stsafea_session_encrypted_transfer(stse_session_t *pSession,
556
565
557
566
if ((ret == STSE_OK ) && (rsp_encryption_flag == 1 )) {
558
567
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 */
559
574
}
560
575
561
576
return ret ;
0 commit comments