diff --git a/packages/core/src/controllers/crypto.ts b/packages/core/src/controllers/crypto.ts index fa649c3c4..9d33b1f88 100644 --- a/packages/core/src/controllers/crypto.ts +++ b/packages/core/src/controllers/crypto.ts @@ -106,12 +106,13 @@ export class Crypto implements ICrypto { public encode: ICrypto["encode"] = async (topic, payload, opts) => { this.isInitialized(); const params = validateEncoding(opts); - const message = safeJsonStringify(payload); if (isTypeOneEnvelope(params)) { const selfPublicKey = params.senderPublicKey; const peerPublicKey = params.receiverPublicKey; topic = await this.generateSharedKey(selfPublicKey, peerPublicKey); } + const protectedPayload = { topic, ...payload }; + const message = safeJsonStringify(protectedPayload); const symKey = this.getSymKey(topic); const { type, senderPublicKey } = params; const result = encrypt({ type, symKey, message, senderPublicKey }); @@ -130,6 +131,12 @@ export class Crypto implements ICrypto { const symKey = this.getSymKey(topic); const message = decrypt({ symKey, encoded }); const payload = safeJsonParse(message); + if (typeof payload.topic !== "undefined") { + if (payload.topic !== topic) { + throw new Error("Mismatched topic decoded from message"); + } + delete payload.topic; + } return payload; } catch (error) { this.logger.error(