mirror of
https://github.com/ratspeak/ratdeck.git
synced 2026-08-28 22:08:32 +00:00
Fix messageId hash to exclude signature, matching Python/Rust
PlatformIO Build / build (push) Failing after 7m56s
PlatformIO Build / release (push) Has been skipped
PlatformIO Build / build (push) Failing after 7m56s
PlatformIO Build / release (push) Has been skipped
messageId was computed as SHA256(dest+src+sig+payload) but Python/Rust compute SHA256(dest+src+payload) — skipping the 64-byte signature. This caused message ID mismatches across implementations, breaking deduplication and propagation node lookups.
This commit is contained in:
@@ -155,8 +155,14 @@ bool LXMFMessage::unpackFull(const uint8_t* data, size_t len, LXMFMessage& msg)
|
||||
if (!mpReadString(content, contentLen, pos, msg.content)) return false;
|
||||
if (arrLen >= 4 && pos < contentLen) { mpSkipValue(content, contentLen, pos); }
|
||||
|
||||
RNS::Bytes fullPayload(data, len);
|
||||
msg.messageId = RNS::Identity::full_hash(fullPayload);
|
||||
// messageId = SHA256(dest + src + packed_content), matching Python/Rust
|
||||
// (skip signature at bytes 32..96)
|
||||
std::vector<uint8_t> hashInput;
|
||||
hashInput.reserve(32 + (len - 96));
|
||||
hashInput.insert(hashInput.end(), data, data + 32); // dest_hash + src_hash
|
||||
hashInput.insert(hashInput.end(), data + 96, data + len); // packed_content
|
||||
RNS::Bytes hashable(hashInput.data(), hashInput.size());
|
||||
msg.messageId = RNS::Identity::full_hash(hashable);
|
||||
msg.incoming = true;
|
||||
msg.status = LXMFStatus::DELIVERED;
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user