Documentation ¶
Overview ¶
Package socket implements a subset of the Noise protocol framework on top of websockets as used by WhatsApp.
There shouldn't be any need to manually interact with this package. The Client struct in the top-level whatsappprotocol package handles everything.
Index ¶
- Constants
- Variables
- type DisconnectHandler
- type FrameHandler
- type FrameSocket
- type NoiseHandshake
- func (nh *NoiseHandshake) Authenticate(data []byte)
- func (nh *NoiseHandshake) Decrypt(ciphertext []byte) (plaintext []byte, err error)
- func (nh *NoiseHandshake) Encrypt(plaintext []byte) []byte
- func (nh *NoiseHandshake) Finish(fs *FrameSocket, frameHandler FrameHandler, ...) (*NoiseSocket, error)
- func (nh *NoiseHandshake) MixIntoKey(data []byte) error
- func (nh *NoiseHandshake) MixSharedSecretIntoKey(priv, pub [32]byte) error
- func (nh *NoiseHandshake) Start(pattern string, header []byte)
- type NoiseSocket
- type Proxy
Constants ¶
View Source
const ( // Origin is the Origin header for all WhatsApp websocket connections Origin = "https://web.whatsapp.com" // URL is the websocket URL for the new multidevice protocol URL = "wss://web.whatsapp.com/ws/chat" )
View Source
const ( NoiseStartPattern = "Noise_XX_25519_AESGCM_SHA256\x00\x00\x00\x00" WAMagicValue = 5 )
View Source
const ( FrameMaxSize = 2 << 23 FrameLengthSize = 3 )
Variables ¶
View Source
var ( ErrFrameTooLarge = errors.New("frame too large") ErrSocketClosed = errors.New("frame socket is closed") ErrSocketAlreadyOpen = errors.New("frame socket is already open") )
View Source
var WAConnHeader = []byte{'W', 'A', WAMagicValue, token.DictVersion}
Functions ¶
This section is empty.
Types ¶
type DisconnectHandler ¶
type DisconnectHandler func(socket *NoiseSocket, remote bool)
type FrameHandler ¶
type FrameHandler func([]byte)
type FrameSocket ¶
type FrameSocket struct { Frames chan []byte OnDisconnect func(remote bool) WriteTimeout time.Duration Header []byte Proxy Proxy // contains filtered or unexported fields }
func NewFrameSocket ¶
func NewFrameSocket(log waLog.Logger, header []byte, proxy Proxy) *FrameSocket
func (*FrameSocket) Close ¶
func (fs *FrameSocket) Close(code int)
func (*FrameSocket) Connect ¶
func (fs *FrameSocket) Connect() error
func (*FrameSocket) Context ¶
func (fs *FrameSocket) Context() context.Context
func (*FrameSocket) IsConnected ¶
func (fs *FrameSocket) IsConnected() bool
func (*FrameSocket) SendFrame ¶
func (fs *FrameSocket) SendFrame(data []byte) error
type NoiseHandshake ¶
type NoiseHandshake struct {
// contains filtered or unexported fields
}
func NewNoiseHandshake ¶
func NewNoiseHandshake(log waLog.Logger) *NoiseHandshake
func (*NoiseHandshake) Authenticate ¶
func (nh *NoiseHandshake) Authenticate(data []byte)
func (*NoiseHandshake) Decrypt ¶
func (nh *NoiseHandshake) Decrypt(ciphertext []byte) (plaintext []byte, err error)
func (*NoiseHandshake) Encrypt ¶
func (nh *NoiseHandshake) Encrypt(plaintext []byte) []byte
func (*NoiseHandshake) Finish ¶
func (nh *NoiseHandshake) Finish(fs *FrameSocket, frameHandler FrameHandler, disconnectHandler DisconnectHandler) (*NoiseSocket, error)
func (*NoiseHandshake) MixIntoKey ¶
func (nh *NoiseHandshake) MixIntoKey(data []byte) error
func (*NoiseHandshake) MixSharedSecretIntoKey ¶
func (nh *NoiseHandshake) MixSharedSecretIntoKey(priv, pub [32]byte) error
func (*NoiseHandshake) Start ¶
func (nh *NoiseHandshake) Start(pattern string, header []byte)
type NoiseSocket ¶
type NoiseSocket struct {
// contains filtered or unexported fields
}
func (*NoiseSocket) Context ¶
func (ns *NoiseSocket) Context() context.Context
func (*NoiseSocket) IsConnected ¶
func (ns *NoiseSocket) IsConnected() bool
func (*NoiseSocket) SendFrame ¶
func (ns *NoiseSocket) SendFrame(plaintext []byte) error
func (*NoiseSocket) Stop ¶
func (ns *NoiseSocket) Stop(disconnect bool)
Click to show internal directories.
Click to hide internal directories.