C Python
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
tgcrypto Fix indentation, use spaces instead of tabs Mar 26, 2018
.gitignore Initial commit Jan 27, 2018
COPYING Initial commit Jan 27, 2018
COPYING.lesser Initial commit Jan 27, 2018
MANIFEST.in Initial commit Jan 27, 2018
NOTICE Initial commit Jan 27, 2018
README.rst Use pip3 command instead of pip Mar 11, 2018
setup.py Update to v1.0.4 Mar 26, 2018

README.rst

Pyrogram Icon
TgCrypto Logo

Fast Telegram Crypto Library for Python
Download Documentation Community

TgCrypto

Table of Contents

About

TgCrypto is a high-performance, easy-to-install Telegram Crypto Library written in C as a Python extension. TgCrypto is intended for Pyrogram [1] and implements the crypto algorithms Telegram requires, namely AES-IGE 256 bit (used in MTProto v2.0) and AES-CTR 256 bit (used for CDN encrypted files).

Installation

$ pip3 install --upgrade tgcrypto

Note: Being a C extension for Python, TgCrypto is an optional but highly recommended Pyrogram dependency; if TgCrypto is not detected in your system, Pyrogram will automatically fall back to the much slower PyAES and will show you a warning.

The reason about being an optional package is that TgCrypto requires some extra system tools in order to be compiled. The errors you receive when trying to install TgCrypto are system dependent, but also descriptive enough to understand what you should do next:

  • Windows: Install Visual C++ 2015 Build Tools.
  • macOS: A pop-up will automatically ask you to install the command line developer tools.
  • Linux: Install a proper C compiler (gcc, clang) and the Python header files (python3-dev).
  • Termux (Android): Install clang and python-dev packages.

API

TgCrypto API consists of these four functions:

def ige_encrypt(data: bytes, key: bytes, iv: bytes) -> bytes:
def ige_decrypt(data: bytes, key: bytes, iv: bytes) -> bytes:
def ctr_encrypt(data: bytes, key: bytes, iv: bytes) -> bytes:
def ctr_decrypt(data: bytes, key: bytes, iv: bytes) -> bytes:

Usage

TgCrypto is as simple as this example:

import os
import tgcrypto

data = os.urandom(10 * 1024 * 1024)  # 10 MB of random data
key = os.urandom(32)  # Random Key
iv = os.urandom(32)  # Random IV

ige_encrypted = tgcrypto.ige_encrypt(data, key, iv)
ige_decrypted = tgcrypto.ige_decrypt(ige_encrypted, key, iv)

assert data == ige_decrypted

Contribution

You are very welcome to contribute by either submitting pull requests or reporting issues/bugs as well as suggesting best practices, ideas, enhancements on both code and documentation. Any help is appreciated!

Feedback

Means for getting in touch:

License


[1]Although TgCrypto is intended for Pyrogram, it is shipped as a standalone package and can thus be used for any other Python project too.