Ejemplo n.º 1
0
    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"
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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")
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 7
0
    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:
Ejemplo n.º 8
0
def send_message(msg, own_addr, dst):
    OWN_ADDR = own_addr
    netif = network_interface(NET_PATH, OWN_ADDR)
    netif.send_msg(dst, msg)
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
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()