### Installation Source: https://github.com/pyrogram/tgcrypto/blob/master/README.md Installs the TgCrypto library using pip. Ensure you are using Python 3.7 or higher. ```bash $ pip3 install -U tgcrypto ``` -------------------------------- ### CBC Mode Encryption and Decryption Example Source: https://github.com/pyrogram/tgcrypto/blob/master/README.md Illustrates the process of encrypting and decrypting data using AES-256-CBC mode with TgCrypto. Similar to IGE mode, data must be padded to a multiple of 16 bytes before encryption. ```python import os import tgcrypto data = os.urandom(10 * 1024 * 1024 + 7) # 10 MB of random data + 7 bytes to show padding key = os.urandom(32) # Random Key enc_iv = bytearray(os.urandom(16)) # Random IV dec_iv = enc_iv.copy() # Keep a copy for decryption # Pad with zeroes: -7 % 16 = 9 data += bytes(-len(data) % 16) cbc_encrypted = tgcrypto.cbc256_encrypt(data, key, enc_iv) cbc_decrypted = tgcrypto.cbc256_decrypt(cbc_encrypted, key, dec_iv) print(data == cbc_decrypted) # True ``` -------------------------------- ### CTR Mode (Single Chunk) Encryption and Decryption Example Source: https://github.com/pyrogram/tgcrypto/blob/master/README.md Shows how to encrypt and decrypt a single chunk of data using AES-256-CTR mode with TgCrypto. This example highlights the use of a state variable for CTR mode operations. ```python import os import tgcrypto data = os.urandom(10 * 1024 * 1024) # 10 MB of random data key = os.urandom(32) # Random Key enc_iv = bytearray(os.urandom(16)) # Random IV dec_iv = enc_iv.copy() # Keep a copy for decryption ctr_encrypted = tgcrypto.ctr256_encrypt(data, key, enc_iv, bytes(1)) ctr_decrypted = tgcrypto.ctr256_decrypt(ctr_encrypted, key, dec_iv, bytes(1)) print(data == ctr_decrypted) # True ``` -------------------------------- ### IGE Mode Encryption and Decryption Example Source: https://github.com/pyrogram/tgcrypto/blob/master/README.md Demonstrates how to encrypt and decrypt data using AES-256-IGE mode with TgCrypto. It includes padding the data to a multiple of 16 bytes before encryption and verifying the decrypted data matches the original. ```python import os import tgcrypto data = os.urandom(10 * 1024 * 1024 + 7) # 10 MB of random data + 7 bytes to show padding key = os.urandom(32) # Random Key iv = os.urandom(32) # Random IV # Pad with zeroes: -7 % 16 = 9 data += bytes(-len(data) % 16) ige_encrypted = tgcrypto.ige256_encrypt(data, key, iv) ige_decrypted = tgcrypto.ige256_decrypt(ige_encrypted, key, iv) print(data == ige_decrypted) # True ``` -------------------------------- ### CTR Mode (Stream) Encryption and Decryption Example Source: https://github.com/pyrogram/tgcrypto/blob/master/README.md Demonstrates encrypting and decrypting data in a streaming fashion using AES-256-CTR mode with TgCrypto. This is useful for handling large files or data streams where processing in chunks is necessary. ```python import os from io import BytesIO import tgcrypto data = BytesIO(os.urandom(10 * 1024 * 1024)) # 10 MB of random data key = os.urandom(32) # Random Key enc_iv = bytearray(os.urandom(16)) # Random IV dec_iv = enc_iv.copy() # Keep a copy for decryption enc_state = bytes(1) # Encryption state, starts from 0 dec_state = bytes(1) # Decryption state, starts from 0 encrypted_data = BytesIO() # Encrypted data buffer decrypted_data = BytesIO() # Decrypted data buffer while True: chunk = data.read(1024) if not chunk: break # Write 1K encrypted bytes into the encrypted data buffer encrypted_data.write(tgcrypto.ctr256_encrypt(chunk, key, enc_iv, enc_state)) # Reset position. We need to read it now encrypted_data.seek(0) while True: chunk = encrypted_data.read(1024) if not chunk: break # Write 1K decrypted bytes into the decrypted data buffer decrypted_data.write(tgcrypto.ctr256_decrypt(chunk, key, dec_iv, dec_state)) print(data.getvalue() == decrypted_data.getvalue()) # True ``` -------------------------------- ### TgCrypto API Reference Source: https://github.com/pyrogram/tgcrypto/blob/master/README.md Provides the function signatures for TgCrypto's cryptographic operations, including AES-256 in IGE, CTR, and CBC modes. These functions are used for encrypting and decrypting data according to Telegram's MTProto specifications. ```APIDOC ige256_encrypt(data: bytes, key: bytes, iv: bytes) -> bytes Encrypts data using AES-256 in IGE mode. Parameters: data: The bytes to encrypt. key: The 32-byte encryption key. iv: The 32-byte initialization vector. Returns: The encrypted bytes. ige256_decrypt(data: bytes, key: bytes, iv: bytes) -> bytes Decrypts data using AES-256 in IGE mode. Parameters: data: The bytes to decrypt. key: The 32-byte decryption key. iv: The 32-byte initialization vector. Returns: The decrypted bytes. ctr256_encrypt(data: bytes, key: bytes, iv: bytes, state: bytes) -> bytes Encrypts data using AES-256 in CTR mode. Parameters: data: The bytes to encrypt. key: The 32-byte encryption key. iv: The 16-byte initialization vector. state: The current encryption state (typically starts at 1). Returns: The encrypted bytes. ctr256_decrypt(data: bytes, key: bytes, iv: bytes, state: bytes) -> bytes Decrypts data using AES-256 in CTR mode. Parameters: data: The bytes to decrypt. key: The 32-byte decryption key. iv: The 16-byte initialization vector. state: The current decryption state (typically starts at 1). Returns: The decrypted bytes. cbc256_encrypt(data: bytes, key: bytes, iv: bytes) -> bytes Encrypts data using AES-256 in CBC mode. Parameters: data: The bytes to encrypt. Must be padded to a multiple of 16 bytes. key: The 32-byte encryption key. iv: The 16-byte initialization vector. Returns: The encrypted bytes. cbc256_decrypt(data: bytes, key: bytes, iv: bytes) -> bytes Decrypts data using AES-256 in CBC mode. Parameters: data: The bytes to decrypt. key: The 32-byte decryption key. iv: The 16-byte initialization vector. Returns: The decrypted bytes. ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.