From 357ef1e59977d05a0c256bb792e23e7790d49b94 Mon Sep 17 00:00:00 2001 From: Rajeh Taher Date: Sun, 28 Sep 2025 18:59:57 +0300 Subject: [PATCH] defaults, validate: fix account signature check for non-hosted JIDs --- src/Defaults/index.ts | 9 ++++----- src/Utils/validate-connection.ts | 11 +++++++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/Defaults/index.ts b/src/Defaults/index.ts index 18bd1efd..adccb124 100644 --- a/src/Defaults/index.ts +++ b/src/Defaults/index.ts @@ -15,11 +15,10 @@ export const DEF_CALLBACK_PREFIX = 'CB:' export const DEF_TAG_PREFIX = 'TAG:' export const PHONE_CONNECTION_CB = 'CB:Pong' - -export const WA_ADV_ACCOUNT_SIG_PREFIX = Buffer.from([6,0]) -export const WA_ADV_DEVICE_SIG_PREFIX = Buffer.from([6,1]) -export const WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX = Buffer.from([6,5]) -export const WA_ADV_HOSTED_DEVICE_SIG_PREFIX = Buffer.from([6,6]) +export const WA_ADV_ACCOUNT_SIG_PREFIX = Buffer.from([6, 0]) +export const WA_ADV_DEVICE_SIG_PREFIX = Buffer.from([6, 1]) +export const WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX = Buffer.from([6, 5]) +export const WA_ADV_HOSTED_DEVICE_SIG_PREFIX = Buffer.from([6, 6]) export const WA_DEFAULT_EPHEMERAL = 7 * 24 * 60 * 60 diff --git a/src/Utils/validate-connection.ts b/src/Utils/validate-connection.ts index f4095c69..9000f90e 100644 --- a/src/Utils/validate-connection.ts +++ b/src/Utils/validate-connection.ts @@ -1,7 +1,13 @@ import { Boom } from '@hapi/boom' import { createHash } from 'crypto' import { proto } from '../../WAProto/index.js' -import { KEY_BUNDLE_TYPE, WA_ADV_ACCOUNT_SIG_PREFIX, WA_ADV_DEVICE_SIG_PREFIX, WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX, WA_ADV_HOSTED_DEVICE_SIG_PREFIX } from '../Defaults' +import { + KEY_BUNDLE_TYPE, + WA_ADV_ACCOUNT_SIG_PREFIX, + WA_ADV_DEVICE_SIG_PREFIX, + WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX, + WA_ADV_HOSTED_DEVICE_SIG_PREFIX +} from '../Defaults' import type { AuthenticationCreds, SignalCreds, SocketConfig } from '../Types' import { type BinaryNode, getBinaryNodeChild, jidDecode, S_WHATSAPP_NET } from '../WABinary' import { Curve, hmacSign } from './crypto' @@ -151,7 +157,8 @@ export const configureSuccessfulPairing = ( const account = decodeAndHydrate(proto.ADVSignedDeviceIdentity, details) const { accountSignatureKey, accountSignature, details: deviceDetails } = account - const accountMsg = Buffer.concat([accountPrefix, deviceDetails, signedIdentityKey.public]) + const accountSignaturePrefix = isHostedAccount ? WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX : WA_ADV_ACCOUNT_SIG_PREFIX + const accountMsg = Buffer.concat([accountSignaturePrefix, deviceDetails, signedIdentityKey.public]) if (!Curve.verify(accountSignatureKey, accountMsg, accountSignature)) { throw new Boom('Failed to verify account signature') }