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()))