A COMMUNICATION PROTOCOL FOR COMPUTERS TO COMMUNICATE THROUGH A SAFE CHANNEL
Project description
CYPHER_PROTOCOL
-
This is a type of communication protocol made for computers using TCP sockets.
-
This is a highly secure and trust worthy protocol made using tcp sockets. It uses aggressively secure encryption AES-128 bit algorithm both the ways for a tight security
ISSUES WITH OTHER PROTOCOLS
-
Other protocols give errors when some error occurs and we have to handle it manually to remove it or to continue the process in the same sequence but CYPHER_PROTOCOL does that error handling automatically and the programmers are more free to focus on the flow instead of error handling.
-
Whenever some error occurs in recieving data or sending data it resolves it automatically.
-
Whenever it notices a disconnection from server it automatically re-connects to the server.
COMPATIBLITY
-
CYPHER_PROTOCOL works with Linux, OS-X, and Windows (OS INDEPENDENT).
-
But it may give better experience on linux.
INSTALLATION
Install it using pip.
- Goto PYPI
HOW TO USE ?
-
Encryption key is a 32 character encryption key for the server and decryption key for client
-
Decryption key is a 32 character decryption key for server and encryption key for the client
-
Although encryption and decryption key can be kept same for any reason
-
request_processor in server initialisation is a method/function that user have to define and it is used to process the request recieved from client
-
responce_processor in client initialisation is a method/function that user have to define and it is used to process the responce recieved from server
-
Server's request handler recieves the request in the form :
{
"PATH": str,
"OPERATION": str,
"DATA": YOUR_DATA_HERE,
"METADATA": dict
}
-
But it can also be modified as per needs
-
"PATH" is like the path we see in http protocol and here it is "/" by default
-
"OPERATION" is operation we have to perform like "UPDATE", "DELETE", "READ", "CREATE" etc. Also you can create your own type of operation if you want to, its just for convenience
-
"DATA" contains data that you want to share between the server and the client
-
"METADATA" contains data that you may need to use, its completely optional
SERVER
import time
import traceback
from CYPHER_PROTOCOL.CYPHER_SERVER.cypher_server import CYPHER_SERVER
SEQUENCE = []
NUMBER = 0
def request_processor(data: dict, ip_port: tuple) -> dict :
global SEQUENCE
global NUMBER
print(data)
if data["PATH"] == "/SEQUENCE" :
if data["OPERATION"] == "UPDATE" :
SEQUENCE.append(data["DATA"])
if len(SEQUENCE) > 10 :
SEQUENCE.pop(0)
responce = {"PATH": data["PATH"], "OPERATION": data["OPERATION"], "METADATA": data["METADATA"]}
responce["DATA"] = "UPDATED"
return responce
elif data["OPERATION"] == "READ" :
responce = {"PATH": data["PATH"], "OPERATION": data["OPERATION"], "METADATA": data["METADATA"]}
responce["DATA"] = SEQUENCE
return responce
elif data["PATH"] == "/NUMBER" :
if data["OPERATION"] == "UPDATE" :
NUMBER = data["DATA"]
responce = {"PATH": data["PATH"], "OPERATION": data["OPERATION"], "METADATA": data["METADATA"]}
responce["DATA"] = "UPDATED"
return responce
elif data["OPERATION"] == "READ" :
responce = {"PATH": data["PATH"], "OPERATION": data["OPERATION"], "METADATA": data["METADATA"]}
responce["DATA"] = NUMBER
return responce
SERVER_OBJECT = CYPHER_SERVER(12345, "2ZpK1CdQfm0s1EZ1SIhYfV7MHdJf8X3U", "2ZpK1CdQfm0s1EZ1SIhYfV7MHdJf8X3U", request_processor, debug1=True, debug2=True)
SERVER_OBJECT.start_server()
time.sleep(60*5)
SERVER_OBJECT.stop_server()
CLIENT
import threading
import time
import random
from CYPHER_PROTOCOL.CYPHER_CLIENT.cypher_client import CYPHER_CLIENT
def responce_processor(responce: dict) :
print(responce)
def online_sig_processor() :
print("You are online")
def offline_sig_processor() :
print("You are offline")
def request_maker() :
global CLIENT_OBJECT
while True :
request = {"PATH": "/SEQUENCE", "OPERATION": "UPDATE", "DATA": random.randint(0,1000), "METADATA": {}}
CLIENT_OBJECT.make_request(path = request["PATH"], operation = request["OPERATION"], data = request["DATA"], metadata = request["METADATA"])
time.sleep(1)
request = {"PATH": "/SEQUENCE", "OPERATION": "READ", "METADATA": {}}
CLIENT_OBJECT.make_request(path = request["PATH"], operation = request["OPERATION"], metadata = request["METADATA"])
#$$$$$$$$$$#
request = {"PATH": "/NUMBER", "OPERATION": "UPDATE", "DATA": random.randint(0,1000), "METADATA": {}}
CLIENT_OBJECT.make_request(path = request["PATH"], operation = request["OPERATION"], data = request["DATA"], metadata = request["METADATA"])
time.sleep(1)
request = {"PATH": "/NUMBER", "OPERATION": "READ", "METADATA": {}}
CLIENT_OBJECT.make_request(path = request["PATH"], operation = request["OPERATION"], metadata = request["METADATA"])
CLIENT_OBJECT = CYPHER_CLIENT("127.0.0.1", 12345, "2ZpK1CdQfm0s1EZ1SIhYfV7MHdJf8X3U", "2ZpK1CdQfm0s1EZ1SIhYfV7MHdJf8X3U", responce_processor, offline_signal_processor=offline_sig_processor, online_signal_processor=online_sig_processor)
CLIENT_OBJECT.connect()
THREAD = threading.Thread(target=request_maker, args=())
THREAD.start()
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for cypher_protocol_P-Y-R-O-B-O-T-1.1.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | d9b19c8358c6477bb8d4935f496bd22087173af8bfc50af7026f8a224637c812 |
|
MD5 | 1952ff29431bfa9df12d491f26b6e077 |
|
BLAKE2b-256 | d1a607bfe5122d93aef8764f2197bf01df6ab9e726c81833cac8bece8973099f |
Hashes for cypher_protocol_P_Y_R_O_B_O_T-1.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b04178da3a6c3f677a3c3ca8407afc0f3f771218a60a0b306ce5b9d35b7c5ca |
|
MD5 | 3771ce1c7b41fc7546d4c7d35e2e9b17 |
|
BLAKE2b-256 | 2cffa6394ea851277620751b35ef9db0400b35ef0c1b00f2886d55c6f8f9169d |