Skip to content

Commit b3cce78

Browse files
TofMassilia13320Grom-
authored andcommitted
[services/stsafea] fix encrypted transfer
1 parent 6256541 commit b3cce78

File tree

1 file changed

+27
-12
lines changed

1 file changed

+27
-12
lines changed

services/stsafea/stsafea_sessions.c

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)