summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-04-10 10:51:20 +0000
committerCoprDistGit <infra@openeuler.org>2023-04-10 10:51:20 +0000
commitc30c8d31ac40d40f946fd9514e647e4b5c13f118 (patch)
treee79d53372fff9b7f777c70aae9e1b4c00d497307
parent89febe7c805f17791552e4fd599784e50608ed7d (diff)
automatic import of python-tgcrypto
-rw-r--r--.gitignore1
-rw-r--r--python-tgcrypto.spec554
-rw-r--r--sources1
3 files changed, 556 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..8a53858 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/TgCrypto-1.2.5.tar.gz
diff --git a/python-tgcrypto.spec b/python-tgcrypto.spec
new file mode 100644
index 0000000..bce5ef8
--- /dev/null
+++ b/python-tgcrypto.spec
@@ -0,0 +1,554 @@
+%global _empty_manifest_terminate_build 0
+Name: python-TgCrypto
+Version: 1.2.5
+Release: 1
+Summary: Fast and Portable Cryptography Extension Library for Pyrogram
+License: LGPLv3+
+URL: https://github.com/pyrogram
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/33/59/7cf5ced989e3139a791d5452d58cb8994de589576b80f9267ba76d794f6c/TgCrypto-1.2.5.tar.gz
+
+
+%description
+# TgCrypto
+
+> Fast and Portable Cryptography Extension Library for Pyrogram
+
+**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 [Pyrogram](https://github.com/pyrogram/pyrogram) 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)
+
+
+%package -n python3-TgCrypto
+Summary: Fast and Portable Cryptography Extension Library for Pyrogram
+Provides: python-TgCrypto
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+BuildRequires: python3-cffi
+BuildRequires: gcc
+BuildRequires: gdb
+%description -n python3-TgCrypto
+# TgCrypto
+
+> Fast and Portable Cryptography Extension Library for Pyrogram
+
+**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 [Pyrogram](https://github.com/pyrogram/pyrogram) 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)
+
+
+%package help
+Summary: Development documents and examples for TgCrypto
+Provides: python3-TgCrypto-doc
+%description help
+# TgCrypto
+
+> Fast and Portable Cryptography Extension Library for Pyrogram
+
+**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 [Pyrogram](https://github.com/pyrogram/pyrogram) 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)
+
+
+%prep
+%autosetup -n TgCrypto-1.2.5
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-TgCrypto -f filelist.lst
+%dir %{python3_sitearch}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Mon Apr 10 2023 Python_Bot <Python_Bot@openeuler.org> - 1.2.5-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..369fbcc
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+7d418ae8e72538a2e39cc4a7912715a1 TgCrypto-1.2.5.tar.gz