Przeglądaj źródła

Add decryption in post RX handler

twisted_pear 2 lat temu
rodzic
commit
5ed2882a04
1 zmienionych plików z 17 dodań i 2 usunięć
  1. 17 2
      esubghz_chat.c

+ 17 - 2
esubghz_chat.c

@@ -78,8 +78,23 @@ static void post_rx(ESubGhzChatState *state, size_t rx_size)
 		memcpy(state->rx_str_buffer, state->rx_buffer, rx_size);
 		memcpy(state->rx_str_buffer, state->rx_buffer, rx_size);
 		state->rx_str_buffer[rx_size] = 0;
 		state->rx_str_buffer[rx_size] = 0;
 	} else {
 	} else {
-		// TODO
-		return;
+		if (rx_size < IV_BYTES + TAG_BYTES + 1) {
+			return;
+		}
+
+		int ret = gcm_auth_decrypt(&(state->gcm_ctx),
+				state->rx_buffer, IV_BYTES,
+				NULL, 0,
+				state->rx_buffer + IV_BYTES,
+				(uint8_t *) state->rx_str_buffer,
+				rx_size - (IV_BYTES + TAG_BYTES),
+				state->rx_buffer + rx_size - TAG_BYTES,
+				TAG_BYTES);
+		state->rx_str_buffer[rx_size - (IV_BYTES + TAG_BYTES)] = 0;
+
+		if (ret != 0) {
+			strcpy(state->rx_str_buffer, "ERR: Decryption failed!");
+		}
 	}
 	}
 
 
 	furi_string_cat_printf(state->chat_box_store, "\n%s",
 	furi_string_cat_printf(state->chat_box_store, "\n%s",