hks-pylib 0.0.8
A python utility library is written by huykingsofm
Requires Python: >=3.7.1

# hks_pylib
A Python 3 utility library of [huykingsofm](https://github.com/huykingsofm). It has some modules, including:
- `logger`: A module is used to print notifications to the console screen or write logs to file. It is special because you can disable the print/write statement by modifying a few parameters without commenting or deleting them manually. 
- `cryptography`: A wrapper crypto module bases on and is followed by the implementation style of [cryptography](https://pypi.org/project/cryptography/). It is easier to use than the original one and fits many procedures in our projects.
- `done`: A module defines a class (`Done`) for returning complex values more conveniently.
- `http`: A module is used to parse or generate raw HTTP packets.
- `math`: A module implements some no-builtin mathematic operations.
- `hksenum`: A wrapper module of `Enum` is more convenient than the original.
- `files`: A file processing module.

# How to build
Our library is only supported by Python>=3.7.1. Now we test it only on Python 3.7.1. If you meet any problems, even if with other versions, you could [create an issue](https://github.com/huykingsofm/hks_pylib/issues) to notify us. We will solve them as quickly as possible.  

## Create Virtual Environment (optional but IMPORTANT)
*If you had your virtual environment, you can ignore this step.* 

You ought to create a virtual environment to avoid conflicting with other applications on your machine when installing our module. The virtual environment must be installed with [Python 3](https://www.python.org/downloads).  
I highly recommend you to use [Anaconda](https://www.anaconda.com/products/individual) because of its utilities. The command of creating a virtual environment in Anaconda is:
```bash
$ conda create -n your_venv_name python=3.7.1
$ conda activate your_venv_name
(your_venv_name) $ _ 
```

Or use `Python venv`:
```bash
$ python -m venv path/to/your/venv
$ path/to/your/venv/Scripts/activate.bat
(your_venv_name) $ _
```

## Method 1: Install the stablest version (PyPI)
```bash
(your_venv_name) $ pip install hks_pylib
```

## Method 2: Install the newest version (Github)

```bash
(your_venv_name) $ git clone https://github.com/huykingsofm/hks_pylib.git
(your_venv_name) $ cd hks_pylib
(your_venv_name) hks_pylib $ pip install -e .
```

# How to use
Just use `import` statement and enjoy it. We will write documentation and tutorials as soon as possible so that you can understand our library easier.

```python
# A Done object can be used to substitute 
# complex return values
from hks_pylib.done import Done
# Example: return Done(True, reason="OK")

# A class is used to print/write 
# logs to console/file
from hks_pylib.logger import StandardLogger  

# A class is used to generate StandardLogger objects.
# You should use this class instead of 
# using StandardLogger directly
from hks_pylib.logger import StandardLoggerGenerator

# You may use our console_output instead of print builtin function
# in a multithread program
from hks_pylib.logger import acprint
acprint("Something")

# Some common ciphers
from hks_pylib.cipher import NoCipher, AES_CBC, HybridCipher 

# You can parse or generate raw HTTP packets with these class
from hks_pylib.http import HTTPParser, HTTPPacket  

# You can encrypt or decrypt your data with our cryptography module
from hks_pylib.cryptography.ciphers.symmetrics import AES_CTR, AES_CBC
from hks_pylib.cryptography.ciphers.asymmetrics import RSAKey, RSACipher
# or hash functions
from hks_pylib.cryptography.hashes import SHA1, SHA256
# or Diffie Hellman
from hks_pylib.cryptography.protocols import DiffieHellmanExchange
```

# Change log
## Version 0.0.7 -- 0.0.8
+ Fix the error of `InvisibleLogger`.
+ Fix `reset()` in `AES_CTR` and `AES_CBC`.
+ Fix `save...()` and `load...()` in `RSAKey`.
+ Add the `acprint(.)` for avoid conflicting print.
+ Add `@as_object` decorator.
+ Add `MD5` to `hashes`.
+ Add `KeyGenerator` to `ciphers`.


## Version 0.0.6
+ Change .gitignore to template of Python.
+ Change the `http` style.
+ Change the `logger` to `HKSEnum` style.
+ Add `InvisibleLoggerGenerator`, `InvisibleLogger` for more convenient.
+ Add some utility methods to `HKSEnum` and `Done`.
+ Change many error types and replace some errors to `hkserror`.
<!---Commit at 02/05/2021 8:00:00-->

## Version 0.0.5
+ Change allmost all generic exceptions to highly identified exceptions (in modules of `hks_pylib.errors`).
+ Add the `Output` class to `hks_pylib.logger.config`. Now logger can easily avoid conflicting in printing.
+ Add a wrapper module `hks_pylib.hksenum` of builtin python class `Enum`. Change many constants to `HKSEnum` type.
+ Divide module `hks_pylib.cryptography.ciphers` into multiple submodules and move them to folder `cryptography/ciphers/`.
+ Divide module `hks_pylib.logger` into multiple submodules and move them to folder `logger/`.
+ Remove `requirements.txt`.
+ Add `Bitwise` operator to `math`.
+ Add [`batchcrypt`](https://www.usenix.org/conference/atc20/presentation/zhang-chengliang) module to `hks_pylib.cryptography`.
+ Add an example of `batchcrypt` in folder `examples/`.