Fix/signal group sender message keys init (#1731)

* fix(signal-group): initialize senderMessageKeys when deserializing SenderKeyState

* test(signal-group): add regression test for missing senderMessageKeys initialization
This commit is contained in:
João Lucas de Oliveira Lopes
2025-09-07 08:10:56 -03:00
committed by GitHub
parent d2adbaf3fc
commit 9573d5cbb7
2 changed files with 27 additions and 1 deletions
+5 -1
View File
@@ -37,7 +37,11 @@ export class SenderKeyState {
senderKeyStateStructure?: SenderKeyStateStructure | null
) {
if (senderKeyStateStructure) {
this.senderKeyStateStructure = senderKeyStateStructure
if (!Array.isArray(senderKeyStateStructure.senderMessageKeys)) {
this.senderKeyStateStructure = { ...senderKeyStateStructure, senderMessageKeys: [] }
} else {
this.senderKeyStateStructure = senderKeyStateStructure
}
} else {
if (signatureKeyPair) {
signatureKeyPublic = signatureKeyPair.public
@@ -0,0 +1,22 @@
import { SenderKeyState } from '../../../Signal/Group/sender-key-state'
import { SenderMessageKey } from '../../../Signal/Group/sender-message-key'
describe('SenderKeyState regression: missing senderMessageKeys array', () => {
it('should initialize senderMessageKeys when absent in provided structure', () => {
const legacyStructure = {
senderKeyId: 42,
senderChainKey: { iteration: 0, seed: Buffer.from([1, 2, 3]) },
senderSigningKey: { public: Buffer.from([4, 5, 6]) }
}
const state = new SenderKeyState(null, null, null, null, null, null, legacyStructure as any)
const msgKey = new SenderMessageKey(0, Buffer.from([7, 8, 9]))
state.addSenderMessageKey(msgKey)
const structure = state.getStructure()
expect(structure.senderMessageKeys).toBeDefined()
expect(Array.isArray(structure.senderMessageKeys)).toBe(true)
expect(structure.senderMessageKeys.length).toBe(1)
expect(structure.senderMessageKeys[0]?.iteration).toBe(0)
})
})