exchange

package
v0.0.0-...-87e9d67 Latest Latest
Warning

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

Go to latest
Published: Oct 8, 2023 License: MIT Imports: 16 Imported by: 0

Documentation

Overview

Package exchange contains Telegram key exchange algorithm flows. See https://core.telegram.org/mtproto/auth_key.

Index

Constants

View Source
const DefaultTimeout = 1 * time.Minute

DefaultTimeout is default WithTimeout parameter value.

Variables

View Source
var ErrKeyFingerprintNotFound = errors.New("key fingerprint not found")

ErrKeyFingerprintNotFound is returned when client can't find keys by fingerprints provided by server during key exchange.

Functions

This section is empty.

Types

type ClientExchange

type ClientExchange struct {
	// contains filtered or unexported fields
}

ClientExchange is a client-side key exchange flow.

func (ClientExchange) Run

Run runs client-side flow.

type ClientExchangeResult

type ClientExchangeResult struct {
	AuthKey    crypto.AuthKey
	SessionID  int64
	ServerSalt int64
}

ClientExchangeResult contains client part of key exchange result.

type Exchanger

type Exchanger struct {
	// contains filtered or unexported fields
}

Exchanger is builder for key exchangers.

func NewExchanger

func NewExchanger(conn transport.Conn, dc int) Exchanger

NewExchanger creates new Exchanger.

func (Exchanger) Client

func (e Exchanger) Client(keys []PublicKey) ClientExchange

Client creates new ClientExchange using parameters from Exchanger.

func (Exchanger) Server

func (e Exchanger) Server(key PrivateKey) ServerExchange

Server creates new ServerExchange using parameters from Exchanger.

func (Exchanger) WithClock

func (e Exchanger) WithClock(c clock.Clock) Exchanger

WithClock sets exchange flow clock.

func (Exchanger) WithLogger

func (e Exchanger) WithLogger(log *zap.Logger) Exchanger

WithLogger sets exchange flow logger.

func (Exchanger) WithRand

func (e Exchanger) WithRand(reader io.Reader) Exchanger

WithRand sets exchange flow random source.

func (Exchanger) WithTimeout

func (e Exchanger) WithTimeout(timeout time.Duration) Exchanger

WithTimeout sets write/read deadline of every exchange request.

type PrivateKey

type PrivateKey struct {
	// RSA private key.
	RSA *rsa.PrivateKey
}

PrivateKey is a private Telegram server key.

func (PrivateKey) Fingerprint

func (k PrivateKey) Fingerprint() int64

Fingerprint computes key fingerprint.

func (PrivateKey) Public

func (k PrivateKey) Public() PublicKey

Public returns PublicKey of this PrivateKey pair.

func (PrivateKey) Zero

func (k PrivateKey) Zero() bool

Zero denotes that current PublicKey is zero value.

type PublicKey

type PublicKey struct {
	// RSA public key.
	RSA *rsa.PublicKey
}

PublicKey is a public Telegram server key.

func (PublicKey) Fingerprint

func (k PublicKey) Fingerprint() int64

Fingerprint computes key fingerprint.

func (PublicKey) Zero

func (k PublicKey) Zero() bool

Zero denotes that current PublicKey is zero value.

type ServerExchange

type ServerExchange struct {
	// contains filtered or unexported fields
}

ServerExchange is a server-side key exchange flow.

func (ServerExchange) Run

Run runs server-side flow. If b parameter is not nil, it will be used as first read message. Otherwise, it will be read from connection.

type ServerExchangeError

type ServerExchangeError struct {
	Code int32
	Err  error
}

ServerExchangeError is returned when exchange fails due to some security or validation checks.

func (*ServerExchangeError) Error

func (s *ServerExchangeError) Error() string

Error implements error.

func (*ServerExchangeError) Unwrap

func (s *ServerExchangeError) Unwrap() error

Unwrap implements error wrapper interface.

type ServerExchangeResult

type ServerExchangeResult struct {
	Key        crypto.AuthKey
	ServerSalt int64
}

ServerExchangeResult contains server part of key exchange result.

type ServerRNG

type ServerRNG interface {
	PQ() (pq *big.Int, err error)
	GA(g int, dhPrime *big.Int) (a, ga *big.Int, err error)
	DhPrime() (p *big.Int, err error)
}

ServerRNG is server-side random number generator.

type TestServerRNG

type TestServerRNG struct {
	// contains filtered or unexported fields
}

TestServerRNG implements testing-only ServerRNG.

func (TestServerRNG) DhPrime

func (s TestServerRNG) DhPrime() (p *big.Int, err error)

DhPrime always returns testing dh_prime.

func (TestServerRNG) GA

func (s TestServerRNG) GA(g int, dhPrime *big.Int) (a, ga *big.Int, err error)

GA returns testing a and g_a params.

func (TestServerRNG) PQ

func (s TestServerRNG) PQ() (pq *big.Int, err error)

PQ always returns testing pq value.

nolint:unparam

Jump to

Keyboard shortcuts

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