Skip to content

Commit 74193c6

Browse files
committed
feat: added serverId to decryptCommunity
so we can identify which msgs where decrypted correctly
1 parent c055c5f commit 74193c6

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
lines changed

include/multi_encrypt/multi_encrypt.hpp

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,19 @@ inline std::optional<std::span<const unsigned char>> extractProRotatingEd25519Pr
142142
inline std::vector<unsigned char> extractContentOrEnvelope(
143143
const Napi::Object& obj, const std::string identifier) {
144144
assertIsUInt8Array(obj.Get("contentOrEnvelope"), identifier);
145-
auto contentOrEnvelope = toCppBuffer(obj.Get("contentOrEnvelope"), identifier);
145+
std::vector<unsigned char> contentOrEnvelope =
146+
toCppBuffer(obj.Get("contentOrEnvelope"), identifier);
146147

147148
return contentOrEnvelope;
148149
}
149150

151+
inline uint32_t extractServerId(const Napi::Object& obj, const std::string identifier) {
152+
assertIsNumber(obj.Get("serverId"), identifier);
153+
auto serverId = toCppInteger(obj.Get("serverId"), identifier);
154+
155+
return serverId;
156+
}
157+
150158
inline std::chrono::sys_time<std::chrono::milliseconds> extractNowSysMs(
151159
const Napi::Object& obj, const std::string identifier) {
152160
assertIsNumber(obj.Get("nowMs"), identifier);
@@ -628,6 +636,7 @@ class MultiEncryptWrapper : public Napi::ObjectWrap<MultiEncryptWrapper> {
628636
// we expect two arguments that match:
629637
// first: [{
630638
// "contentOrEnvelope": Uint8Array,
639+
// "serverId": number,
631640
// }],
632641
// second: {
633642
// "nowMs": number,
@@ -653,7 +662,8 @@ class MultiEncryptWrapper : public Napi::ObjectWrap<MultiEncryptWrapper> {
653662
auto proBackendPubkeyHex = extractProBackendPubkeyHex(
654663
second, "decryptForCommunity.second.proBackendPubkeyHex");
655664

656-
std::vector<DecodedCommunityMessage> decrypted(first.Length());
665+
std::vector<DecodedCommunityMessage> decrypted;
666+
std::vector<uint32_t> decryptedServerIds;
657667

658668
for (uint32_t i = 0; i < first.Length(); i++) {
659669
auto itemValue = first.Get(i);
@@ -665,11 +675,14 @@ class MultiEncryptWrapper : public Napi::ObjectWrap<MultiEncryptWrapper> {
665675
auto obj = itemValue.As<Napi::Object>();
666676

667677
try {
668-
decrypted[i] = session::decode_for_community(
669-
extractContentOrEnvelope(
670-
obj, "decryptForCommunity.obj.contentOrEnvelope"),
671-
nowMs,
672-
proBackendPubkeyHex);
678+
uint32_t serverId = extractServerId(obj, "decryptForCommunity.obj.serverId");
679+
680+
auto contentOrEnvelope = extractContentOrEnvelope(
681+
obj, "decryptForCommunity.obj.contentOrEnvelope");
682+
decrypted.push_back(
683+
session::decode_for_community(
684+
contentOrEnvelope, nowMs, proBackendPubkeyHex));
685+
decryptedServerIds.push_back(serverId);
673686

674687
} catch (const std::exception& e) {
675688
log::warning(
@@ -682,6 +695,7 @@ class MultiEncryptWrapper : public Napi::ObjectWrap<MultiEncryptWrapper> {
682695

683696
auto ret = Napi::Array::New(info.Env(), decrypted.size());
684697
uint32_t i = 0;
698+
685699
for (auto& d : decrypted) {
686700
auto to_insert = Napi::Object::New(info.Env());
687701
std::span<unsigned char> content_plaintext_unpadded =
@@ -690,6 +704,7 @@ class MultiEncryptWrapper : public Napi::ObjectWrap<MultiEncryptWrapper> {
690704

691705
to_insert.Set(
692706
"contentPlaintextUnpadded", toJs(info.Env(), content_plaintext_unpadded));
707+
to_insert.Set("serverId", toJs(info.Env(), decryptedServerIds[i]));
693708
to_insert.Set(
694709
"envelope", d.envelope ? toJs(info.Env(), *d.envelope) : info.Env().Null());
695710

types/multi_encrypt/multi_encrypt.d.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ declare module 'libsession_util_nodejs' {
2323
type WithContentPlaintext = {
2424
contentPlaintextUnpadded: Uint8Array;
2525
};
26+
type WithServerId = {
27+
serverId: number;
28+
};
2629
type WithNowMs = { nowMs: number };
2730
type WithProBackendPubkey = {
2831
/**
@@ -130,9 +133,9 @@ declare module 'libsession_util_nodejs' {
130133
) => { encryptedData: Array<Uint8Array> };
131134

132135
decryptForCommunity: (
133-
first: Array<WithContentOrEnvelope>,
136+
first: Array<WithContentOrEnvelope & WithServerId>,
134137
second: WithNowMs & WithProBackendPubkey
135-
) => Array<WithProProof & WithDecryptedEnvelope & WithContentPlaintext>;
138+
) => Array<WithProProof & WithDecryptedEnvelope & WithContentPlaintext & WithServerId>;
136139
};
137140

138141
export type MultiEncryptActionsCalls = MakeWrapperActionCalls<MultiEncryptWrapper>;

0 commit comments

Comments
 (0)