Documentation ¶
Overview ¶
Package exchange contains Telegram key exchange algorithm flows. See https://core.telegram.org/mtproto/auth_key.
Index ¶
- Constants
- Variables
- type ClientExchange
- type ClientExchangeResult
- type Exchanger
- func (e Exchanger) Client(keys []PublicKey) ClientExchange
- func (e Exchanger) Server(key PrivateKey) ServerExchange
- func (e Exchanger) WithClock(c clock.Clock) Exchanger
- func (e Exchanger) WithLogger(log *zap.Logger) Exchanger
- func (e Exchanger) WithRand(reader io.Reader) Exchanger
- func (e Exchanger) WithTimeout(timeout time.Duration) Exchanger
- type PrivateKey
- type PublicKey
- type ServerExchange
- type ServerExchangeError
- type ServerExchangeResult
- type ServerRNG
- type TestServerRNG
Constants ¶
const DefaultTimeout = 1 * time.Minute
DefaultTimeout is default WithTimeout parameter value.
Variables ¶
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 ¶
func (c ClientExchange) Run(ctx context.Context) (ClientExchangeResult, error)
Run runs client-side flow.
type ClientExchangeResult ¶
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 ¶
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) WithLogger ¶
WithLogger sets exchange flow logger.
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 ¶
PublicKey is a public Telegram server key.
func (PublicKey) Fingerprint ¶
Fingerprint computes key fingerprint.
type ServerExchange ¶
type ServerExchange struct {
// contains filtered or unexported fields
}
ServerExchange is a server-side key exchange flow.
func (ServerExchange) Run ¶
func (s ServerExchange) Run(ctx context.Context) (ServerExchangeResult, error)
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 ¶
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 ¶
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.