123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- import socket
- import threading
- import os
- import config as cfg
- from connection.socket import SocketServer
- from connection.socket import SocketHTTP
- from tcp import models
- import time
- from tcp import utils
- import tcp as t
- from types import SimpleNamespace
- class Connector():
- def __init__(self, parser,socket):
- self.parser = parser
- self.server = None
- self.serverDomain = None
- self.serverIP = None
- self.s = SocketServer(socket,self.parser,"Connector")
- self.buffer = []
- self.handshaked = False
- self.t = threading.Thread(target=self.tcp)
-
- print("\n\n Connector\n\n")
-
- def recv(self,data):
- try:
- self.buffer.append(data)
- if not self.t.is_alive():
- self.t.start()
- except:
- print("\33[41m\33[41mAn exception occurred recv\33[0m" )
- def oracleInitial(self,data):
- try:
- while len(self.s.connected) < 2:
- time.sleep(.5)
- if(len(self.s.connected) == 2):
- # if self.s.connected[0].addr[0] == data["bearer"] and self.s.connected[1].addr[0] == data["cryptor"]:
- self.bearer = self.s.connected[1]
- self.cryptor = self.s.connected[0]
- # elif self.s.connected[1].addr[0] == data["bearer"] and self.s.connected[0].addr[0] == data["cryptor"]:
- # self.bearer = self.s.connected[1]
- # self.cryptor = self.s.connected[0]
- # else:
- # raise Exception("Error")
-
- self.serverDomain = data["server"]
- if type(self.serverDomain) == str:
- self.serverDomain = [self.serverDomain]
- # self.serverIP = socket.gethostbyname(data["server"])
- self.serverIP = "216.58.205.228"
- self.server = SocketHTTP(self.serverIP,443,self)
- except Exception as e:
- print("\33[41m\33[41mAn exception occurred oracleInitial Connector ",e,"\33[0m" )
-
- def keyExchange(self,data):
- try:
- while not self.server:
- time.sleep(.5)
- self.key_exchange =bytes.fromhex( data["keyExchange"])
- self.server.send(bytes.fromhex(self.client_hello()))
- except NameError:
- print(NameError)
- print("\33[41mAn exception occurred keyExchange Connector,\33[0m")
- # def toCryptor(self,data):
- # try:
- # self.key_exchange =bytes.fromhex( data["keyExchange"])
- # self.server.send(bytes.fromhex(self.client_hello()))
- # except NameError:
- # print(NameError)
- # print("\33[41mAn exception occurred keyExchange Connector,\33[0m")
- def client_hello(self):
- try:
- print("Done 1")
- extensions = [
- models.ClientExtension.server_names(self.serverDomain),
- models.ClientExtension.supported_versions([b"\x03\x04"]),
- models.ClientExtension.key_share(
- [models.KeyShareEntry(models.NamedGroup.x25519, self.key_exchange)]
- ),
- models.ClientExtension.signature_algorithms(list(models.SignatureScheme)),
- models.ClientExtension.supported_groups([models.NamedGroup.x25519]),
- ]
-
- compatibility_mode = True
- handshake = models.Handshake(
- models.HandshakeType.client_hello,
- models.ClientHello(
- ...,
- os.urandom(32),
- os.urandom(32) if compatibility_mode else b"",
- list(models.CipherSuite),
- ...,
- extensions,
- ),
- )
- self.client_hello_data = handshake.binary
- self.handshake_context = bytearray(self.client_hello_data)
- self.parser.parserSend(bytes(self.client_hello_data).hex(),self.cryptor,"fromContoCryHelloCLient")
- data = models.ContentType.handshake.tls_plaintext(self.client_hello_data)
- return bytes.hex(data)
- except Exception as exception:
- print("\33[41mAn exception occurred client_hello Connector,\33[0m",exception)
- def tcp(self):
- while 1:
- time.sleep(0.5)
- while self.buffer and self.buffer[0] and len(self.buffer[0])>=10:
- s = self.buffer[0][6:10]
- print(s)
- l = int(s,16)*2+10
- a = self.lenCalc(l)
- if not self.handshaked:
- self.parser.parserSend(a,self.cryptor,"fromContoCry")
- self.t.exit()
- def lenCalc(self, len2):
- if len(self.buffer[0]) > len2:
- a = self.buffer[0][:len2]
- self.buffer[0] = self.buffer[0][len2:]
- return a
- elif len(self.buffer[0]) == len2 :
- return self.buffer.pop(0)
- elif len(self.buffer[0]) < len2 :
- if self.buffer[1]:
- self.buffer[0] = self.buffer[0] + self.buffer[1]
- self.buffer.pop(1)
- return lenCalc(self.buffer,len2)
- else:
- print("Data is not copmlete1 ")
- time.sleep(1)
- lenCalc(self.buffer,len2)
- else:
- print("Data is not copmlet2e")
- time.sleep(1)
- lenCalc(self.buffer,len2)
-
- def MPC(self,data):
- try:
- print("TODO") # TODO
- except Exception as exception :
- print("\33[41mAn exception occurred MPC Connector " ,exception,"\33[0m" )
- def fromCrytoCon(self,data):
- try:
- print("TODO fromCrytoCon") # TODO
- except Exception as exception :
- print("\33[41mAn exception occurred fromCrytoCon Connector " ,exception,"\33[0m" )
|