コード例 #1
0
ファイル: m_client.py プロジェクト: xoSauce/AnonINX
 def encryptForDB(self, msg, key, session_name):
     getGlobalSphinxParams().group
     g_x, iv, ciphertext, tag = self.encryptor.encrypt_aes_gcm(
         msg, key, session_name)
     e_message = {
         'pk': g_x.export(),
         'iv': iv,
         'text': ciphertext,
         'tag': tag
     }
     json_msg = dumps(e_message)
     return (json_msg)
コード例 #2
0
def test_listener():
    portEnum = PortEnumDebug
    thing = Client({'ip': '0.0.0.0', 'port': portEnum.broker.value})
    group = getGlobalSphinxParams().group.G
    dummy_key = group.generator().export()
    SecurityParameters.NUMBER_OF_REQUESTS = 3
    thing.db_list = [(0, dummy_key), (1, dummy_key), (2, dummy_key)]
    thing.mixnode_list = {
        '0.0.0.0': dummy_key,
        '0.0.0.0': dummy_key,
        '0.0.0.0': dummy_key
    }
    msgCreator = MessageCreator(thing)
    requested_index = 5
    record_size = 100
    requested_db = 2
    messages = msgCreator.generate_messages(requested_index,
                                            requested_db,
                                            record_size,
                                            portEnum,
                                            pir_xor=False)
    host = '0.0.0.0'
    port = portEnum.mix.value
    mix = MixNode(None)
    mix.process = MagicMock(return_value=(Relay_flag, None, None, None))
    listener = MixNodeListener(host, port, mix, (Lock(), Lock()), port)  #
    network_sender = NetworkSender()
    json, dest = messages[0][0]
    network_sender.send_data(json, dest)
    asyncore.loop(count=2)
    assert (len(mix.mix_pool.getContents()) == 1)
コード例 #3
0
ファイル: m_client.py プロジェクト: xoSauce/AnonINX
 def prepare_forward_message(mixnodes_dict, message, dest, key,
                             portEnum):
     params = getGlobalSphinxParams()
     group = params.group.G
     use_nodes_forward = rand_subset(mixnodes_dict.keys(),
                                     SecurityParameters.NUMBER_OF_MIXES)
     use_nodes_backward = rand_subset(
         mixnodes_dict.keys(), SecurityParameters.NUMBER_OF_MIXES)
     nodes_routing_forward = list(map(Nenc, use_nodes_forward))
     nodes_routing_backward = list(map(Nenc, use_nodes_backward))
     pks_chosen_nodes_forward = [
         EcPt.from_binary(mixnodes_dict[key], group)
         for key in use_nodes_forward
     ]
     pks_chosen_nodes_backward = [
         EcPt.from_binary(mixnodes_dict[key], group)
         for key in use_nodes_backward
     ]
     surbid, surbkeytuple, nymtuple = create_surb(
         params, nodes_routing_backward, pks_chosen_nodes_backward,
         self.ip)
     self.surbDict[surbid] = {'surbkeytuple': surbkeytuple}
     message['nymtuple'] = nymtuple
     message = encode(message)
     json_msg = self.encryptForDB(message, key, self.session_name)
     print(json_msg, len(json_msg))
     header, delta = create_forward_message(params,
                                            nodes_routing_forward,
                                            pks_chosen_nodes_forward,
                                            dest, json_msg)
     return (header, delta, use_nodes_forward[0], surbid,
             use_nodes_backward[-1])
コード例 #4
0
ファイル: db_listener.py プロジェクト: xoSauce/AnonINX
 def handle_PIR(self, decrypted_msg, client_pk):
     time_queued = time.perf_counter() - self.t_accepted
     log_info(">>>>> TIME QUEUED: {}".format(time_queued))
     t1 = time.perf_counter()
     print("TRYING TO FETCH")
     answer = self.dbnode.fetch_answer(decrypted_msg)
     print("ANSWER:", answer)
     reply = encode(answer)
     encrypted_reply = encode(self.dbnode.encrypt(reply, client_pk))
     nymtuple = decrypted_msg['nymtuple']
     first_node = decode(nymtuple[0])
     header, delta = package_surb(getGlobalSphinxParams(), nymtuple,
                                  encrypted_reply)
     self.dbnode.get_mixnode_list()
     json_data, dest = RequestCreator().post_msg_to_mix(
         {
             'ip': first_node[1],
             'port': self.mixport
         }, {
             'header': header,
             'delta': delta
         })
     t2 = time.perf_counter()
     elapsed_time = (t2 - t1)
     log_info("TIME ELAPSED: {}".format(elapsed_time))
     self.network_sender.send_data(json_data, dest)
コード例 #5
0
ファイル: m_client.py プロジェクト: xoSauce/AnonINX
 def __init__(self, public_key_server):
     self.broker_comm = BrokerCommunicator()
     self.public_key_server = public_key_server
     self.db_list = None
     self.mixnode_list = None
     self.ip = getPublicIp()
     self.encryptor = Encryptor(getGlobalSphinxParams().group)
     self.surbDict = {}
コード例 #6
0
ファイル: m_client.py プロジェクト: xoSauce/AnonINX
    def create_db_destination(self, destination, port):
        try:

            destination = self.db_list[destination]
            destination = (destination[0], destination[1], port)
            key = EcPt.from_binary(destination[1],
                                   getGlobalSphinxParams().group.G)
            return (destination, key)
        except Exception as e:
            raise Exception(
                'Requested database not present or named incorrectly. {} not found. Error {}'
                .format(destination, e))
コード例 #7
0
ファイル: db.py プロジェクト: xoSauce/AnonINX
 def __init__(self, broker_config):
     self.private_key = None
     self.public_key = None
     self.ip = None
     self.params = getGlobalSphinxParams()
     self.network_sender = NetworkSender()
     self.broker_config = broker_config
     self.encryptor = Encryptor(self.params.group)
     self.mixnodes_list = None
     self.broker_comm = BrokerCommunicator()
     self.records = {}
     self.loadRecords()
     self.decoder = BinaryEncoderDecoder()
コード例 #8
0
 def __init__(self, broker_config, pool_size=3):
     self.private_key = None
     self.public_key = None
     self.ip = None
     self.params = getGlobalSphinxParams()
     self.network_sender = NetworkSender()
     self.broker_config = broker_config
     self.encryptor = Encryptor(self.params.group)
     self.db_list = None
     self.broker_comm = BrokerCommunicator()
     self.client_cache = {}
     self.mix_pool = MixPool(pool_size)
     self.client_backlog = set()
コード例 #9
0
def test_generateMessages():
    portEnum = PortEnumDebug
    thing = Client({'ip': '0.0.0.0', 'port': portEnum.broker.value})
    group = getGlobalSphinxParams().group.G
    dummy_key = group.generator().export()
    SecurityParameters.NUMBER_OF_REQUESTS = 12
    thing.db_list = [(0, dummy_key), (1, dummy_key), (2, dummy_key)]
    thing.mixnode_list = {'a': dummy_key, 'b': dummy_key, 'c': dummy_key}
    msgCreator = MessageCreator(thing)
    requested_index = 5
    record_size = 100
    requested_db = 2
    for i in range(0, 20):
        random_indexes = msgCreator._generate_random_indexes(5, record_size)
        print(random_indexes)
        assert (len(random_indexes) == SecurityParameters.NUMBER_OF_REQUESTS -
                1)
        assert (requested_index not in random_indexes)

    messages = msgCreator.generate_messages(requested_index,
                                            requested_db,
                                            record_size,
                                            portEnum,
                                            pir_xor=False)
    len_0 = len(messages[0])
    for key, value in messages.items():
        assert (len(value) == len_0)

    messages = msgCreator.generate_messages(requested_index,
                                            requested_db,
                                            record_size,
                                            portEnum,
                                            pir_xor=True)
    assert (len(messages) == len(thing.db_list))
    first_message = messages[0]
    for key, value in messages.items():
        assert (len(value) == len(first_message))
コード例 #10
0
ファイル: db_listener.py プロジェクト: xoSauce/AnonINX
 def handle_read(self):
     data = super().handle_read()
     if data:
         data = pickle.loads(data)
         iv = data["iv"]
         text = data["text"]
         pk = EcPt.from_binary(data["pk"], getGlobalSphinxParams().group.G)
         tag = data["tag"]
         decrypted_msg = decode(self.dbnode.decrypt(iv, text, pk, tag))
         request_type = decrypted_msg['request_type']
         client_pk = decrypted_msg['pk'][2]
         if request_type == RequestType.get_db_size.value:
             record_size = self.dbnode.getRecordsSize()
             reply = encode(record_size)
             self.socket.sendall(reply)
         elif request_type == RequestType.push_to_db.value:
             pir_handler = threading.Thread(target=self.handle_PIR,
                                            args=(
                                                decrypted_msg,
                                                client_pk,
                                            ),
                                            name="PIR handler")
             pir_handler.daemon = True
             pir_handler.start()
コード例 #11
0
ファイル: m_client.py プロジェクト: xoSauce/AnonINX
 def recoverMessage(self, msg, myid):
     surbkeytuple = self.surbDict[myid]['surbkeytuple']
     index = self.surbDict[myid]['index']
     return (index,
             decode(receive_surb(getGlobalSphinxParams(), surbkeytuple,
                                 msg)))