From 9e09de831fc1e9b62b9169773d05bec0506cf670 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Thu, 19 May 2022 19:00:29 +1000 Subject: [PATCH] Extract decoding of size of payload size field --- src/lib/waku_message/version_1.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/lib/waku_message/version_1.ts b/src/lib/waku_message/version_1.ts index 47e7d16b07..8a3a4b7302 100644 --- a/src/lib/waku_message/version_1.ts +++ b/src/lib/waku_message/version_1.ts @@ -43,7 +43,7 @@ export async function clearEncode( // Calculate padding: let rawSize = FlagsLength + - getSizeOfPayloadSizeField(messagePayload) + + computeSizeOfPayloadSizeField(messagePayload) + messagePayload.length; if (sigPrivKey) { @@ -91,8 +91,7 @@ export function clearDecode( let start = 1; let sig; - const sizeOfPayloadSizeField = buf.readUIntLE(0, 1) & FlagMask; - + const sizeOfPayloadSizeField = getSizeOfPayloadSizeField(message); if (sizeOfPayloadSizeField === 0) return; const payloadSize = buf.readUIntLE(start, sizeOfPayloadSizeField); @@ -110,6 +109,11 @@ export function clearDecode( return { payload, sig }; } +function getSizeOfPayloadSizeField(message: Uint8Array): number { + const buf = Buffer.from(message); + return buf.readUIntLE(0, 1) & FlagMask; +} + /** * Proceed with Asymmetric encryption of the data as per [26/WAKU-PAYLOAD](https://rfc.vac.dev/spec/26/). * The data MUST be flags | payload-length | payload | [signature]. @@ -205,7 +209,7 @@ export function getPublicKey(privateKey: Uint8Array): Uint8Array { * Computes the flags & auxiliary-field as per [26/WAKU-PAYLOAD](https://rfc.vac.dev/spec/26/). */ function addPayloadSizeField(msg: Uint8Array, payload: Uint8Array): Uint8Array { - const fieldSize = getSizeOfPayloadSizeField(payload); + const fieldSize = computeSizeOfPayloadSizeField(payload); let field = new Uint8Array(4); const fieldDataView = new DataView(field.buffer); fieldDataView.setUint32(0, payload.length, true); @@ -218,7 +222,7 @@ function addPayloadSizeField(msg: Uint8Array, payload: Uint8Array): Uint8Array { /** * Returns the size of the auxiliary-field which in turns contains the payload size */ -function getSizeOfPayloadSizeField(payload: Uint8Array): number { +function computeSizeOfPayloadSizeField(payload: Uint8Array): number { let s = 1; for (let i = payload.length; i >= 256; i /= 256) { s++;