Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

nonce_request.go 968B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package rpc
  2. import (
  3. "bytes"
  4. "crypto/rand"
  5. "encoding/binary"
  6. "time"
  7. "github.com/juju/errors"
  8. )
  9. type NonceRequest struct {
  10. KeySelector []byte
  11. CryptoTS []byte
  12. Nonce []byte
  13. }
  14. func (r *NonceRequest) Bytes() []byte {
  15. buf := &bytes.Buffer{}
  16. buf.Write(TagNonce)
  17. buf.Write(r.KeySelector)
  18. buf.Write(NonceCryptoAES)
  19. buf.Write(r.CryptoTS)
  20. buf.Write(r.Nonce)
  21. return buf.Bytes()
  22. }
  23. func NewNonceRequest(proxySecret []byte) (*NonceRequest, error) {
  24. nonce := make([]byte, 16)
  25. keySelector := make([]byte, 4)
  26. cryptoTS := make([]byte, 4)
  27. if _, err := rand.Read(nonce); err != nil {
  28. return nil, errors.Annotate(err, "Cannot generate nonce")
  29. }
  30. copy(keySelector, proxySecret)
  31. timestamp := time.Now().Truncate(time.Second).Unix() % 4294967296 // 256 ^ 4 - do not know how to name
  32. binary.LittleEndian.PutUint32(cryptoTS, uint32(timestamp))
  33. return &NonceRequest{
  34. KeySelector: keySelector,
  35. CryptoTS: cryptoTS,
  36. Nonce: nonce,
  37. }, nil
  38. }