Repository navigation
Commit 7c88cbb
committed
fix(libsignal): keep skipped message-key seeds projectable
A session that skipped a message key could not be exported to the v1
model: v1 expresses a message key as its 32-byte seed, the native format
persisted only the derived cipher/mac/iv, and that derivation has no
inverse. The round trip was lossy from the first cycle, so importing a v1
record and exporting it back already failed with ChainNotRepresentable.
The seed now rides along with the keys it derives, in a new local field
on SessionStructure.Chain.MessageKey. It is written unconditionally: the
persisted format must not vary with build flags, or a binary without
legacy-session-interop would erase what one with it wrote. The derived
triple stays, so a build that ignores the seed still loads the record and
decrypts; only the export path reads it.
The field is declared in build.rs and spliced into the descriptor rather
than added to whatsapp.proto, which is regenerated wholesale from
whatspec and would lose it on the next sync. Field number 100, because
upstream appends low numbers without warning - kyberPreKeyId = 4 and
kyberCiphertext = 5 landed on SessionStructure.PendingPreKey that way -
and a collision would silently reinterpret the seed in every record
already on disk. The splice now fails the build on such a collision
instead of resolving it.
SessionMessageKeyMaterial carries fixed-width arrays instead of Vec<u8>.
The lengths were already invariants enforced at every conversion; in the
type they cost no allocation and no runtime check.
Writing the four persisted fields out of one buffer keeps the
skipped-key path at a single allocation, down from three before this
change.1 parent 786c635 commit 7c88cbb
8 files changed
Lines changed: 809 additions & 133 deletions
File tree
- .github/workflows
- wacore/libsignal
- src/protocol
- ratchet
- state
- tests
- waproto
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
157 | 157 | | |
158 | 158 | | |
159 | 159 | | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
160 | 164 | | |
161 | 165 | | |
162 | 166 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| 35 | + | |
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
569 | 569 | | |
570 | 570 | | |
571 | 571 | | |
572 | | - | |
573 | | - | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
574 | 576 | | |
575 | 577 | | |
576 | 578 | | |
| |||
961 | 963 | | |
962 | 964 | | |
963 | 965 | | |
964 | | - | |
| 966 | + | |
| 967 | + | |
| 968 | + | |
| 969 | + | |
965 | 970 | | |
966 | 971 | | |
967 | 972 | | |
| |||
1208 | 1213 | | |
1209 | 1214 | | |
1210 | 1215 | | |
1211 | | - | |
1212 | | - | |
1213 | | - | |
1214 | | - | |
1215 | | - | |
1216 | | - | |
1217 | | - | |
1218 | | - | |
1219 | | - | |
1220 | | - | |
| 1216 | + | |
| 1217 | + | |
1221 | 1218 | | |
1222 | 1219 | | |
1223 | | - | |
1224 | | - | |
1225 | | - | |
1226 | | - | |
1227 | | - | |
| 1220 | + | |
| 1221 | + | |
1228 | 1222 | | |
1229 | | - | |
| 1223 | + | |
| 1224 | + | |
| 1225 | + | |
| 1226 | + | |
| 1227 | + | |
| 1228 | + | |
| 1229 | + | |
| 1230 | + | |
1230 | 1231 | | |
1231 | 1232 | | |
1232 | | - | |
| 1233 | + | |
1233 | 1234 | | |
1234 | 1235 | | |
1235 | 1236 | | |
| |||
1659 | 1660 | | |
1660 | 1661 | | |
1661 | 1662 | | |
1662 | | - | |
| 1663 | + | |
1663 | 1664 | | |
1664 | | - | |
| 1665 | + | |
| 1666 | + | |
| 1667 | + | |
| 1668 | + | |
| 1669 | + | |
| 1670 | + | |
| 1671 | + | |
| 1672 | + | |
| 1673 | + | |
| 1674 | + | |
| 1675 | + | |
| 1676 | + | |
| 1677 | + | |
| 1678 | + | |
| 1679 | + | |
1665 | 1680 | | |
1666 | | - | |
1667 | | - | |
| 1681 | + | |
| 1682 | + | |
| 1683 | + | |
| 1684 | + | |
1668 | 1685 | | |
1669 | 1686 | | |
1670 | | - | |
1671 | | - | |
1672 | | - | |
1673 | | - | |
1674 | | - | |
1675 | | - | |
1676 | | - | |
1677 | | - | |
1678 | | - | |
1679 | | - | |
1680 | | - | |
1681 | | - | |
1682 | | - | |
| 1687 | + | |
| 1688 | + | |
| 1689 | + | |
| 1690 | + | |
| 1691 | + | |
| 1692 | + | |
| 1693 | + | |
| 1694 | + | |
| 1695 | + | |
| 1696 | + | |
| 1697 | + | |
| 1698 | + | |
| 1699 | + | |
| 1700 | + | |
| 1701 | + | |
| 1702 | + | |
| 1703 | + | |
| 1704 | + | |
| 1705 | + | |
| 1706 | + | |
| 1707 | + | |
| 1708 | + | |
| 1709 | + | |
| 1710 | + | |
| 1711 | + | |
| 1712 | + | |
| 1713 | + | |
| 1714 | + | |
1683 | 1715 | | |
1684 | 1716 | | |
1685 | 1717 | | |
| |||
1813 | 1845 | | |
1814 | 1846 | | |
1815 | 1847 | | |
1816 | | - | |
| 1848 | + | |
| 1849 | + | |
| 1850 | + | |
1817 | 1851 | | |
1818 | | - | |
| 1852 | + | |
| 1853 | + | |
| 1854 | + | |
| 1855 | + | |
| 1856 | + | |
| 1857 | + | |
| 1858 | + | |
| 1859 | + | |
| 1860 | + | |
| 1861 | + | |
| 1862 | + | |
| 1863 | + | |
| 1864 | + | |
| 1865 | + | |
| 1866 | + | |
| 1867 | + | |
| 1868 | + | |
| 1869 | + | |
| 1870 | + | |
| 1871 | + | |
| 1872 | + | |
1819 | 1873 | | |
1820 | 1874 | | |
1821 | 1875 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
22 | | - | |
23 | 21 | | |
24 | 22 | | |
25 | 23 | | |
| |||
37 | 35 | | |
38 | 36 | | |
39 | 37 | | |
40 | | - | |
41 | 38 | | |
42 | 39 | | |
43 | 40 | | |
| |||
71 | 68 | | |
72 | 69 | | |
73 | 70 | | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
74 | 75 | | |
75 | 76 | | |
76 | 77 | | |
77 | 78 | | |
78 | 79 | | |
79 | | - | |
80 | | - | |
81 | | - | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
82 | 98 | | |
83 | | - | |
84 | | - | |
85 | | - | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
86 | 102 | | |
| 103 | + | |
87 | 104 | | |
88 | 105 | | |
89 | 106 | | |
| |||
109 | 126 | | |
110 | 127 | | |
111 | 128 | | |
112 | | - | |
113 | 129 | | |
114 | 130 | | |
115 | 131 | | |
| |||
463 | 479 | | |
464 | 480 | | |
465 | 481 | | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
466 | 554 | | |
467 | 555 | | |
468 | 556 | | |
| |||
0 commit comments