Amarula.Protocol.Auth.AuthUtils (amarula v0.1.0)

View Source

Authentication utilities for WhatsApp credential generation and management.

This module provides functions for generating and managing authentication credentials required for WhatsApp WebSocket connections, including noise keys, signed identity keys, pre-keys, and registration data.

Summary

Functions

Create device properties for registration.

Create user agent information for ClientPayload.

Create web info for ClientPayload.

Generate login node for existing sessions.

Generate registration node for new connections.

Initialize new authentication credentials.

Types

auth_creds()

@type auth_creds() :: %{
  noise_key: Amarula.Protocol.Crypto.Crypto.key_pair(),
  signed_identity_key: Amarula.Protocol.Crypto.Crypto.key_pair(),
  signed_pre_key: %{
    key_pair: Amarula.Protocol.Crypto.Crypto.key_pair(),
    signature: binary(),
    key_id: non_neg_integer()
  },
  registration_id: non_neg_integer(),
  adv_secret_key: binary(),
  next_pre_key_id: non_neg_integer(),
  first_unuploaded_pre_key_id: non_neg_integer(),
  pre_keys: map(),
  me: %{id: String.t(), name: String.t(), lid: String.t()} | nil,
  account: map() | nil,
  signal_identities: [map()],
  platform: String.t() | nil,
  pairing_ephemeral_key_pair: Amarula.Protocol.Crypto.Crypto.key_pair(),
  pairing_code: String.t() | nil,
  registered: boolean()
}

socket_config()

@type socket_config() :: %{
  version: [non_neg_integer()],
  browser: [String.t()],
  country_code: String.t(),
  sync_full_history: boolean()
}

Functions

create_device_props(config)

@spec create_device_props(socket_config()) :: Amarula.Protocol.Proto.DeviceProps.t()

Create device properties for registration.

create_user_agent(config)

@spec create_user_agent(socket_config()) ::
  Amarula.Protocol.Proto.ClientPayload.UserAgent.t()

Create user agent information for ClientPayload.

create_web_info(config)

@spec create_web_info(socket_config()) ::
  Amarula.Protocol.Proto.ClientPayload.WebInfo.t()

Create web info for ClientPayload.

generate_login_node(user_jid, config)

@spec generate_login_node(binary(), socket_config()) ::
  %Amarula.Protocol.Proto.ClientPayload{
    __unknown_fields__: term(),
    accountType: term(),
    connectAttemptCount: term(),
    connectReason: term(),
    connectType: term(),
    connectionSequenceInfo: term(),
    device: term(),
    devicePairingData: term(),
    dnsSource: term(),
    fbAppId: term(),
    fbCat: term(),
    fbDeviceId: term(),
    fbUserAgent: term(),
    interopData: term(),
    iosAppExtension: term(),
    lc: term(),
    lidDbMigrated: term(),
    memClass: term(),
    oc: term(),
    paaLink: term(),
    paddingBytes: term(),
    passive: term(),
    preacksCount: term(),
    processingQueueSize: term(),
    product: term(),
    pull: term(),
    pushName: term(),
    sessionId: term(),
    shards: term(),
    shortConnect: term(),
    trafficAnonymization: term(),
    userAgent: term(),
    username: term(),
    webInfo: term(),
    yearClass: term()
  }

Generate login node for existing sessions.

Creates a ClientPayload for logging into an existing WhatsApp session.

generate_registration_node(creds, config)

@spec generate_registration_node(any(), socket_config()) ::
  %Amarula.Protocol.Proto.ClientPayload{
    __unknown_fields__: term(),
    accountType: term(),
    connectAttemptCount: term(),
    connectReason: term(),
    connectType: term(),
    connectionSequenceInfo: term(),
    device: term(),
    devicePairingData: term(),
    dnsSource: term(),
    fbAppId: term(),
    fbCat: term(),
    fbDeviceId: term(),
    fbUserAgent: term(),
    interopData: term(),
    iosAppExtension: term(),
    lc: term(),
    lidDbMigrated: term(),
    memClass: term(),
    oc: term(),
    paaLink: term(),
    paddingBytes: term(),
    passive: term(),
    preacksCount: term(),
    processingQueueSize: term(),
    product: term(),
    pull: term(),
    pushName: term(),
    sessionId: term(),
    shards: term(),
    shortConnect: term(),
    trafficAnonymization: term(),
    userAgent: term(),
    username: term(),
    webInfo: term(),
    yearClass: term()
  }

Generate registration node for new connections.

Creates a ClientPayload for device registration with WhatsApp servers.

init_auth_creds()

@spec init_auth_creds() :: auth_creds()

Initialize new authentication credentials.

Generates all required keys and credentials for a new WhatsApp connection. Returns a map with all authentication data.