From b5a1846e49749b15af1dc01e06e30bcf7a544081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Mon, 16 Oct 2023 22:00:13 +0100 Subject: [PATCH] Mi Band 8: Fix chunked encryption --- .../devices/xiaomi/XiaomiCharacteristic.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiCharacteristic.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiCharacteristic.java index 68c41c9f9..d2e4d3b95 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiCharacteristic.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiCharacteristic.java @@ -183,7 +183,7 @@ public class XiaomiCharacteristic { case 1: LOG.debug("Got chunked ack start"); final TransactionBuilder builder = mSupport.createTransactionBuilder("send chunks"); - for (int i = 0; i * 242 < currentSending.length; i ++) { + for (int i = 0; i * 242 < currentSending.length; i++) { final int startIndex = i * 242; final int endIndex = Math.min((i + 1) * 242, currentSending.length); LOG.debug("Sending chunk {} from {} to {}", i, startIndex, endIndex); @@ -244,12 +244,13 @@ public class XiaomiCharacteristic { } if (shouldWriteChunked(currentSending)) { + // Prepend encrypted index + currentSending = ByteBuffer.allocate(2 + currentSending.length).order(ByteOrder.LITTLE_ENDIAN) + .putShort(encryptedIndex++) + .put(currentSending) + .array(); + LOG.debug("Sending next - chunked"); - // FIXME this is not efficient - re-encrypt with the correct key for chunked (assumes - // final encrypted size is the same - need to check) - if (isEncrypted) { - currentSending = authService.encrypt(payload, (short) 0); - } sendingChunked = true;