def __init__(self): self.current_protocol = "SEP" # changed to FMP later self.expected_incoming_msg_type = "RES_INIT" self.ver = 1 self.NET_PATH = "./network" self.FOLDER_PATH = "./client" if (self.NET_PATH[-1] != '/') and (self.NET_PATH[-1] != '\\'): self.NET_PATH += '/' if (self.FOLDER_PATH[-1] != '/') and (self.FOLDER_PATH[-1] != '\\'): self.FOLDER_PATH += '/' self.DST_ADDR = None self.OWN_ADDR = input('Type your own address: ') # Ex. A, B, or C self.netif = network_interface(self.NET_PATH, self.OWN_ADDR) self.protocols = Protocols() self.timeout = 30 self.sleep_time = 0.1 self.session_key = None self.client_prikey = None self.client_pubkey = None self.server_pubkey = None #fmp seq num self.seq_last_received = 0 self.seq_last_sent = 0 self.DATA_LOC = "my_data"
def __init__(self): self.ver = 1 self.current_protocol = 'SEP' # changed to FMP later self.expected_incoming_msg_type = "REQ_INIT" self.OWN_ADDR = "Z" #input("Type your own address: ") print("Starting server as Z...") self.DST_ADDR = None self.NET_PATH = "./network" self.FOLDER_PATH = "./server" if (self.NET_PATH[-1] != '/') and (self.NET_PATH[-1] != '\\'): self.NET_PATH += '/' if (self.FOLDER_PATH[-1] != '/') and (self.FOLDER_PATH[-1] != '\\'): self.FOLDER_PATH += '/' self.netif = network_interface(self.NET_PATH, self.OWN_ADDR) self.protocols = Protocols() self.timeout = 30 self.sleep_time = 0.1 self.session_key = None self.client_pubkey = None self.client_pubkey_len = None self.server_prikey = None # to decrypted saved password and prikey self.passphrase = "sepfmp" self.iv = b'\x8c\xbcW\xcf\x0b\xa6\x00\xec\xa7\x94\xd2\x9a\x01Z\xd7\xfc' #fmp seq num self.seq_last_received = 0 self.seq_last_sent = 0 #fmp file manipulation self.client_root_path = None self.cur_dir = None
def __init__(self, server, network, serverRSA): if server == None: server = os.getcwd().split('src')[0] + 'server' if not os.path.exists(server): os.mkdir(server) self.serverAddress = server if not os.path.exists(self.serverAddress + "/USERS"): os.mkdir(self.serverAddress + "/USERS") # password to protect private rsa self.password = getpass.getpass("Enter RSA password: "******"/example_server_keys/serverRSApublic.pem" with open(serverRSA, 'rb') as f: self.serverRSApublic = RSA.import_key(f.read()) serverPrivate = self.serverAddress + '/serverRSAprivate.pem' if not os.path.exists(serverPrivate): serverPrivate = os.getcwd() + "/example_server_keys/serverRSAprivate.pem" self.getPrivateKey(serverPrivate) self.workingDir = None self.currentUser = None self.lastMsg = 0 self.msgNonce = None self.AESKey = None # network connection if network == None: network = os.getcwd().split('src')[0] + 'network' if not os.path.exists(network): os.mkdir(network) self.networkPath = network self.networkRef = network_interface(self.networkPath, 'server') self.sessions = {} print("Server Running")
def __init__(self, client, network, serverRSA): if client == None: client = os.getcwd().split('src')[0] + 'client' if not os.path.exists(client): os.mkdir(client) self.clientAddress = client if serverRSA == None: serverRSA = self.clientAddress + '/serverRSApublic.pem' if not os.path.exists(serverRSA): serverRSA = os.getcwd( ) + "/example_server_keys/serverRSApublic.pem" self.serverRSApublic = serverRSA # used for keeping track of new messages self.lastMsg = 0 self.msgNonce = None # set after initSession - session key self.AESKey = None # user params self.login() # network connection if network == None: network = os.getcwd().split('src')[0] + 'network' if not os.path.exists(network): os.mkdir(network) self.networkPath = network self.networkRef = network_interface(self.networkPath, self.username)
def init_user(addr): global address global private_key global public_key global _netif address = addr public_key = getPublicKey(addr) private_key = get_private_key(addr) _netif = network_interface('./', address)
def execute_send(self): self.leader_addr = self.elect_leader() self.sig_manager = RSASigManager(self.leader_addr) shared_secret = Random.get_random_bytes(SHARED_KEY_LENGTH) iso_msgs = self.compose_ISO_msgs(shared_secret) # instantiate network for distribution # put enc_message in leader's OUT directory netif = network_interface(NET_PATH, self.leader_addr) for recipient_addr in iso_msgs: iso_msg = iso_msgs[recipient_addr] netif.send_msg(recipient_addr, iso_msg)
elif opt == '-a' or opt == '--addr': OWN_ADDR = arg if (NET_PATH[-1] != '/') and (NET_PATH[-1] != '\\'): NET_PATH += '/' if not os.access(NET_PATH, os.F_OK): print('Error: Cannot access path ' + NET_PATH) sys.exit(1) if len(OWN_ADDR) > 1: OWN_ADDR = OWN_ADDR[0] if OWN_ADDR not in network_interface.addr_space: print('Error: Invalid address ' + OWN_ADDR) sys.exit(1) netif = network_interface(NET_PATH, OWN_ADDR) dst = input('Type a server address: ') user = User(netif, dst, OWN_ADDR) user.login() encryptionEngine = encrypt(OWN_ADDR, user.session_message_key, user.session_mac_key) decryptionEngine = decrypt(user.session_message_key, user.session_mac_key) receive_mode = True while True: msg = input('>> ') if msg == 'exit' or msg == 'quit': break if msg == 'help': print("""List of commands:
def send_message(msg, own_addr, dst): OWN_ADDR = own_addr netif = network_interface(NET_PATH, OWN_ADDR) netif.send_msg(dst, msg)
def __init__(self, NET_PATH, OWN_ADDR): self.NET_PATH = NET_PATH self.OWN_ADDR = OWN_ADDR self.NETIF = network_interface(NET_PATH, OWN_ADDR)
if not os.path.exists(own_addr): print('Server environment ' + own_addr + ' does not exist. Trying to create it... ', end='') os.mkdir(own_addr) print('Done.') # start connecting to network if not os.path.exists(network_path): print('Network path at ' + network_path + ' does not exist. Trying to create it... ', end='') os.mkdir(network_path) print('Done.') netif = network_interface(network_path, network_own_identifier) # create user workspace if not os.path.exists(default_client_wd): print('Client workspace at ' + default_client_wd + ' does not exist. Trying to create it... ', end='') os.mkdir(default_client_wd) print('Done.') # ----------------- # key establishment # ----------------- keyexchange = FTAkeyexchange(own_addr) keyexchange.generateKeyPair()