TgCrypto-pyrofork


NameTgCrypto-pyrofork JSON
Version 1.2.7 PyPI version JSON
download
home_pagehttps://github.com/Mayuri-Chan
SummaryFast and Portable Cryptography Extension Library for Pyrofork
upload_time2024-10-08 07:50:19
maintainerNone
docs_urlNone
authorwulan17
requires_python~=3.9
licenseLGPLv3+
keywords pyrogram pyrofork telegram crypto cryptography encryption mtproto extension library aes
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # TgCrypto

> Fast and Portable Cryptography Extension Library for Pyrofork

**TgCrypto** is a Cryptography Library written in C as a Python extension. It is designed to be portable, fast,
easy to install and use. TgCrypto is intended for [Pyrofork](https://github.com/Mayuri-Chan/pyrofork) and implements the
cryptographic algorithms Telegram requires, namely:

- **`AES-256-IGE`** - used in [MTProto v2.0](https://core.telegram.org/mtproto).
- **`AES-256-CTR`** - used for [CDN encrypted files](https://core.telegram.org/cdn).
- **`AES-256-CBC`** - used for [encrypted passport credentials](https://core.telegram.org/passport).

## Requirements

- Python 3.7 or higher.

## Installation

``` bash
$ pip3 install -U tgcrypto
```

## API

TgCrypto API consists of these six methods:

```python
def ige256_encrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...
def ige256_decrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...

def ctr256_encrypt(data: bytes, key: bytes, iv: bytes, state: bytes) -> bytes: ...
def ctr256_decrypt(data: bytes, key: bytes, iv: bytes, state: bytes) -> bytes: ...

def cbc256_encrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...
def cbc256_decrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...
```

## Usage

### IGE Mode

**Note**: Data must be padded to match a multiple of the block size (16 bytes).

``` 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 (single chunk)

``` 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
```

### CTR Mode (stream)

``` 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
```

### CBC Mode

**Note**: Data must be padded to match a multiple of the block size (16 bytes).

``` 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
```

## Testing

1. Clone this repository: `git clone https://github.com/pyrogram/tgcrypto`.
2. Enter the directory: `cd tgcrypto`.
3. Install `tox`: `pip3 install tox`
4. Run tests: `tox`.

## License

[LGPLv3+](COPYING.lesser) © 2017-present [Dan](https://github.com/delivrance)  
[LGPLv3+](COPYING.lesser) © 2024-present [Mayuri-Chan](https://github.com/Mayuri-Chan)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Mayuri-Chan",
    "name": "TgCrypto-pyrofork",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "~=3.9",
    "maintainer_email": null,
    "keywords": "pyrogram pyrofork telegram crypto cryptography encryption mtproto extension library aes",
    "author": "wulan17",
    "author_email": "mayuri@mayuri.my.id",
    "download_url": "https://files.pythonhosted.org/packages/96/80/bae4260b65885765407e2e8e59c0452bf180f6b5b23779596a354223c6c5/TgCrypto-pyrofork-1.2.7.tar.gz",
    "platform": null,
    "description": "# TgCrypto\n\n> Fast and Portable Cryptography Extension Library for Pyrofork\n\n**TgCrypto** is a Cryptography Library written in C as a Python extension. It is designed to be portable, fast,\neasy to install and use. TgCrypto is intended for [Pyrofork](https://github.com/Mayuri-Chan/pyrofork) and implements the\ncryptographic algorithms Telegram requires, namely:\n\n- **`AES-256-IGE`** - used in [MTProto v2.0](https://core.telegram.org/mtproto).\n- **`AES-256-CTR`** - used for [CDN encrypted files](https://core.telegram.org/cdn).\n- **`AES-256-CBC`** - used for [encrypted passport credentials](https://core.telegram.org/passport).\n\n## Requirements\n\n- Python 3.7 or higher.\n\n## Installation\n\n``` bash\n$ pip3 install -U tgcrypto\n```\n\n## API\n\nTgCrypto API consists of these six methods:\n\n```python\ndef ige256_encrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...\ndef ige256_decrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...\n\ndef ctr256_encrypt(data: bytes, key: bytes, iv: bytes, state: bytes) -> bytes: ...\ndef ctr256_decrypt(data: bytes, key: bytes, iv: bytes, state: bytes) -> bytes: ...\n\ndef cbc256_encrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...\ndef cbc256_decrypt(data: bytes, key: bytes, iv: bytes) -> bytes: ...\n```\n\n## Usage\n\n### IGE Mode\n\n**Note**: Data must be padded to match a multiple of the block size (16 bytes).\n\n``` python\nimport os\n\nimport tgcrypto\n\ndata = os.urandom(10 * 1024 * 1024 + 7)  # 10 MB of random data + 7 bytes to show padding\nkey = os.urandom(32)  # Random Key\niv = os.urandom(32)  # Random IV\n\n# Pad with zeroes: -7 % 16 = 9\ndata += bytes(-len(data) % 16)\n\nige_encrypted = tgcrypto.ige256_encrypt(data, key, iv)\nige_decrypted = tgcrypto.ige256_decrypt(ige_encrypted, key, iv)\n\nprint(data == ige_decrypted)  # True\n```\n    \n### CTR Mode (single chunk)\n\n``` python\nimport os\n\nimport tgcrypto\n\ndata = os.urandom(10 * 1024 * 1024)  # 10 MB of random data\n\nkey = os.urandom(32)  # Random Key\n\nenc_iv = bytearray(os.urandom(16))  # Random IV\ndec_iv = enc_iv.copy()  # Keep a copy for decryption\n\nctr_encrypted = tgcrypto.ctr256_encrypt(data, key, enc_iv, bytes(1))\nctr_decrypted = tgcrypto.ctr256_decrypt(ctr_encrypted, key, dec_iv, bytes(1))\n\nprint(data == ctr_decrypted)  # True\n```\n\n### CTR Mode (stream)\n\n``` python\nimport os\nfrom io import BytesIO\n\nimport tgcrypto\n\ndata = BytesIO(os.urandom(10 * 1024 * 1024))  # 10 MB of random data\n\nkey = os.urandom(32)  # Random Key\n\nenc_iv = bytearray(os.urandom(16))  # Random IV\ndec_iv = enc_iv.copy()  # Keep a copy for decryption\n\nenc_state = bytes(1)  # Encryption state, starts from 0\ndec_state = bytes(1)  # Decryption state, starts from 0\n\nencrypted_data = BytesIO()  # Encrypted data buffer\ndecrypted_data = BytesIO()  # Decrypted data buffer\n\nwhile True:\n    chunk = data.read(1024)\n\n    if not chunk:\n        break\n\n    # Write 1K encrypted bytes into the encrypted data buffer\n    encrypted_data.write(tgcrypto.ctr256_encrypt(chunk, key, enc_iv, enc_state))\n\n# Reset position. We need to read it now\nencrypted_data.seek(0)\n\nwhile True:\n    chunk = encrypted_data.read(1024)\n\n    if not chunk:\n        break\n\n    # Write 1K decrypted bytes into the decrypted data buffer\n    decrypted_data.write(tgcrypto.ctr256_decrypt(chunk, key, dec_iv, dec_state))\n\nprint(data.getvalue() == decrypted_data.getvalue())  # True\n```\n\n### CBC Mode\n\n**Note**: Data must be padded to match a multiple of the block size (16 bytes).\n\n``` python\nimport os\n\nimport tgcrypto\n\ndata = os.urandom(10 * 1024 * 1024 + 7)  # 10 MB of random data + 7 bytes to show padding\nkey = os.urandom(32)  # Random Key\n\nenc_iv = bytearray(os.urandom(16))  # Random IV\ndec_iv = enc_iv.copy()  # Keep a copy for decryption\n\n# Pad with zeroes: -7 % 16 = 9\ndata += bytes(-len(data) % 16)\n\ncbc_encrypted = tgcrypto.cbc256_encrypt(data, key, enc_iv)\ncbc_decrypted = tgcrypto.cbc256_decrypt(cbc_encrypted, key, dec_iv)\n\nprint(data == cbc_decrypted)  # True\n```\n\n## Testing\n\n1. Clone this repository: `git clone https://github.com/pyrogram/tgcrypto`.\n2. Enter the directory: `cd tgcrypto`.\n3. Install `tox`: `pip3 install tox`\n4. Run tests: `tox`.\n\n## License\n\n[LGPLv3+](COPYING.lesser) \u00a9 2017-present [Dan](https://github.com/delivrance)  \n[LGPLv3+](COPYING.lesser) \u00a9 2024-present [Mayuri-Chan](https://github.com/Mayuri-Chan)\n",
    "bugtrack_url": null,
    "license": "LGPLv3+",
    "summary": "Fast and Portable Cryptography Extension Library for Pyrofork",
    "version": "1.2.7",
    "project_urls": {
        "Community": "https://t.me/MayuriChan_Chat",
        "Documentation": "https://pyrofork.mayuri.my.id",
        "Download": "https://github.com/Mayuri-Chan/tgcrypto/releases/latest",
        "Homepage": "https://github.com/Mayuri-Chan",
        "Source": "https://github.com/Mayuri-Chan/tgcrypto",
        "Tracker": "https://github.com/Mayuri-Chan/tgcrypto/issues"
    },
    "split_keywords": [
        "pyrogram",
        "pyrofork",
        "telegram",
        "crypto",
        "cryptography",
        "encryption",
        "mtproto",
        "extension",
        "library",
        "aes"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "344aa67b5e19f3586d5b49b05a8ac5c1a6ce00ba9262fdc78782b3ac434ab757",
                "md5": "0ba6d3653a0914c32fea5c8b8a987ec3",
                "sha256": "cd8b4282b15b30f71ee2f6f28dcac57c3a53cd6b2d672525970ba522159b7afc"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "0ba6d3653a0914c32fea5c8b8a987ec3",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "~=3.9",
            "size": 62120,
            "upload_time": "2024-10-08T07:46:28",
            "upload_time_iso_8601": "2024-10-08T07:46:28.599351Z",
            "url": "https://files.pythonhosted.org/packages/34/4a/a67b5e19f3586d5b49b05a8ac5c1a6ce00ba9262fdc78782b3ac434ab757/TgCrypto_pyrofork-1.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5b41f12de6a01a2eb1593bd5006e2f5d91b287a7bbdf520520f743b97e6401e3",
                "md5": "5ba8495071dc56d59d8219e7380ae2ce",
                "sha256": "06f79351fbc726d1f83adf4700f2a3056ee5fdaaf3792aa85483895c0f193649"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp310-cp310-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "5ba8495071dc56d59d8219e7380ae2ce",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "~=3.9",
            "size": 61042,
            "upload_time": "2024-10-08T07:46:30",
            "upload_time_iso_8601": "2024-10-08T07:46:30.311631Z",
            "url": "https://files.pythonhosted.org/packages/5b/41/f12de6a01a2eb1593bd5006e2f5d91b287a7bbdf520520f743b97e6401e3/TgCrypto_pyrofork-1.2.7-cp310-cp310-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "204177b81c17be553b071e5b5ff86bfc8f781fc583403a929466bb57ceba54a3",
                "md5": "6b4805ad5885d82302b291ea8b992be1",
                "sha256": "1fecb418f8b563e5692f2b0ac2cbab75c883d2dfcffdec6b5a9641ca2bbe6b6b"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "6b4805ad5885d82302b291ea8b992be1",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "~=3.9",
            "size": 45082,
            "upload_time": "2024-10-08T08:16:59",
            "upload_time_iso_8601": "2024-10-08T08:16:59.173647Z",
            "url": "https://files.pythonhosted.org/packages/20/41/77b81c17be553b071e5b5ff86bfc8f781fc583403a929466bb57ceba54a3/TgCrypto_pyrofork-1.2.7-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f3cc0c4f96694575d2209dc3aefe341004d2e92fa3b9e33690692fc4dd097b55",
                "md5": "c11e8ea7d0c5efd2df5390be7cd5ac0c",
                "sha256": "73eb1a703106a97d5ee9d3542cc2f2a20b882e01ddb0954b46e7c721752904a7"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c11e8ea7d0c5efd2df5390be7cd5ac0c",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "~=3.9",
            "size": 45678,
            "upload_time": "2024-10-08T08:17:00",
            "upload_time_iso_8601": "2024-10-08T08:17:00.896715Z",
            "url": "https://files.pythonhosted.org/packages/f3/cc/0c4f96694575d2209dc3aefe341004d2e92fa3b9e33690692fc4dd097b55/TgCrypto_pyrofork-1.2.7-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "63ed850c1aea4fd12bee2e14d4ca3d3378054864d9bd42bf9972d98687ad4248",
                "md5": "2b51dcc6aee5c257fb2dd17ec8612eea",
                "sha256": "6a8a4f5b3940cd5fe0d7cd6c4e72eb58e2ff75cd39b0649e5b158c21e231cb2e"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "2b51dcc6aee5c257fb2dd17ec8612eea",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "~=3.9",
            "size": 62907,
            "upload_time": "2024-10-08T07:46:31",
            "upload_time_iso_8601": "2024-10-08T07:46:31.843633Z",
            "url": "https://files.pythonhosted.org/packages/63/ed/850c1aea4fd12bee2e14d4ca3d3378054864d9bd42bf9972d98687ad4248/TgCrypto_pyrofork-1.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c8d2604964b0c982df872e6f492255e76114a7c3120176e84d53fb345f306535",
                "md5": "bae9a7f562958c2636aa7e040f049174",
                "sha256": "640104e8b859729469db6de8234975a52988a06c3362ad6c8b46edd92ac543c0"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp311-cp311-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "bae9a7f562958c2636aa7e040f049174",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "~=3.9",
            "size": 61829,
            "upload_time": "2024-10-08T07:46:33",
            "upload_time_iso_8601": "2024-10-08T07:46:33.430956Z",
            "url": "https://files.pythonhosted.org/packages/c8/d2/604964b0c982df872e6f492255e76114a7c3120176e84d53fb345f306535/TgCrypto_pyrofork-1.2.7-cp311-cp311-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3dcabf4a3af79b585eb69baccb1dd4ce1b1bdb8d4fb74df1230204b2c72b3692",
                "md5": "5e0d5377d1604f5712fb5c26d749b1bd",
                "sha256": "3264b2ee060be4363c7f46d82320e2b65d944598de2dc192d4f395a3ba33ee27"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "5e0d5377d1604f5712fb5c26d749b1bd",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "~=3.9",
            "size": 45080,
            "upload_time": "2024-10-08T08:17:03",
            "upload_time_iso_8601": "2024-10-08T08:17:03.046341Z",
            "url": "https://files.pythonhosted.org/packages/3d/ca/bf4a3af79b585eb69baccb1dd4ce1b1bdb8d4fb74df1230204b2c72b3692/TgCrypto_pyrofork-1.2.7-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5e1a50dc01a9530bf681e0e2692d67d7f9a155a3d8cbf534373372238b1c4807",
                "md5": "65f6b0559ca79eee32ae9604d68fe943",
                "sha256": "fbff80b2099e6d42ab680bd2cf01de4aa003ac6acf4928b659d8aaa082ea7b72"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "65f6b0559ca79eee32ae9604d68fe943",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "~=3.9",
            "size": 45683,
            "upload_time": "2024-10-08T08:17:04",
            "upload_time_iso_8601": "2024-10-08T08:17:04.467488Z",
            "url": "https://files.pythonhosted.org/packages/5e/1a/50dc01a9530bf681e0e2692d67d7f9a155a3d8cbf534373372238b1c4807/TgCrypto_pyrofork-1.2.7-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "05a4f891a83b182db7695519a0b3164c0101deee636ad316f7af91b60c74bd97",
                "md5": "4c50b161bcbfc124f7002630e61db631",
                "sha256": "4a8d67d3065a9e35e92bbacbac8676b014acefbb7d77adf980f2efeaedeee7a3"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "4c50b161bcbfc124f7002630e61db631",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "~=3.9",
            "size": 62546,
            "upload_time": "2024-10-08T07:46:34",
            "upload_time_iso_8601": "2024-10-08T07:46:34.787076Z",
            "url": "https://files.pythonhosted.org/packages/05/a4/f891a83b182db7695519a0b3164c0101deee636ad316f7af91b60c74bd97/TgCrypto_pyrofork-1.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f6fffdeb386cc58c837d6b0592091a5839950dc7657436fce0c672dcf70aa17f",
                "md5": "143c017fbaf5f54def65fd96fc1926ed",
                "sha256": "0a750d23e714a7da9bf5ff14900e62fcfd704592a68b52b9859426b153f7e325"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp312-cp312-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "143c017fbaf5f54def65fd96fc1926ed",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "~=3.9",
            "size": 61482,
            "upload_time": "2024-10-08T07:46:35",
            "upload_time_iso_8601": "2024-10-08T07:46:35.939184Z",
            "url": "https://files.pythonhosted.org/packages/f6/ff/fdeb386cc58c837d6b0592091a5839950dc7657436fce0c672dcf70aa17f/TgCrypto_pyrofork-1.2.7-cp312-cp312-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "12b8490c26190cb77ad8450e6dda33ea7ae44317aa950b1e5c4fee2575943743",
                "md5": "3b196663194649b70085fff829ca11a1",
                "sha256": "7bf3d77fe040a6d498487d595335d10778ed22dad403b63c7527432910b6c256"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "3b196663194649b70085fff829ca11a1",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "~=3.9",
            "size": 45079,
            "upload_time": "2024-10-08T08:17:06",
            "upload_time_iso_8601": "2024-10-08T08:17:06.013638Z",
            "url": "https://files.pythonhosted.org/packages/12/b8/490c26190cb77ad8450e6dda33ea7ae44317aa950b1e5c4fee2575943743/TgCrypto_pyrofork-1.2.7-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f55b6aa76f506c29b13fb86dcfa3e79b4d8e7589d8bf3e9d045efa906733da03",
                "md5": "a269e4229f0b7294ef0256f59978f5b5",
                "sha256": "7b158ae63e74a09cf42920f818e937919a57b495d61bc3616fffb2b92a3b21f7"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a269e4229f0b7294ef0256f59978f5b5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "~=3.9",
            "size": 45679,
            "upload_time": "2024-10-08T08:17:08",
            "upload_time_iso_8601": "2024-10-08T08:17:08.583753Z",
            "url": "https://files.pythonhosted.org/packages/f5/5b/6aa76f506c29b13fb86dcfa3e79b4d8e7589d8bf3e9d045efa906733da03/TgCrypto_pyrofork-1.2.7-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "112aa634c7974f08462e16a3250599ed08a9260b6fb0757eaca92770fd87c019",
                "md5": "9772534f575ac99f91255c7cf150c315",
                "sha256": "d8d627bd0ffc26f9919db3fa31c7618060b1b728041bd4aec80f114f0d82cf13"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "9772534f575ac99f91255c7cf150c315",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "~=3.9",
            "size": 62469,
            "upload_time": "2024-10-08T07:46:37",
            "upload_time_iso_8601": "2024-10-08T07:46:37.486260Z",
            "url": "https://files.pythonhosted.org/packages/11/2a/a634c7974f08462e16a3250599ed08a9260b6fb0757eaca92770fd87c019/TgCrypto_pyrofork-1.2.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8d16780b25d2e83f0a8fa069b9f17c116d928ccb126007e88e2d174751d24aa1",
                "md5": "5be0fece45f6126f7c58d625b23b8359",
                "sha256": "dd3cbd29f92f9f01c52deab22be7febe80aaa085d46b7c8f2cc2a7969434a96f"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp313-cp313-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "5be0fece45f6126f7c58d625b23b8359",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "~=3.9",
            "size": 61524,
            "upload_time": "2024-10-08T07:46:38",
            "upload_time_iso_8601": "2024-10-08T07:46:38.845569Z",
            "url": "https://files.pythonhosted.org/packages/8d/16/780b25d2e83f0a8fa069b9f17c116d928ccb126007e88e2d174751d24aa1/TgCrypto_pyrofork-1.2.7-cp313-cp313-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5ff84ef2dd105693788b39785b0ccc8c800e01e80ae996fdeb02608c18b15bff",
                "md5": "36c148d759d3838d275f051b646ff774",
                "sha256": "9974ba74bac28074776a1c16ef66026ca0448665876b568c70011bddbd9c33b2"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp313-cp313-win32.whl",
            "has_sig": false,
            "md5_digest": "36c148d759d3838d275f051b646ff774",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "~=3.9",
            "size": 45077,
            "upload_time": "2024-10-08T08:17:10",
            "upload_time_iso_8601": "2024-10-08T08:17:10.192596Z",
            "url": "https://files.pythonhosted.org/packages/5f/f8/4ef2dd105693788b39785b0ccc8c800e01e80ae996fdeb02608c18b15bff/TgCrypto_pyrofork-1.2.7-cp313-cp313-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8315dba4c5c9299b0ca1b2f0ef8e4e4be02a79e3ce1efeecb05562c9ac98ff2f",
                "md5": "f3a763b3469ec74d7f61b3a19d60d98c",
                "sha256": "5dd7251a43990216790590ec22f56169b4be3ba87c8d3591c56111d5f94f0898"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f3a763b3469ec74d7f61b3a19d60d98c",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "~=3.9",
            "size": 45677,
            "upload_time": "2024-10-08T08:17:11",
            "upload_time_iso_8601": "2024-10-08T08:17:11.590325Z",
            "url": "https://files.pythonhosted.org/packages/83/15/dba4c5c9299b0ca1b2f0ef8e4e4be02a79e3ce1efeecb05562c9ac98ff2f/TgCrypto_pyrofork-1.2.7-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "52707d0fae9334e0c178baea20cb1a889a4898073d05a902999e8555a3b9b6c1",
                "md5": "1090b9ecd18a93f65c4e0d138f627040",
                "sha256": "2b9ff14080fa0ecf94dc710f47a15703e249edf14968478dc93f05185223cd0d"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "1090b9ecd18a93f65c4e0d138f627040",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "~=3.9",
            "size": 61914,
            "upload_time": "2024-10-08T07:46:39",
            "upload_time_iso_8601": "2024-10-08T07:46:39.742464Z",
            "url": "https://files.pythonhosted.org/packages/52/70/7d0fae9334e0c178baea20cb1a889a4898073d05a902999e8555a3b9b6c1/TgCrypto_pyrofork-1.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9395d17792326a6f5e118e61683c986aced9a55d1a92d593c99ff11065cc66d2",
                "md5": "ee1de6f4fc6551022294271544623c78",
                "sha256": "8c9e71b3e6a2d7c25de0a4f80f861955e9e699dff54552e3144b8cd6dd53bcaa"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp39-cp39-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "ee1de6f4fc6551022294271544623c78",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "~=3.9",
            "size": 60845,
            "upload_time": "2024-10-08T07:46:41",
            "upload_time_iso_8601": "2024-10-08T07:46:41.138624Z",
            "url": "https://files.pythonhosted.org/packages/93/95/d17792326a6f5e118e61683c986aced9a55d1a92d593c99ff11065cc66d2/TgCrypto_pyrofork-1.2.7-cp39-cp39-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f1e873ddd4ec0bda11cd5c8405dde8c87c73704326725e9ad60d87eb0392c6e5",
                "md5": "bc7aa47a68ade9b5c45ae9b21f0d4b35",
                "sha256": "e982c67df4d693e5db8682ba79e73e2aabc042492c6acc3738185887aad4beb9"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "bc7aa47a68ade9b5c45ae9b21f0d4b35",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "~=3.9",
            "size": 45075,
            "upload_time": "2024-10-08T08:17:13",
            "upload_time_iso_8601": "2024-10-08T08:17:13.254428Z",
            "url": "https://files.pythonhosted.org/packages/f1/e8/73ddd4ec0bda11cd5c8405dde8c87c73704326725e9ad60d87eb0392c6e5/TgCrypto_pyrofork-1.2.7-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "29c90509353dc217a4579ffd22499d7366b8b5547921802997164a9a1f51e031",
                "md5": "1bd50787267d4f8aa4aaf966348cb7cf",
                "sha256": "5e487e9d67d6605649cddc3aa3fac1d0a3ff5affa1abf94293ea1cdada3ffd13"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "1bd50787267d4f8aa4aaf966348cb7cf",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "~=3.9",
            "size": 45676,
            "upload_time": "2024-10-08T08:17:14",
            "upload_time_iso_8601": "2024-10-08T08:17:14.157222Z",
            "url": "https://files.pythonhosted.org/packages/29/c9/0509353dc217a4579ffd22499d7366b8b5547921802997164a9a1f51e031/TgCrypto_pyrofork-1.2.7-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7c50ffcf5964639cf14bf184498d3fde0e0f5313654ea752c524431c55e72af4",
                "md5": "c40a7863d10285924a2a1c8bd7fead06",
                "sha256": "1b7195fd1ae6b705a05512c636e94f1b78dae7bf7c80dad6deac1414fec4cef3"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "c40a7863d10285924a2a1c8bd7fead06",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": "~=3.9",
            "size": 46277,
            "upload_time": "2024-10-08T07:46:41",
            "upload_time_iso_8601": "2024-10-08T07:46:41.987496Z",
            "url": "https://files.pythonhosted.org/packages/7c/50/ffcf5964639cf14bf184498d3fde0e0f5313654ea752c524431c55e72af4/TgCrypto_pyrofork-1.2.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7cc0a47a0edd6d7a05937d4ee087a4b7154392d798ed99461e98145c5ce2b9eb",
                "md5": "8bd9a920e04ba88f345abc5eb9a5a361",
                "sha256": "0d44149f628b31a098f44dee93e7e1bc13dafe7e77f5fae65f2881a20cfda8dd"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-pp310-pypy310_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "8bd9a920e04ba88f345abc5eb9a5a361",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": "~=3.9",
            "size": 45811,
            "upload_time": "2024-10-08T08:17:15",
            "upload_time_iso_8601": "2024-10-08T08:17:15.068083Z",
            "url": "https://files.pythonhosted.org/packages/7c/c0/a47a0edd6d7a05937d4ee087a4b7154392d798ed99461e98145c5ce2b9eb/TgCrypto_pyrofork-1.2.7-pp310-pypy310_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1116c01fc568ee8c11d3fbb70ff4a826958a0462d1e187f7b5384d8a67364ab0",
                "md5": "166a85e8f12d6787c6073d9e923a39b4",
                "sha256": "6daa354c84ff67f75b4304df8896859e3beb39840866d2ac95751e5719d4463a"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "166a85e8f12d6787c6073d9e923a39b4",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": "~=3.9",
            "size": 46275,
            "upload_time": "2024-10-08T07:46:43",
            "upload_time_iso_8601": "2024-10-08T07:46:43.465562Z",
            "url": "https://files.pythonhosted.org/packages/11/16/c01fc568ee8c11d3fbb70ff4a826958a0462d1e187f7b5384d8a67364ab0/TgCrypto_pyrofork-1.2.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0d4e66d5b0604d7089f84420327ea89e549db1ce3477d94f71ef9161f1c8a469",
                "md5": "c841f15700348f9fefab9cf195bf7ae7",
                "sha256": "13d3f25e49ea6cc746502cf543c9ffc420c0f4f5524ddd5329fcf76a0362445a"
            },
            "downloads": -1,
            "filename": "TgCrypto_pyrofork-1.2.7-pp39-pypy39_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c841f15700348f9fefab9cf195bf7ae7",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": "~=3.9",
            "size": 45808,
            "upload_time": "2024-10-08T08:17:16",
            "upload_time_iso_8601": "2024-10-08T08:17:16.001497Z",
            "url": "https://files.pythonhosted.org/packages/0d/4e/66d5b0604d7089f84420327ea89e549db1ce3477d94f71ef9161f1c8a469/TgCrypto_pyrofork-1.2.7-pp39-pypy39_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9680bae4260b65885765407e2e8e59c0452bf180f6b5b23779596a354223c6c5",
                "md5": "0998839b7196f2bc220dd61630d21746",
                "sha256": "1b91bbd14bac6e661912719efdac2446d48fec9b9bcb7980069a1a94fd622ff9"
            },
            "downloads": -1,
            "filename": "TgCrypto-pyrofork-1.2.7.tar.gz",
            "has_sig": false,
            "md5_digest": "0998839b7196f2bc220dd61630d21746",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "~=3.9",
            "size": 37369,
            "upload_time": "2024-10-08T07:50:19",
            "upload_time_iso_8601": "2024-10-08T07:50:19.806335Z",
            "url": "https://files.pythonhosted.org/packages/96/80/bae4260b65885765407e2e8e59c0452bf180f6b5b23779596a354223c6c5/TgCrypto-pyrofork-1.2.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-08 07:50:19",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Mayuri-Chan",
    "github_project": "tgcrypto",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "circle": true,
    "tox": true,
    "lcname": "tgcrypto-pyrofork"
}
        
Elapsed time: 0.34537s