diff --git a/app/src/androidTest/assets/backupTests/account_data_00.binproto b/app/src/androidTest/assets/backupTests/account_data_00.binproto index 12e22c994e..a038ac704a 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_00.binproto and b/app/src/androidTest/assets/backupTests/account_data_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_01.binproto b/app/src/androidTest/assets/backupTests/account_data_01.binproto index ebf6db591c..43d74c0a31 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_01.binproto and b/app/src/androidTest/assets/backupTests/account_data_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_02.binproto b/app/src/androidTest/assets/backupTests/account_data_02.binproto index 0abda25245..d3fa20497a 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_02.binproto and b/app/src/androidTest/assets/backupTests/account_data_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_03.binproto b/app/src/androidTest/assets/backupTests/account_data_03.binproto index 31d7af97dc..38786a838f 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_03.binproto and b/app/src/androidTest/assets/backupTests/account_data_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_04.binproto b/app/src/androidTest/assets/backupTests/account_data_04.binproto index 9049824f43..5dafa8c768 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_04.binproto and b/app/src/androidTest/assets/backupTests/account_data_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_05.binproto b/app/src/androidTest/assets/backupTests/account_data_05.binproto index 35308d035a..7216e70f3e 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_05.binproto and b/app/src/androidTest/assets/backupTests/account_data_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_06.binproto b/app/src/androidTest/assets/backupTests/account_data_06.binproto index 7bb18720c0..ca877a7683 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_06.binproto and b/app/src/androidTest/assets/backupTests/account_data_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_07.binproto b/app/src/androidTest/assets/backupTests/account_data_07.binproto index fd91e243f7..7a33ed6705 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_07.binproto and b/app/src/androidTest/assets/backupTests/account_data_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_08.binproto b/app/src/androidTest/assets/backupTests/account_data_08.binproto index d63ec99c9d..645214e7b6 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_08.binproto and b/app/src/androidTest/assets/backupTests/account_data_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_09.binproto b/app/src/androidTest/assets/backupTests/account_data_09.binproto index c1f5e82832..188059a259 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_09.binproto and b/app/src/androidTest/assets/backupTests/account_data_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_10.binproto b/app/src/androidTest/assets/backupTests/account_data_10.binproto index 05df879b4a..012e916fa5 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_10.binproto and b/app/src/androidTest/assets/backupTests/account_data_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_11.binproto b/app/src/androidTest/assets/backupTests/account_data_11.binproto index c15d1d5585..577517af96 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_11.binproto and b/app/src/androidTest/assets/backupTests/account_data_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_12.binproto b/app/src/androidTest/assets/backupTests/account_data_12.binproto index 0591b596b7..eef7602f90 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_12.binproto and b/app/src/androidTest/assets/backupTests/account_data_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_13.binproto b/app/src/androidTest/assets/backupTests/account_data_13.binproto index 88689ac5c8..5d416ba161 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_13.binproto and b/app/src/androidTest/assets/backupTests/account_data_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_14.binproto b/app/src/androidTest/assets/backupTests/account_data_14.binproto index 31c6f8b855..0b69245b73 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_14.binproto and b/app/src/androidTest/assets/backupTests/account_data_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_15.binproto b/app/src/androidTest/assets/backupTests/account_data_15.binproto index 5c9a002e9a..cbfb0b0c2a 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_15.binproto and b/app/src/androidTest/assets/backupTests/account_data_15.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_16.binproto b/app/src/androidTest/assets/backupTests/account_data_16.binproto index cfa08b9947..f022644736 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_16.binproto and b/app/src/androidTest/assets/backupTests/account_data_16.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_17.binproto b/app/src/androidTest/assets/backupTests/account_data_17.binproto index dad8364349..383712305b 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_17.binproto and b/app/src/androidTest/assets/backupTests/account_data_17.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_18.binproto b/app/src/androidTest/assets/backupTests/account_data_18.binproto index e175c08f41..613c074437 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_18.binproto and b/app/src/androidTest/assets/backupTests/account_data_18.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_19.binproto b/app/src/androidTest/assets/backupTests/account_data_19.binproto index e3fdef2dc3..db77f9640c 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_19.binproto and b/app/src/androidTest/assets/backupTests/account_data_19.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_20.binproto b/app/src/androidTest/assets/backupTests/account_data_20.binproto index b26bdbf4e9..a45e5c7cbe 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_20.binproto and b/app/src/androidTest/assets/backupTests/account_data_20.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_21.binproto b/app/src/androidTest/assets/backupTests/account_data_21.binproto index c52a09b538..d2d32bf3b0 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_21.binproto and b/app/src/androidTest/assets/backupTests/account_data_21.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_22.binproto b/app/src/androidTest/assets/backupTests/account_data_22.binproto index 34b4f9ad4b..b358a6aea1 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_22.binproto and b/app/src/androidTest/assets/backupTests/account_data_22.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_23.binproto b/app/src/androidTest/assets/backupTests/account_data_23.binproto index 501b8a6f0d..9aa090aa32 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_23.binproto and b/app/src/androidTest/assets/backupTests/account_data_23.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_24.binproto b/app/src/androidTest/assets/backupTests/account_data_24.binproto index a8d380e976..f81f0b0f59 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_24.binproto and b/app/src/androidTest/assets/backupTests/account_data_24.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_25.binproto b/app/src/androidTest/assets/backupTests/account_data_25.binproto index a3aee1d81f..b5ca4fb269 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_25.binproto and b/app/src/androidTest/assets/backupTests/account_data_25.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_26.binproto b/app/src/androidTest/assets/backupTests/account_data_26.binproto index e1b6cbbe35..5cd595ffa5 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_26.binproto and b/app/src/androidTest/assets/backupTests/account_data_26.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_27.binproto b/app/src/androidTest/assets/backupTests/account_data_27.binproto index a2318802b1..4c98ebc8d3 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_27.binproto and b/app/src/androidTest/assets/backupTests/account_data_27.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_00.binproto b/app/src/androidTest/assets/backupTests/chat_00.binproto index b5cc1a3ba4..3319fa11d2 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_00.binproto and b/app/src/androidTest/assets/backupTests/chat_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_01.binproto b/app/src/androidTest/assets/backupTests/chat_01.binproto index 0467e35123..548b599d19 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_01.binproto and b/app/src/androidTest/assets/backupTests/chat_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_02.binproto b/app/src/androidTest/assets/backupTests/chat_02.binproto index 25246afb3d..a10347bcc1 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_02.binproto and b/app/src/androidTest/assets/backupTests/chat_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_03.binproto b/app/src/androidTest/assets/backupTests/chat_03.binproto index ad32f43e94..9482ca4010 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_03.binproto and b/app/src/androidTest/assets/backupTests/chat_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_04.binproto b/app/src/androidTest/assets/backupTests/chat_04.binproto index ddd2688f42..33281b4675 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_04.binproto and b/app/src/androidTest/assets/backupTests/chat_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_05.binproto b/app/src/androidTest/assets/backupTests/chat_05.binproto index 13db26d4ea..8a63b58235 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_05.binproto and b/app/src/androidTest/assets/backupTests/chat_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_06.binproto b/app/src/androidTest/assets/backupTests/chat_06.binproto index a818a196e5..6ebe13f675 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_06.binproto and b/app/src/androidTest/assets/backupTests/chat_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_07.binproto b/app/src/androidTest/assets/backupTests/chat_07.binproto index 0cc4d39eef..2d180be2a0 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_07.binproto and b/app/src/androidTest/assets/backupTests/chat_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_08.binproto b/app/src/androidTest/assets/backupTests/chat_08.binproto index d854b90550..9a37c056c4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_08.binproto and b/app/src/androidTest/assets/backupTests/chat_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_09.binproto b/app/src/androidTest/assets/backupTests/chat_09.binproto index fe3a7c34e1..e103068976 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_09.binproto and b/app/src/androidTest/assets/backupTests/chat_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_10.binproto b/app/src/androidTest/assets/backupTests/chat_10.binproto index 165d34376c..640c0118ea 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_10.binproto and b/app/src/androidTest/assets/backupTests/chat_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_11.binproto b/app/src/androidTest/assets/backupTests/chat_11.binproto index e95a931df2..2cd8fb95e6 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_11.binproto and b/app/src/androidTest/assets/backupTests/chat_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_12.binproto b/app/src/androidTest/assets/backupTests/chat_12.binproto index f885eb5c3f..f362553594 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_12.binproto and b/app/src/androidTest/assets/backupTests/chat_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_13.binproto b/app/src/androidTest/assets/backupTests/chat_13.binproto index 3c8fc80aba..0b60b359f4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_13.binproto and b/app/src/androidTest/assets/backupTests/chat_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_14.binproto b/app/src/androidTest/assets/backupTests/chat_14.binproto index feb44958e4..9c324e5858 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_14.binproto and b/app/src/androidTest/assets/backupTests/chat_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_15.binproto b/app/src/androidTest/assets/backupTests/chat_15.binproto index 78cb521749..d40d790fd5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_15.binproto and b/app/src/androidTest/assets/backupTests/chat_15.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_16.binproto b/app/src/androidTest/assets/backupTests/chat_16.binproto index 22655afb06..a961e26a7a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_16.binproto and b/app/src/androidTest/assets/backupTests/chat_16.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_17.binproto b/app/src/androidTest/assets/backupTests/chat_17.binproto index 668a4dc027..8b525a2dbe 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_17.binproto and b/app/src/androidTest/assets/backupTests/chat_17.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_18.binproto b/app/src/androidTest/assets/backupTests/chat_18.binproto index bedaf696ba..b57666d52f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_18.binproto and b/app/src/androidTest/assets/backupTests/chat_18.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_19.binproto b/app/src/androidTest/assets/backupTests/chat_19.binproto index 86b532747e..1524f1ccc7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_19.binproto and b/app/src/androidTest/assets/backupTests/chat_19.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_20.binproto b/app/src/androidTest/assets/backupTests/chat_20.binproto index f6676c2937..bec2d45a02 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_20.binproto and b/app/src/androidTest/assets/backupTests/chat_20.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_21.binproto b/app/src/androidTest/assets/backupTests/chat_21.binproto index 4ea0f9d7b5..023c04654c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_21.binproto and b/app/src/androidTest/assets/backupTests/chat_21.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_22.binproto b/app/src/androidTest/assets/backupTests/chat_22.binproto index 63797f65f6..1fe1fc2447 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_22.binproto and b/app/src/androidTest/assets/backupTests/chat_22.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_23.binproto b/app/src/androidTest/assets/backupTests/chat_23.binproto index befe449f73..834028b6a3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_23.binproto and b/app/src/androidTest/assets/backupTests/chat_23.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_24.binproto b/app/src/androidTest/assets/backupTests/chat_24.binproto index a73835b84b..e43cd2b127 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_24.binproto and b/app/src/androidTest/assets/backupTests/chat_24.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_25.binproto b/app/src/androidTest/assets/backupTests/chat_25.binproto index 06a3854c05..2ac1c25d1f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_25.binproto and b/app/src/androidTest/assets/backupTests/chat_25.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_26.binproto b/app/src/androidTest/assets/backupTests/chat_26.binproto index 595468e1c9..f647224ee8 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_26.binproto and b/app/src/androidTest/assets/backupTests/chat_26.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_01.binproto index 0b93708d00..492308ad2b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_02.binproto index 5958964467..6a28a4d2e7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_03.binproto index 5f5dc1126a..41b337ae26 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_04.binproto index e0ce2f6a4d..5d9a80d749 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_05.binproto index ccf43166f6..1c214eafc7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_06.binproto index cbf7a83214..68cf9954dc 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_08.binproto index b2c9c89c95..f422bbc6e9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_09.binproto index e53699a064..2a16894ec5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_10.binproto index ec3f85534b..dcf0e9ddfb 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_11.binproto index c947cbc01f..dcc488f65e 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_12.binproto index 4a8ba09d7e..f28d7950be 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_contact_message_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_contact_message_13.binproto index 823c042aa1..77fc669c82 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_contact_message_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_contact_message_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_00.binproto index d6589a066b..b73adbd8aa 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_01.binproto index a00cbaa563..82fd46d0b6 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_02.binproto index 5deec4e8e0..2f4c5f0b4a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_03.binproto index 62aded9d30..8f578dcedb 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_04.binproto index 724a5322a1..b17322bb44 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_05.binproto index 7960524537..191784f974 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_06.binproto index 3481b30745..753f189334 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_07.binproto index 965181cb18..e5483bfc4a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_08.binproto index 9dc49d38af..845738cf23 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_09.binproto index 2277ddcfad..5256a20871 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_10.binproto index 82d73be647..993a29e197 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_11.binproto index a7a841bf08..cd0574ccbd 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_12.binproto index 91c5378c39..b86dc0c069 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_13.binproto index 8d726bfff8..9896679757 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_14.binproto index 691c8917ac..404c4b47a5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_00.binproto index 3154da64ee..77b02997a3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_01.binproto index bd969ca9d9..d9652dbc13 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_02.binproto index a00a2392ec..21b6bb16a7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_03.binproto index 820e2212ff..c7cc320862 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_04.binproto index 070d17cd37..6a26501af7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_05.binproto index eeb307c85e..ea4151dd73 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_06.binproto index 954c1aa3ef..342a3dd298 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_07.binproto index e884d8c364..93c5e4e085 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_08.binproto index ac64e2dd17..f0ee0c54af 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_09.binproto index 561c939118..6315aa52a5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_10.binproto index 2a640f5e0c..728ceb3941 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_direct_story_reply_with_edits_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_00.binproto index 0872e219b0..07832b33ba 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_01.binproto index 62a2eb3eb5..a9b70d9345 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_02.binproto index ce726b9683..df599b6714 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_03.binproto index ca01243250..b7c10f46b9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_04.binproto index 60ad2e1b1a..16d52312cd 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_05.binproto index 64de0f9de7..c486c623db 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_06.binproto index c1905bc0d0..6355df9ce7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_07.binproto index 19e6ae2f0c..06dc5dcb2c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_08.binproto index 5ef6e3e794..eed6173220 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_09.binproto index 053158a0c2..302f3f18ce 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_10.binproto index 043b9ae852..35bfe232ee 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_11.binproto index 2bf0b96178..b9cc85d89f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_12.binproto index b81c6a15ad..6f7a66aa68 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_13.binproto index 0375d18fbc..96f84920b4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_14.binproto index f43753776a..2411bb0fe5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_long_text_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_01.binproto index a80f49fdf3..e2cfa76cc1 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_02.binproto index cd01efba24..85693feed8 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_04.binproto index 68c1306c84..5d05ec6a07 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_05.binproto index 3ca89b7638..659bda52fc 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_07.binproto index 61e05b440f..439be228d8 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_08.binproto index 9cc6cbee70..5bed4e6767 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_10.binproto index 0d7c9c39e4..54c5cc4d35 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_11.binproto index 2d0c770d46..1574f7c62c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_13.binproto index 21bbcfe8eb..c6f7b782b5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_14.binproto index eb027926e6..a456fbecd4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_sms_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_00.binproto index 668a69b07d..75a635add4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_01.binproto index bfb4689640..afd2be7730 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_02.binproto index 748953ca69..aa9dd6c1c2 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_03.binproto index 79ee80da9a..ca9926f15c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_04.binproto index 55e8596972..b01ee21b64 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_05.binproto index c5a8eef798..d7768e7a23 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_06.binproto index 5ead9dc848..3fc737c67a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_07.binproto index 0164f1ced5..8e4e60f092 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_08.binproto index 0ab8537214..fb873d68e0 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_09.binproto index d042e7b4ed..7ab182885c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_10.binproto index 099ff35112..9da59dd45d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_11.binproto index b499ac6518..3b02487fab 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_12.binproto index c49c335f65..7dd6db8b2f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_13.binproto index 856ab1f681..8b4519ded2 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_14.binproto index 4788c508ca..3a8ca89f28 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_special_attachments_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_00.binproto index 57c32011aa..5d768a8c9e 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_01.binproto index 4089f263de..65e652e812 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_02.binproto index 48cfe64259..fe5ef054d8 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_03.binproto index d0db77285f..86c1025b10 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_04.binproto index c23efb59c6..5474d6c1e5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_05.binproto index 58b76fe610..d716347776 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_06.binproto index f308f98e22..0088db7fc3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_07.binproto index 0fdd517aea..0f371bcee6 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_08.binproto index 2963f1dc63..61ccd6c1ec 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_09.binproto index ed346f2c37..92d4a49d75 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_10.binproto index 22bff7e216..0f8229653b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_11.binproto index 6fda1fcbb9..d2624e452f 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_12.binproto index 6dc70c84a4..f95331ef6d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_13.binproto index 39a12a83cf..a4e839f7cc 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_14.binproto index 915d255bce..2c1eefc57b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_standard_attachments_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto index 0857d50063..a16dd6df97 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto index c504d4e195..ea977f4758 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto index 517e17d494..ed8883c966 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto index a8fa7fdaf9..305ec9f272 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto index 6a829d50da..7f51e47bfa 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto index 0c52e2bb28..d10831140a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto index 593a9f05c6..075ed3e860 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto index 56a951829e..0d84a192d4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto index 4c4ed795fd..88df9090ec 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto index 5ee32d7d02..eb31d0db2d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto index 8e1707f465..594f53d2e7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto index 020f82b5f6..9fde2cb6a8 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto index 8e9929e92b..1d39e9a734 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto index 808edcd6e4..245b71c9be 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_00.binproto index 7bc1c0cbda..1cd121ceeb 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_01.binproto index adb25a5f41..49543d8e70 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto index a9aaecc105..e5adcb702a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_03.binproto index 92ef5c7354..4ce225c1ce 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto index a08966a22d..b250b15f1d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto index 74181c146d..20ef99df94 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto index 0e1cf09ce4..8b1d909ab8 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_07.binproto index 85b709cbd4..9909f35abf 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_08.binproto index f42379c442..89fb265544 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_09.binproto index 93cb1488a0..c24ec461c9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto index e129edfe1a..2fb79a75b5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_11.binproto index a9d4a9500e..45b049c476 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_12.binproto index 8a3f8ae4a0..690474875c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto index d9c82f37c1..1689b42495 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_14.binproto index 816fc66d31..50ef8f3b53 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_quote_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_00.binproto index c292838eca..d5ef58a35a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_01.binproto index a7577a8940..a9fc32a4a3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_02.binproto index b95e90add5..da2a1328f7 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_03.binproto index 0d9528549e..9063956170 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_04.binproto index 638b012d28..b6680b313d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_05.binproto index 8d4d29498e..c5945c5ebd 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_06.binproto index 799a01a0ec..0bbb062e67 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_07.binproto index df8edc1d11..7ba3953eb4 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_08.binproto index 1845d7aae5..8af9edb5e3 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_09.binproto index 76b0805f92..11f755b163 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_10.binproto index 0ae3ca1e98..0a4f568fdb 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_11.binproto index b575a6bba1..b66d6c7220 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_12.binproto index 246421dbb6..8851528e37 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_13.binproto index b59484f06c..49f3eac340 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_14.binproto index d8d5c3c6da..a05d410f9c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_sticker_message_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_sticker_message_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_00.binproto index f658afc248..7eeabe79c5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_01.binproto index f1be90bc1b..6ac02c3c2b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_02.binproto index 06b53fb232..6b9c6c41e9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_03.binproto index eae21b361b..a746ab2c55 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_04.binproto index d3425e12fa..2c3078e5d6 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_05.binproto index 4cd770e609..e5fd1c18c9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_06.binproto index 7a02b0b6ac..36f1322dae 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_07.binproto index 3c319f0163..58b3858a32 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_08.binproto index f502647e44..7335c9daea 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_09.binproto index c560ee4874..4da0245bf5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_10.binproto index cb5c0fa206..e692d13f5d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_11.binproto index 83834d2adf..c585ec3046 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_view_once_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_view_once_12.binproto index af2792e2fd..3ce64aab77 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_view_once_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_view_once_12.binproto differ diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt index 27e309320d..481dd88085 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/KyberPreKeyTableTest.kt @@ -13,7 +13,7 @@ import org.signal.core.util.readToSingleObject import org.signal.core.util.requireLongOrNull import org.signal.core.util.select import org.signal.core.util.update -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.kem.KEMKeyPair import org.signal.libsignal.protocol.kem.KEMKeyType import org.signal.libsignal.protocol.state.KyberPreKeyRecord @@ -151,7 +151,7 @@ class KyberPreKeyTableTest { id, System.currentTimeMillis(), kemKeyPair, - Curve.generateKeyPair().privateKey.calculateSignature(kemKeyPair.publicKey.serialize()) + ECKeyPair.generate().privateKey.calculateSignature(kemKeyPair.publicKey.serialize()) ), lastResort = lastResort ) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt index cf0a8ff48b..2c24ae72fe 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/OneTimePreKeyTableTest.kt @@ -13,7 +13,7 @@ import org.signal.core.util.readToSingleObject import org.signal.core.util.requireLongOrNull import org.signal.core.util.select import org.signal.core.util.update -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.state.PreKeyRecord import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.ServiceId.ACI @@ -114,7 +114,7 @@ class OneTimePreKeyTableTest { SignalDatabase.oneTimePreKeys.insert( serviceId = account, keyId = id, - record = PreKeyRecord(id, Curve.generateKeyPair()) + record = PreKeyRecord(id, ECKeyPair.generate()) ) val count = SignalDatabase.rawDatabase diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt index f51d478c35..710d7b8e9c 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/messages/MessageProcessingPerformanceTest.kt @@ -13,7 +13,6 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.signal.core.util.logging.Log -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.zkgroup.profiles.ProfileKey import org.thoughtcrime.securesms.crypto.SealedSenderAccessUtil @@ -22,7 +21,6 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.testing.AliceClient import org.thoughtcrime.securesms.testing.BobClient import org.thoughtcrime.securesms.testing.Entry -import org.thoughtcrime.securesms.testing.FakeClientHelpers import org.thoughtcrime.securesms.testing.SignalActivityRule import org.thoughtcrime.securesms.testing.awaitFor import org.whispersystems.signalservice.internal.push.Envelope @@ -51,12 +49,13 @@ class MessageProcessingPerformanceTest { @get:Rule val harness = SignalActivityRule() - private val trustRoot: ECKeyPair = Curve.generateKeyPair() + private val trustRoot: ECKeyPair = ECKeyPair.generate() @Before fun setup() { mockkStatic(SealedSenderAccessUtil::class) - every { SealedSenderAccessUtil.getCertificateValidator() } returns FakeClientHelpers.noOpCertificateValidator + // TODO reinstate this for libsignal 0.76.1 +// every { SealedSenderAccessUtil.getCertificateValidator() } returns FakeClientHelpers.noOpCertificateValidator mockkObject(MessageContentProcessor) every { MessageContentProcessor.create(harness.application) } returns TimingMessageContentProcessor(harness.application) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt index 903c530611..a51b940e2c 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/FakeClientHelpers.kt @@ -4,10 +4,8 @@ import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64 import org.signal.libsignal.internal.Native import org.signal.libsignal.internal.NativeHandleGuard -import org.signal.libsignal.metadata.certificate.CertificateValidator import org.signal.libsignal.metadata.certificate.SenderCertificate import org.signal.libsignal.metadata.certificate.ServerCertificate -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.zkgroup.profiles.ProfileKey @@ -26,12 +24,13 @@ import java.util.UUID object FakeClientHelpers { - val noOpCertificateValidator = object : CertificateValidator(null) { - override fun validate(certificate: SenderCertificate, validationTime: Long) = Unit - } + // TODO reinstate this for libsignal 0.76.1 +// val noOpCertificateValidator = object : CertificateValidator(ECKeyPair.generate().publicKey) { +// override fun validate(certificate: SenderCertificate, validationTime: Long) = Unit +// } fun createCertificateFor(trustRoot: ECKeyPair, uuid: UUID, e164: String, deviceId: Int, identityKey: ECPublicKey, expires: Long): SenderCertificate { - val serverKey: ECKeyPair = Curve.generateKeyPair() + val serverKey: ECKeyPair = ECKeyPair.generate() NativeHandleGuard(serverKey.publicKey).use { serverPublicGuard -> NativeHandleGuard(trustRoot.privateKey).use { trustRootPrivateGuard -> val serverCertificate = ServerCertificate(Native.ServerCertificate_New(1, serverPublicGuard.nativeHandle(), trustRootPrivateGuard.nativeHandle())) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt index 9e35a8c33b..c8dc57a4a0 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/MockProvider.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.testing import org.signal.libsignal.protocol.IdentityKeyPair -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.state.PreKeyRecord import org.signal.libsignal.protocol.util.KeyHelper import org.signal.libsignal.protocol.util.Medium @@ -70,7 +70,7 @@ object MockProvider { fun createPreKeyResponse(identity: IdentityKeyPair = SignalStore.account.aciIdentityKey, deviceId: Int): PreKeyResponse { val signedPreKeyRecord = PreKeyUtil.generateSignedPreKey(SecureRandom().nextInt(Medium.MAX_VALUE), identity.privateKey) - val oneTimePreKey = PreKeyRecord(SecureRandom().nextInt(Medium.MAX_VALUE), Curve.generateKeyPair()) + val oneTimePreKey = PreKeyRecord(SecureRandom().nextInt(Medium.MAX_VALUE), ECKeyPair.generate()) val device = PreKeyResponseItem().apply { this.deviceId = deviceId diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt index e719c81073..800973b5df 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataArchiveProcessor.kt @@ -10,8 +10,10 @@ import okio.ByteString.Companion.EMPTY import okio.ByteString.Companion.toByteString import org.signal.core.util.isNotNullOrBlank import org.signal.core.util.logging.Log +import org.signal.libsignal.zkgroup.backups.BackupLevel import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.backup.v2.ImportState +import org.thoughtcrime.securesms.backup.v2.MessageBackupTier import org.thoughtcrime.securesms.backup.v2.database.restoreSelfFromBackup import org.thoughtcrime.securesms.backup.v2.database.restoreWallpaperAttachment import org.thoughtcrime.securesms.backup.v2.proto.AccountData @@ -104,6 +106,7 @@ object AccountDataArchiveProcessor { hasCompletedUsernameOnboarding = signalStore.uiHintValues.hasCompletedUsernameOnboarding(), customChatColors = db.chatColorsTable.getSavedChatColors().toRemoteChatColors(), optimizeOnDeviceStorage = signalStore.backupValues.optimizeStorage, + backupTier = signalStore.backupValues.backupTier.toRemoteBackupTier(), defaultChatStyle = ChatStyleConverter.constructRemoteChatStyle( db = db, chatColors = chatColors, @@ -212,6 +215,7 @@ object AccountDataArchiveProcessor { SignalStore.story.userHasSeenGroupStoryEducationSheet = settings.hasSeenGroupStoryEducationSheet SignalStore.story.viewedReceiptsEnabled = settings.storyViewReceiptsEnabled ?: settings.readReceipts SignalStore.backup.optimizeStorage = settings.optimizeOnDeviceStorage + SignalStore.backup.backupTier = settings.backupTier?.toLocalBackupTier() settings.customChatColors .mapNotNull { chatColor -> @@ -356,4 +360,20 @@ object AccountDataArchiveProcessor { } } } + + private fun MessageBackupTier?.toRemoteBackupTier(): Long? { + return when (this) { + MessageBackupTier.FREE -> BackupLevel.FREE.value.toLong() + MessageBackupTier.PAID -> BackupLevel.PAID.value.toLong() + null -> null + } + } + + private fun Long?.toLocalBackupTier(): MessageBackupTier? { + return when (this) { + BackupLevel.FREE.value.toLong() -> MessageBackupTier.FREE + BackupLevel.PAID.value.toLong() -> MessageBackupTier.PAID + else -> null + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt index 9cb2f0df3b..cb7236c0a1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt @@ -8,14 +8,12 @@ package org.thoughtcrime.securesms.backup.v2.processor import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.v2.ExportState import org.thoughtcrime.securesms.backup.v2.ImportState -import org.thoughtcrime.securesms.backup.v2.MessageBackupTier import org.thoughtcrime.securesms.backup.v2.database.getThreadsForBackup import org.thoughtcrime.securesms.backup.v2.importer.ChatArchiveImporter import org.thoughtcrime.securesms.backup.v2.proto.Chat import org.thoughtcrime.securesms.backup.v2.proto.Frame import org.thoughtcrime.securesms.backup.v2.stream.BackupFrameEmitter import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.RecipientId /** @@ -25,10 +23,7 @@ object ChatArchiveProcessor { val TAG = Log.tag(ChatArchiveProcessor::class.java) fun export(db: SignalDatabase, exportState: ExportState, emitter: BackupFrameEmitter) { - val includeImageWallpapers = SignalStore.backup.backupTier == MessageBackupTier.PAID - Log.i(TAG, "Including wallpapers: $includeImageWallpapers") - - db.threadTable.getThreadsForBackup(db, includeImageWallpapers).use { reader -> + db.threadTable.getThreadsForBackup(db, includeImageWallpapers = true).use { reader -> for (chat in reader) { if (exportState.recipientIds.contains(chat.recipientId)) { exportState.threadIds.add(chat.id) diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java index 512a317129..f2faabfd47 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java @@ -20,7 +20,6 @@ package org.thoughtcrime.securesms.crypto; import org.signal.core.util.Conversions; import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.InvalidMessageException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.libsignal.protocol.ecc.ECPublicKey; @@ -62,20 +61,16 @@ public class AsymmetricMasterCipher { } public byte[] encryptBytes(byte[] body) { - try { - ECPublicKey theirPublic = asymmetricMasterSecret.getDjbPublicKey(); - ECKeyPair ourKeyPair = Curve.generateKeyPair(); - byte[] secret = Curve.calculateAgreement(theirPublic, ourKeyPair.getPrivateKey()); - MasterCipher masterCipher = getMasterCipherForSecret(secret); - byte[] encryptedBodyBytes = masterCipher.encryptBytes(body); + ECPublicKey theirPublic = asymmetricMasterSecret.getDjbPublicKey(); + ECKeyPair ourKeyPair = ECKeyPair.generate(); + byte[] secret = ourKeyPair.getPrivateKey().calculateAgreement(theirPublic); + MasterCipher masterCipher = getMasterCipherForSecret(secret); + byte[] encryptedBodyBytes = masterCipher.encryptBytes(body); - PublicKey ourPublicKey = new PublicKey(31337, ourKeyPair.getPublicKey()); - byte[] publicKeyBytes = ourPublicKey.serialize(); + PublicKey ourPublicKey = new PublicKey(31337, ourKeyPair.getPublicKey()); + byte[] publicKeyBytes = ourPublicKey.serialize(); - return Util.combine(publicKeyBytes, encryptedBodyBytes); - } catch (InvalidKeyException e) { - throw new AssertionError(e); - } + return Util.combine(publicKeyBytes, encryptedBodyBytes); } public byte[] decryptBytes(byte[] combined) throws IOException, InvalidMessageException { @@ -84,7 +79,7 @@ public class AsymmetricMasterCipher { PublicKey theirPublicKey = new PublicKey(parts[0], 0); ECPrivateKey ourPrivateKey = asymmetricMasterSecret.getPrivateKey(); - byte[] secret = Curve.calculateAgreement(theirPublicKey.getKey(), ourPrivateKey); + byte[] secret = ourPrivateKey.calculateAgreement(theirPublicKey.getKey()); MasterCipher masterCipher = getMasterCipherForSecret(secret); return masterCipher.decryptBytes(parts[1]); diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java index f028211923..fe4b6eeff0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java @@ -19,7 +19,6 @@ package org.thoughtcrime.securesms.crypto; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.IdentityKeyPair; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPrivateKey; @@ -32,7 +31,7 @@ import org.signal.libsignal.protocol.ecc.ECPrivateKey; public class IdentityKeyUtil { public static IdentityKeyPair generateIdentityKeyPair() { - ECKeyPair djbKeyPair = Curve.generateKeyPair(); + ECKeyPair djbKeyPair = ECKeyPair.generate(); IdentityKey djbIdentityKey = new IdentityKey(djbKeyPair.getPublicKey()); ECPrivateKey djbPrivateKey = djbKeyPair.getPrivateKey(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterCipher.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterCipher.java index 0e0f19968e..a1b11d1fc8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterCipher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterCipher.java @@ -21,7 +21,6 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidMessageException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.core.util.Base64; import org.signal.core.util.Hex; @@ -89,7 +88,7 @@ public class MasterCipher { throws org.signal.libsignal.protocol.InvalidKeyException { try { - return Curve.decodePrivatePoint(decryptBytes(key)); + return new ECPrivateKey(decryptBytes(key)); } catch (InvalidMessageException ime) { throw new org.signal.libsignal.protocol.InvalidKeyException(ime); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java index ece764c290..85b8c46d4f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java @@ -26,7 +26,6 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.libsignal.protocol.ecc.ECPublicKey; @@ -139,7 +138,7 @@ public class MasterSecretUtil { ECPrivateKey djbPrivateKey = null; if (djbPublicBytes != null) { - djbPublicKey = Curve.decodePoint(djbPublicBytes, 0); + djbPublicKey = new ECPublicKey(djbPublicBytes); } if (masterSecret != null) { @@ -160,7 +159,7 @@ public class MasterSecretUtil { MasterSecret masterSecret) { MasterCipher masterCipher = new MasterCipher(masterSecret); - ECKeyPair keyPair = Curve.generateKeyPair(); + ECKeyPair keyPair = ECKeyPair.generate(); save(context, ASYMMETRIC_LOCAL_PUBLIC_DJB, keyPair.getPublicKey().serialize()); save(context, ASYMMETRIC_LOCAL_PRIVATE_DJB, masterCipher.encryptKey(keyPair.getPrivateKey())); diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/PreKeyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/PreKeyUtil.java index c556281d43..13326c6e40 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/PreKeyUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/PreKeyUtil.java @@ -20,9 +20,7 @@ package org.thoughtcrime.securesms.crypto; import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; -import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.InvalidKeyIdException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.libsignal.protocol.kem.KEMKeyPair; @@ -66,7 +64,7 @@ public class PreKeyUtil { for (int i = 0; i < BATCH_SIZE; i++) { int preKeyId = (startingId + i) % Medium.MAX_VALUE; - ECKeyPair keyPair = Curve.generateKeyPair(); + ECKeyPair keyPair = ECKeyPair.generate(); PreKeyRecord record = new PreKeyRecord(preKeyId, keyPair); records.add(record); @@ -155,14 +153,10 @@ public class PreKeyUtil { public synchronized static @NonNull SignedPreKeyRecord generateSignedPreKey(int signedPreKeyId, @NonNull ECPrivateKey privateKey) { Log.i(TAG, "Generating signed prekeys..."); - try { - ECKeyPair keyPair = Curve.generateKeyPair(); - byte[] signature = Curve.calculateSignature(privateKey, keyPair.getPublicKey().serialize()); + ECKeyPair keyPair = ECKeyPair.generate(); + byte[] signature = privateKey.calculateSignature(keyPair.getPublicKey().serialize()); - return new SignedPreKeyRecord(signedPreKeyId, System.currentTimeMillis(), keyPair, signature); - } catch (InvalidKeyException e) { - throw new AssertionError(e); - } + return new SignedPreKeyRecord(signedPreKeyId, System.currentTimeMillis(), keyPair, signature); } public synchronized static void storeSignedPreKey(@NonNull SignalProtocolStore protocolStore, @NonNull PreKeyMetadataStore metadataStore, SignedPreKeyRecord record) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/PublicKey.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/PublicKey.java index 70460bf38f..c12f588f6a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/PublicKey.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/PublicKey.java @@ -21,12 +21,9 @@ import org.signal.core.util.Conversions; import org.signal.core.util.logging.Log; import org.signal.core.util.Hex; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.thoughtcrime.securesms.util.Util; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; public class PublicKey { @@ -49,7 +46,7 @@ public class PublicKey { throw new InvalidKeyException("Provided bytes are too short."); this.id = Conversions.byteArrayToMedium(bytes, offset); - this.publicKey = Curve.decodePoint(bytes, offset + 3); + this.publicKey = new ECPublicKey(bytes, offset + 3); } public int getType() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java index 213104bbd8..72029d3bdf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java @@ -13,7 +13,6 @@ import org.signal.libsignal.metadata.certificate.CertificateValidator; import org.signal.libsignal.metadata.certificate.InvalidCertificateException; import org.signal.libsignal.metadata.certificate.SenderCertificate; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.BuildConfig; @@ -186,7 +185,7 @@ public class SealedSenderAccessUtil { private static CertificateValidator buildCertificateValidator() { try { - ECPublicKey unidentifiedSenderTrustRoot = Curve.decodePoint(Base64.decode(BuildConfig.UNIDENTIFIED_SENDER_TRUST_ROOT), 0); + ECPublicKey unidentifiedSenderTrustRoot = new ECPublicKey(Base64.decode(BuildConfig.UNIDENTIFIED_SENDER_TRUST_ROOT)); return new CertificateValidator(unidentifiedSenderTrustRoot); } catch (InvalidKeyException | IOException e) { throw new AssertionError(e); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt index ec3c629ed0..d68e1facfa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt @@ -10,8 +10,9 @@ import org.signal.core.util.logging.Log import org.signal.core.util.requireNonNullString import org.signal.core.util.update import org.signal.libsignal.protocol.InvalidKeyException -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair +import org.signal.libsignal.protocol.ecc.ECPrivateKey +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.state.PreKeyRecord import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException @@ -47,8 +48,8 @@ class OneTimePreKeyTable(context: Context, databaseHelper: SignalDatabase) : Dat readableDatabase.query(TABLE_NAME, null, "$ACCOUNT_ID = ? AND $KEY_ID = ?", SqlUtil.buildArgs(serviceId.toAccountId(), keyId), null, null, null).use { cursor -> if (cursor.moveToFirst()) { try { - val publicKey = Curve.decodePoint(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY)), 0) - val privateKey = Curve.decodePrivatePoint(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) + val publicKey = ECPublicKey(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY))) + val privateKey = ECPrivateKey(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) return PreKeyRecord(keyId, ECKeyPair(publicKey, privateKey)) } catch (e: InvalidKeyException) { Log.w(TAG, e) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt index 5fb5f7ba60..c6e722c3a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt @@ -10,8 +10,9 @@ import org.signal.core.util.requireInt import org.signal.core.util.requireLong import org.signal.core.util.requireNonNullString import org.signal.libsignal.protocol.InvalidKeyException -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair +import org.signal.libsignal.protocol.ecc.ECPrivateKey +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.state.SignedPreKeyRecord import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException @@ -50,8 +51,8 @@ class SignedPreKeyTable(context: Context, databaseHelper: SignalDatabase) : Data readableDatabase.query(TABLE_NAME, null, "$ACCOUNT_ID = ? AND $KEY_ID = ?", SqlUtil.buildArgs(serviceId.toAccountId(), keyId), null, null, null).use { cursor -> if (cursor.moveToFirst()) { try { - val publicKey = Curve.decodePoint(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY)), 0) - val privateKey = Curve.decodePrivatePoint(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) + val publicKey = ECPublicKey(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY))) + val privateKey = ECPrivateKey(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) val signature = Base64.decode(cursor.requireNonNullString(SIGNATURE)) val timestamp = cursor.requireLong(TIMESTAMP) return SignedPreKeyRecord(keyId, timestamp, ECKeyPair(publicKey, privateKey), signature) @@ -72,8 +73,8 @@ class SignedPreKeyTable(context: Context, databaseHelper: SignalDatabase) : Data while (cursor.moveToNext()) { try { val keyId = cursor.requireInt(KEY_ID) - val publicKey = Curve.decodePoint(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY)), 0) - val privateKey = Curve.decodePrivatePoint(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) + val publicKey = ECPublicKey(Base64.decode(cursor.requireNonNullString(PUBLIC_KEY))) + val privateKey = ECPrivateKey(Base64.decode(cursor.requireNonNullString(PRIVATE_KEY))) val signature = Base64.decode(cursor.requireNonNullString(SIGNATURE)) val timestamp = cursor.requireLong(TIMESTAMP) results.add(SignedPreKeyRecord(keyId, timestamp, ECKeyPair(publicKey, privateKey), signature)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt index 78425638f3..8bae6862e8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/AccountValues.kt @@ -9,7 +9,7 @@ import org.signal.core.util.logging.Log import org.signal.core.util.nullIfBlank import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECPrivateKey import org.signal.libsignal.protocol.util.Medium import org.thoughtcrime.securesms.crypto.IdentityKeyUtil import org.thoughtcrime.securesms.crypto.MasterCipher @@ -228,7 +228,7 @@ class AccountValues internal constructor(store: KeyValueStore, context: Context) require(store.containsKey(KEY_ACI_IDENTITY_PUBLIC_KEY)) { "Not yet set!" } return IdentityKeyPair( IdentityKey(getBlob(KEY_ACI_IDENTITY_PUBLIC_KEY, null)), - Curve.decodePrivatePoint(getBlob(KEY_ACI_IDENTITY_PRIVATE_KEY, null)) + ECPrivateKey(getBlob(KEY_ACI_IDENTITY_PRIVATE_KEY, null)) ) } @@ -238,7 +238,7 @@ class AccountValues internal constructor(store: KeyValueStore, context: Context) require(store.containsKey(KEY_PNI_IDENTITY_PUBLIC_KEY)) { "Not yet set!" } return IdentityKeyPair( IdentityKey(getBlob(KEY_PNI_IDENTITY_PUBLIC_KEY, null)), - Curve.decodePrivatePoint(getBlob(KEY_PNI_IDENTITY_PRIVATE_KEY, null)) + ECPrivateKey(getBlob(KEY_PNI_IDENTITY_PRIVATE_KEY, null)) ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt index 71617baf7c..2b81fe92ee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt @@ -9,7 +9,7 @@ import org.signal.core.util.logging.logD import org.signal.core.util.logging.logI import org.signal.core.util.logging.logW import org.signal.libsignal.protocol.InvalidKeyException -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.thoughtcrime.securesms.backup.BackupFileIOError import org.thoughtcrime.securesms.backup.v2.ArchiveValidator import org.thoughtcrime.securesms.backup.v2.BackupRepository @@ -149,7 +149,7 @@ object LinkDeviceRepository { val ephemeralId: String = uri.getQueryParameter("uuid") ?: return LinkDeviceResult.BadCode val publicKey = try { val publicKeyEncoded: String = uri.getQueryParameter("pub_key") ?: return LinkDeviceResult.BadCode - Curve.decodePoint(Base64.decode(publicKeyEncoded), 0) + ECPublicKey(Base64.decode(publicKeyEncoded)) } catch (e: InvalidKeyException) { return LinkDeviceResult.KeyError } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/secondary/DeviceNameCipher.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/secondary/DeviceNameCipher.kt index 74b28b01f6..b9f89fa453 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/secondary/DeviceNameCipher.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/secondary/DeviceNameCipher.kt @@ -4,9 +4,9 @@ import okio.ByteString.Companion.toByteString import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.InvalidKeyException -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.ecc.ECPrivateKey +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.util.ByteUtil import org.thoughtcrime.securesms.devicelist.protos.DeviceName import java.nio.charset.Charset @@ -28,8 +28,8 @@ object DeviceNameCipher { @JvmStatic fun encryptDeviceName(plaintext: ByteArray, identityKeyPair: IdentityKeyPair): ByteArray { - val ephemeralKeyPair: ECKeyPair = Curve.generateKeyPair() - val masterSecret: ByteArray = Curve.calculateAgreement(identityKeyPair.publicKey.publicKey, ephemeralKeyPair.privateKey) + val ephemeralKeyPair: ECKeyPair = ECKeyPair.generate() + val masterSecret: ByteArray = ephemeralKeyPair.privateKey.calculateAgreement(identityKeyPair.publicKey.publicKey) val syntheticIv: ByteArray = computeSyntheticIv(masterSecret, plaintext) val cipherKey: ByteArray = computeCipherKey(masterSecret, syntheticIv) @@ -58,8 +58,8 @@ object DeviceNameCipher { val syntheticIv = deviceName.syntheticIv.toByteArray() val cipherText = deviceName.ciphertext.toByteArray() val identityKey: ECPrivateKey = identityKeyPair.privateKey - val ephemeralPublic = Curve.decodePoint(deviceName.ephemeralPublic.toByteArray(), 0) - val masterSecret = Curve.calculateAgreement(ephemeralPublic, identityKey) + val ephemeralPublic = ECPublicKey(deviceName.ephemeralPublic.toByteArray()) + val masterSecret = identityKey.calculateAgreement(ephemeralPublic) val mac = Mac.getInstance("HmacSHA256") mac.init(SecretKeySpec(masterSecret, "HmacSHA256")) diff --git a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt index aefd796c86..9cace65a79 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registrationv3/data/QuickRegistrationRepository.kt @@ -15,7 +15,7 @@ import org.signal.core.util.Base64.decode import org.signal.core.util.isNotNullOrBlank import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.InvalidKeyException -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.registration.proto.RegistrationProvisionMessage import org.thoughtcrime.securesms.backup.v2.MessageBackupTier import org.thoughtcrime.securesms.database.SignalDatabase @@ -62,13 +62,14 @@ object QuickRegistrationRepository { try { val ephemeralId: String? = uri.getQueryParameter("uuid") val publicKeyEncoded: String? = uri.getQueryParameter("pub_key") - val publicKey = Curve.decodePoint(publicKeyEncoded?.let { decode(it) }, 0) if (ephemeralId == null || publicKeyEncoded == null) { Log.w(TAG, "Invalid link data hasId: ${ephemeralId != null} hasKey: ${publicKeyEncoded != null}") return TransferAccountResult.FAILED } + val publicKey = ECPublicKey(decode(publicKeyEncoded)) + SignalNetwork .provisioning .sendReRegisterDeviceProvisioningMessage( diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcUtil.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcUtil.java index c45a8ad9b4..0de17f8207 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcUtil.java @@ -6,7 +6,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.ringrtc.CallManager; import org.signal.ringrtc.GroupCall; @@ -29,7 +28,7 @@ public final class WebRtcUtil { private WebRtcUtil() {} public static @NonNull byte[] getPublicKeyBytes(@NonNull byte[] identityKey) throws InvalidKeyException { - ECPublicKey key = Curve.decodePoint(identityKey, 0); + ECPublicKey key = new ECPublicKey(identityKey); return key.getPublicKeyBytes(); } diff --git a/app/src/main/protowire/Backup.proto b/app/src/main/protowire/Backup.proto index c7b3efc37d..6263b4ee7b 100644 --- a/app/src/main/protowire/Backup.proto +++ b/app/src/main/protowire/Backup.proto @@ -88,6 +88,8 @@ message AccountData { ChatStyle defaultChatStyle = 18; repeated ChatStyle.CustomChatColor customChatColors = 19; bool optimizeOnDeviceStorage = 20; + // See zkgroup for integer particular values. Unset if backups are not enabled. + optional uint64 backupTier = 21; } message SubscriberData { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0b79d06e4a..bedd484fe1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ androidx-window = "1.3.0" glide = "4.15.1" gradle = "8.9.0" kotlin = "2.1.0" -libsignal-client = "0.74.1" +libsignal-client = "0.76.0" mp4parser = "1.9.39" android-gradle-plugin = "8.7.2" accompanist = "0.28.0" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 1c4d3161cf..e5ee846249 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -7369,20 +7369,20 @@ https://docs.gradle.org/current/userguide/dependency_verification.html - - - + + + - - + + - - - + + + - - + + diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt index 0e917cce8c..00572c5d0b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt @@ -384,7 +384,7 @@ class ArchiveApi( val presentation: ByteArray, val signedPresentation: ByteArray ) { - val publicKey: ECPublicKey = privateKey.publicKey() + val publicKey: ECPublicKey = privateKey.getPublicKey() companion object { fun from(backupKey: BackupKey, aci: ACI, credential: BackupAuthCredential, backupServerPublicParams: GenericServerPublicParams): CredentialPresentationData { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/Crypto.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/Crypto.kt index f65df5dbba..0744618901 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/Crypto.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/Crypto.kt @@ -13,6 +13,6 @@ import org.signal.libsignal.protocol.kdf.HKDF object Crypto { fun hkdf(inputKeyMaterial: ByteArray, info: ByteArray, outputLength: Int, salt: ByteArray? = null): ByteArray { - return HKDF.deriveSecrets(inputKeyMaterial, salt, info, outputLength) + return HKDF.deriveSecrets(inputKeyMaterial, salt ?: byteArrayOf(), info, outputLength) } } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt index a0066c7382..f86a5ecb82 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt @@ -218,17 +218,26 @@ class KeysApi( signedPreKey = device.getSignedPreKey().publicKey signedPreKeyId = device.getSignedPreKey().keyId signedPreKeySignature = device.getSignedPreKey().signature + } else { + Log.w(TAG, "No signed prekey for device! Skipping.") + continue } if (device.getPreKey() != null) { preKeyId = device.getPreKey().keyId preKey = device.getPreKey().publicKey + } else { + Log.w(TAG, "No prekey for device! Skipping.") + continue } if (device.getKyberPreKey() != null) { kyberPreKey = device.getKyberPreKey().publicKey kyberPreKeyId = device.getKyberPreKey().keyId kyberPreKeySignature = device.getKyberPreKey().signature + } else { + Log.w(TAG, "No kyber prekey for device! Skipping.") + continue } bundles.add( diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/PrimaryProvisioningCipher.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/PrimaryProvisioningCipher.java index 2ff6e03052..7b262cfae8 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/PrimaryProvisioningCipher.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/PrimaryProvisioningCipher.java @@ -7,8 +7,8 @@ package org.whispersystems.signalservice.internal.crypto; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECKeyPair; +import org.signal.libsignal.protocol.ecc.ECPrivateKey; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.libsignal.protocol.kdf.HKDF; import org.signal.registration.proto.RegistrationProvisionEnvelope; @@ -39,8 +39,8 @@ public class PrimaryProvisioningCipher { } public byte[] encrypt(ProvisionMessage message) throws InvalidKeyException { - ECKeyPair ourKeyPair = Curve.generateKeyPair(); - byte[] sharedSecret = Curve.calculateAgreement(theirPublicKey, ourKeyPair.getPrivateKey()); + ECKeyPair ourKeyPair = ECKeyPair.generate(); + byte[] sharedSecret = ourKeyPair.getPrivateKey().calculateAgreement(theirPublicKey); byte[] derivedSecret = HKDF.deriveSecrets(sharedSecret, PROVISIONING_MESSAGE.getBytes(), 64); byte[][] parts = Util.split(derivedSecret, 32, 32); @@ -57,8 +57,8 @@ public class PrimaryProvisioningCipher { } public byte[] encrypt(RegistrationProvisionMessage message) throws InvalidKeyException { - ECKeyPair ourKeyPair = Curve.generateKeyPair(); - byte[] sharedSecret = Curve.calculateAgreement(theirPublicKey, ourKeyPair.getPrivateKey()); + ECKeyPair ourKeyPair = ECKeyPair.generate(); + byte[] sharedSecret = ourKeyPair.getPrivateKey().calculateAgreement(theirPublicKey); byte[] derivedSecret = HKDF.deriveSecrets(sharedSecret, PROVISIONING_MESSAGE.getBytes(), 64); byte[][] parts = Util.split(derivedSecret, 32, 32); diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipher.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipher.kt index bcadec20dd..d7508fc758 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipher.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipher.kt @@ -8,7 +8,7 @@ package org.whispersystems.signalservice.internal.crypto import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECPrivateKey import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.kdf.HKDF import org.signal.libsignal.zkgroup.profiles.ProfileKey @@ -58,7 +58,7 @@ class SecondaryProvisioningCipher(private val secondaryIdentityKeyPair: Identity return ProvisionDecryptResult.Success( uuid = UuidUtil.parseOrThrow(provisioningMessage.aci), e164 = provisioningMessage.number!!, - identityKeyPair = IdentityKeyPair(IdentityKey(provisioningMessage.aciIdentityKeyPublic!!.toByteArray()), Curve.decodePrivatePoint(provisioningMessage.aciIdentityKeyPrivate!!.toByteArray())), + identityKeyPair = IdentityKeyPair(IdentityKey(provisioningMessage.aciIdentityKeyPublic!!.toByteArray()), ECPrivateKey(provisioningMessage.aciIdentityKeyPrivate!!.toByteArray())), profileKey = ProfileKey(provisioningMessage.profileKey!!.toByteArray()), areReadReceiptsEnabled = provisioningMessage.readReceipts == true, primaryUserAgent = provisioningMessage.userAgent, @@ -99,7 +99,7 @@ class SecondaryProvisioningCipher(private val secondaryIdentityKeyPair: Identity val message = body.sliceArray(0 until body.size - MAC_LENGTH) val cipherText = body.sliceArray((1 + IV_LENGTH) until body.size - MAC_LENGTH) - val sharedSecret = Curve.calculateAgreement(ECPublicKey(primaryEphemeralPublicKey), secondaryIdentityKeyPair.privateKey) + val sharedSecret = secondaryIdentityKeyPair.privateKey.calculateAgreement(ECPublicKey(primaryEphemeralPublicKey)) val derivedSecret: ByteArray = HKDF.deriveSecrets(sharedSecret, PrimaryProvisioningCipher.PROVISIONING_MESSAGE.toByteArray(), 64) val cipherKey = derivedSecret.sliceArray(0 until 32) diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PreKeyEntity.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PreKeyEntity.java index 488f62d119..1b0255413b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PreKeyEntity.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PreKeyEntity.java @@ -17,7 +17,6 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.core.util.Base64; @@ -59,7 +58,7 @@ public class PreKeyEntity { @Override public ECPublicKey deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { try { - return Curve.decodePoint(Base64.decode(p.getValueAsString()), 0); + return new ECPublicKey(Base64.decode(p.getValueAsString())); } catch (InvalidKeyException e) { throw new IOException(e); } diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java index e58e428f4a..b485560d9d 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/multidevice/DeviceContactsInputStreamTest.java @@ -1,15 +1,8 @@ package org.whispersystems.signalservice.api.messages.multidevice; import org.junit.Test; -import org.signal.libsignal.protocol.IdentityKey; -import org.signal.libsignal.protocol.ecc.Curve; -import org.signal.libsignal.protocol.ecc.ECKeyPair; import org.signal.libsignal.zkgroup.InvalidInputException; -import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.whispersystems.signalservice.api.push.ServiceId.ACI; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; -import org.whispersystems.signalservice.internal.util.Util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt index bf2e1b7e9e..c94b767184 100644 --- a/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/internal/crypto/SecondaryProvisioningCipherTest.kt @@ -12,7 +12,7 @@ import okio.ByteString import org.junit.Test import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair -import org.signal.libsignal.protocol.ecc.Curve +import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.zkgroup.profiles.ProfileKey import org.whispersystems.signalservice.internal.push.ProvisionEnvelope import org.whispersystems.signalservice.internal.push.ProvisionMessage @@ -59,7 +59,7 @@ class SecondaryProvisioningCipherTest { companion object { fun generateIdentityKeyPair(): IdentityKeyPair { - val djbKeyPair = Curve.generateKeyPair() + val djbKeyPair = ECKeyPair.generate() val djbIdentityKey = IdentityKey(djbKeyPair.publicKey) val djbPrivateKey = djbKeyPair.privateKey diff --git a/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt b/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt index b860037443..09e3317bbc 100644 --- a/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt +++ b/microbenchmark/src/androidTest/java/org/signal/util/SignalClient.kt @@ -10,10 +10,11 @@ import org.signal.libsignal.metadata.certificate.ServerCertificate import org.signal.libsignal.protocol.SessionBuilder import org.signal.libsignal.protocol.SignalProtocolAddress import org.signal.libsignal.protocol.UsePqRatchet -import org.signal.libsignal.protocol.ecc.Curve import org.signal.libsignal.protocol.ecc.ECKeyPair import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.groups.GroupSessionBuilder +import org.signal.libsignal.protocol.kem.KEMKeyPair +import org.signal.libsignal.protocol.kem.KEMKeyType import org.signal.libsignal.protocol.message.SenderKeyDistributionMessage import org.signal.libsignal.protocol.state.PreKeyBundle import org.signal.libsignal.protocol.state.PreKeyRecord @@ -46,7 +47,7 @@ import kotlin.random.Random */ class SignalClient { companion object { - private val trustRoot: ECKeyPair = Curve.generateKeyPair() + private val trustRoot: ECKeyPair = ECKeyPair.generate() } private val lock = TestSessionLock() @@ -167,22 +168,23 @@ class SignalClient { private fun createPreKeyBundle(): PreKeyBundle { val prekeyId = prekeyIndex++ - val preKeyRecord = PreKeyRecord(prekeyId, Curve.generateKeyPair()) - val signedPreKeyPair = Curve.generateKeyPair() - val signedPreKeySignature = Curve.calculateSignature(store.identityKeyPair.privateKey, signedPreKeyPair.publicKey.serialize()) + val preKeyRecord = PreKeyRecord(prekeyId, ECKeyPair.generate()) + val signedPreKeyPair = ECKeyPair.generate() + val signedPreKeySignature = store.identityKeyPair.privateKey.calculateSignature(signedPreKeyPair.publicKey.serialize()) + val kyerPair = KEMKeyPair.generate(KEMKeyType.KYBER_1024) store.storePreKey(prekeyId, preKeyRecord) store.storeSignedPreKey(prekeyId, SignedPreKeyRecord(prekeyId, System.currentTimeMillis(), signedPreKeyPair, signedPreKeySignature)) return PreKeyBundle( prekeyId, prekeyId, prekeyId, preKeyRecord.keyPair.publicKey, prekeyId, signedPreKeyPair.publicKey, signedPreKeySignature, store.identityKeyPair.publicKey, - PreKeyBundle.NULL_PRE_KEY_ID, null, null + PreKeyBundle.NULL_PRE_KEY_ID, kyerPair.publicKey, kyerPair.secretKey.serialize() ) } } private fun createCertificateFor(trustRoot: ECKeyPair, uuid: UUID, e164: String, deviceId: Int, identityKey: ECPublicKey, expires: Long): SenderCertificate { - val serverKey: ECKeyPair = Curve.generateKeyPair() + val serverKey: ECKeyPair = ECKeyPair.generate() NativeHandleGuard(serverKey.publicKey).use { serverPublicGuard -> NativeHandleGuard(trustRoot.privateKey).use { trustRootPrivateGuard -> val serverCertificate = ServerCertificate(Native.ServerCertificate_New(1, serverPublicGuard.nativeHandle(), trustRootPrivateGuard.nativeHandle()))