appstate

package
v0.0.0-...-3cec37e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 7, 2022 License: MPL-2.0 Imports: 19 Imported by: 0

Documentation

Overview

Package appstate implements encoding and decoding WhatsApp's app state patches.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrMissingPreviousSetValueOperation = errors.New("missing value MAC of previous SET operation")
	ErrMismatchingLTHash                = errors.New("mismatching LTHash")
	ErrMismatchingPatchMAC              = errors.New("mismatching patch MAC")
	ErrMismatchingContentMAC            = errors.New("mismatching content MAC")
	ErrMismatchingIndexMAC              = errors.New("mismatching index MAC")
	ErrKeyNotFound                      = errors.New("didn't find app state key")
)

Errors that this package can return.

AllPatchNames contains all currently known patch state names.

Functions

This section is empty.

Types

type DownloadExternalFunc

type DownloadExternalFunc func(*waProto.ExternalBlobReference) ([]byte, error)

DownloadExternalFunc is a function that can download a blob of external app state patches.

type ExpandedAppStateKeys

type ExpandedAppStateKeys struct {
	Index           []byte
	ValueEncryption []byte
	ValueMAC        []byte
	SnapshotMAC     []byte
	PatchMAC        []byte
}

type HashState

type HashState struct {
	Version uint64
	Hash    [128]byte
}

type Mutation

type Mutation struct {
	Operation waProto.SyncdMutation_SyncdOperation
	Action    *waProto.SyncActionValue
	Index     []string
	IndexMAC  []byte
	ValueMAC  []byte
}

type PatchList

type PatchList struct {
	Name           WAPatchName
	HasMorePatches bool
	Patches        []*waProto.SyncdPatch
	Snapshot       *waProto.SyncdSnapshot
}

PatchList represents a decoded response to getting app state patches from the WhatsApp servers.

func ParsePatchList

func ParsePatchList(node *waBinary.Node, downloadExternal DownloadExternalFunc) (*PatchList, error)

ParsePatchList will decode an XML node containing app state patches, including downloading any external blobs.

type Processor

type Processor struct {
	Store *store.Device
	Log   waLog.Logger
	// contains filtered or unexported fields
}

func NewProcessor

func NewProcessor(store *store.Device, log waLog.Logger) *Processor

func (*Processor) DecodePatches

func (proc *Processor) DecodePatches(list *PatchList, initialState HashState, validateMACs bool) (newMutations []Mutation, currentState HashState, err error)

DecodePatches will decode all the patches in a PatchList into a list of app state mutations.

func (*Processor) GetMissingKeyIDs

func (proc *Processor) GetMissingKeyIDs(pl *PatchList) [][]byte

type WAPatchName

type WAPatchName string

WAPatchName represents a type of app state patch.

const (
	// WAPatchCriticalBlock contains the user's settings like push name and locale.
	WAPatchCriticalBlock WAPatchName = "critical_block"
	// WAPatchCriticalUnblockLow contains the user's contact list.
	WAPatchCriticalUnblockLow WAPatchName = "critical_unblock_low"
	// WAPatchRegularLow contains some local chat settings like pin, archive status, and the setting of whether to unarchive chats when messages come in.
	WAPatchRegularLow WAPatchName = "regular_low"
	// WAPatchRegularHigh contains more local chat settings like mute status and starred messages.
	WAPatchRegularHigh WAPatchName = "regular_high"
	// WAPatchRegular contains protocol info about app state patches like key expiration.
	WAPatchRegular WAPatchName = "regular"
)

Directories

Path Synopsis
Package lthash implements a summation based hash algorithm that maintains the integrity of a piece of data over a series of mutations.
Package lthash implements a summation based hash algorithm that maintains the integrity of a piece of data over a series of mutations.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL