Skip to content

@mega-yfue/eufy-sdk / p2pCodec / deriveLevel2KeyFromGatewayInfo

Function: deriveLevel2KeyFromGatewayInfo()

ts
function deriveLevel2KeyFromGatewayInfo(gwPayload, eccPrivateKeyHex): Buffer<ArrayBufferLike> | undefined;

Derive the P2P level-2 (signCode 2/8) AES-256-GCM session key from a decryptedCMD_GATEWAYINFO (1100) payload and the station's ECC private key (from get_ciphers).

Layout of the decrypted payload: cipher_id(2 LE) ‖ 0000 ‖ ECIES-envelope(129), where the envelope is ephemeralPub(33, compressed P-256) ‖ iv(16) ‖ ciphertext(48). ECIES = ECDH(eccPriv, ephemeralPub) → eufyKDF(SHA-256/HMAC, label "ECIES") → AES-128-CBC decrypt → 32-byte session key. Reversed from libmega_media_sdk.so; verified to reproduce the live key. Returns the 32-byte key, or undefined if the inputs don't parse.

Parameters

gwPayload

Buffer

eccPrivateKeyHex

string

Returns

Buffer<ArrayBufferLike> | undefined

Independent and unofficial. Not affiliated with, endorsed by, or sponsored by Anker Innovations, Anker eufy, or eufy. "Anker eufy", "eufy" and "Anker" are trademarks of their respective owners. Use responsibly — rapid or failed logins can trigger captcha or temporary cooldowns.